форкнуто от main/python-labs
main
Родитель
c90c42bb75
Сommit
374ba673a7
@ -0,0 +1,16 @@
|
|||||||
|
import M2
|
||||||
|
import matplotlib.pyplot as plt
|
||||||
|
|
||||||
|
def main():
|
||||||
|
"""
|
||||||
|
Главная программа
|
||||||
|
"""
|
||||||
|
data = M2.main_M2()
|
||||||
|
|
||||||
|
if data:
|
||||||
|
plt.plot(data)
|
||||||
|
plt.title('SS3 из модуля M2')
|
||||||
|
plt.show()
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
main()
|
||||||
@ -0,0 +1,44 @@
|
|||||||
|
import random
|
||||||
|
|
||||||
|
def function1(name, TAU,K):
|
||||||
|
'''Чтение сигнала из файла и создание списка'''
|
||||||
|
try:
|
||||||
|
fl = open(name,'r')
|
||||||
|
data = fl.read().strip().split()
|
||||||
|
SPS1 = [float(x) for x in data]
|
||||||
|
fl.close()
|
||||||
|
|
||||||
|
N = len(SPS1)
|
||||||
|
SPS2 = [0]*N
|
||||||
|
|
||||||
|
for i in range (N):
|
||||||
|
if i < TAU - 1:
|
||||||
|
SPS2[i]=0
|
||||||
|
else:
|
||||||
|
SPS2[i]= K * SPS1[i-TAU]
|
||||||
|
|
||||||
|
return SPS1, SPS2
|
||||||
|
|
||||||
|
except FileNotFoundError:
|
||||||
|
print(f'Файл {name} не найден')
|
||||||
|
return [],[]
|
||||||
|
|
||||||
|
def function2(SS1,SS2,TT):
|
||||||
|
'''Расчет значения D'''
|
||||||
|
if not SS1 or not SS2:
|
||||||
|
return 0
|
||||||
|
|
||||||
|
N = len(SS1)
|
||||||
|
|
||||||
|
if TT<0 or TT>= N:
|
||||||
|
return 0
|
||||||
|
|
||||||
|
SR1 = sum(SS1)/N if N >0 else 0
|
||||||
|
SR2 = sum(SS2)/N if N >0 else 0
|
||||||
|
|
||||||
|
D = 0
|
||||||
|
for i in range(TT,N):
|
||||||
|
if (i-TT)<len(SS2):
|
||||||
|
D += (SS1[i] - SR1) * (SS2[i - TT] - SR2)
|
||||||
|
|
||||||
|
return D
|
||||||
@ -0,0 +1,58 @@
|
|||||||
|
import random
|
||||||
|
import M1
|
||||||
|
|
||||||
|
def main():
|
||||||
|
'''Основная функция'''
|
||||||
|
while True:
|
||||||
|
name = input("Введите имя файла с данными: ")
|
||||||
|
try:
|
||||||
|
with open(name, 'r') as test_file:
|
||||||
|
pass
|
||||||
|
break
|
||||||
|
except FileNotFoundError:
|
||||||
|
print(f"Файл '{filename}' не найден. Попробуйте снова.")
|
||||||
|
|
||||||
|
while True:
|
||||||
|
try:
|
||||||
|
TAU = int(input("Введите значение TAU (>=0): "))
|
||||||
|
if TAU >= 0:
|
||||||
|
break
|
||||||
|
else:
|
||||||
|
print("TAU должно быть >= 0. Попробуйте снова.")
|
||||||
|
except ValueError:
|
||||||
|
print("Некорректный ввод. Введите целое число.")
|
||||||
|
|
||||||
|
K = random.uniform(2, 7)
|
||||||
|
print(f"\nСлучайное значение K: {K:.2f}")
|
||||||
|
|
||||||
|
SPS1, SPS2 = M1.function1(name, TAU, K)
|
||||||
|
|
||||||
|
if not SPS1:
|
||||||
|
print("Не удалось получить данные. Программа завершена.")
|
||||||
|
return
|
||||||
|
|
||||||
|
print(f"\nДлина списка SPS1: {len(SPS1)}")
|
||||||
|
print("Первые 10 элементов SPS1:", SPS1[:10])
|
||||||
|
print("Первые 10 элементов SPS2:", SPS2[:10])
|
||||||
|
|
||||||
|
SS3 = []
|
||||||
|
max_TT = TAU + 5
|
||||||
|
|
||||||
|
for TT in range(max_TT + 1):
|
||||||
|
D = M1.function2(SPS1, SPS2, TT)
|
||||||
|
SS3.append(D)
|
||||||
|
print(f"TT = {TT}: D = {D:.6f}")
|
||||||
|
|
||||||
|
output_filename = "Res11.bin"
|
||||||
|
try:
|
||||||
|
with open(output_filename, 'w') as file:
|
||||||
|
for value in SS3:
|
||||||
|
file.write(f"{value}\n")
|
||||||
|
print(f"\nРезультаты записаны в файл: {output_filename}")
|
||||||
|
except Exception as e:
|
||||||
|
print(f"Ошибка при записи в файл: {e}")
|
||||||
|
|
||||||
|
return SS3
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
main_M2()
|
||||||
@ -0,0 +1 @@
|
|||||||
|
0.497 2.127 1.452 2.602 4.794 -1.905 0.085 -2.629 0.252 2.689 2.474 3.816 -2.189 -1.768 2.77 -2.433 -1.041 -2.445 2.476 4.147 -0.049 4.456 -0.775 4.662 -1.757 4.352 -1.168 -2.37 4.542 -1.175 3.69 -3.318 -2.284 4.73 -1.774 1.809 -3.342 -4.543 -2.636 2.474 4.302 -0.962 -0.86 4.75 -0.829 -4.45 -1.604 -3.344 -4.06 -2.0
|
||||||
@ -0,0 +1,10 @@
|
|||||||
|
import random
|
||||||
|
|
||||||
|
data = []
|
||||||
|
for i in range(50):
|
||||||
|
data.append(str(round(random.uniform(-5, 5), 3)))
|
||||||
|
|
||||||
|
with open("signal.txt", 'w') as file:
|
||||||
|
file.write(" ".join(data))
|
||||||
|
|
||||||
|
print("Файл 'signal.txt' готов к использованию")
|
||||||
@ -0,0 +1,37 @@
|
|||||||
|
# Тест 3 Вариант 3
|
||||||
|
|
||||||
|
Лыкова Елизавета, А-01-23
|
||||||
|
|
||||||
|
## Задание
|
||||||
|
|
||||||
|
1) Создайте модуль М1, содержащий две функции:
|
||||||
|
|
||||||
|
- функция 1: аргументы - имя текстового файла, содержащего некоторое число отсчетов сигнала, целочисленный параметр TAU и числовой параметр К; в функции считывается сигнал из файла в список SPS1 и формируется второй список SPS2, элементы которого определяются по правилу: первые (TAU-1) элементов равны 0, а последующие определяются по формуле: SPS2[i]=K*SPS1[i-TAU]; оба списка возвращаются в качестве результатов работы функции;
|
||||||
|
|
||||||
|
- функция 2: аргументы - два числовых списка SS1 и SS2, а также целочисленный параметр ТТ; в функции рассчитывается и возвращается значение
|
||||||
|
|
||||||
|
D= (SS1[TT]-SR1)*(SS2[0] - SR2)+ (SS1[TT+1]-SR1)*(SS2[1] - SR2)+:+
|
||||||
|
|
||||||
|
(SS1[i]-SR1)*(SS2[i-TT] - SR2)+:+ (SS1[N]-SR1)*(SS2[N-TT] - SR2),
|
||||||
|
|
||||||
|
где N - длина списка SS1, SR1, SR2 - средние значения соответствующих списков.
|
||||||
|
|
||||||
|
2) Создайте еще один модуль М2, в котором должны выполняться операции:
|
||||||
|
|
||||||
|
- запрашивается и вводится имя текстового файла с данными; проверяется наличие файла и при отсутствии - повторение запроса;
|
||||||
|
|
||||||
|
- запрашивается значение параметра TAU и проверяется TAU >=0;
|
||||||
|
|
||||||
|
- вызывается функция 1 с указанными именем файла и параметром TAU, и случайным значением К из диапазона значений от 2 до 7; отображаются рассчитанные списки;
|
||||||
|
|
||||||
|
- вызывается функция 2 в цикле со значениями TT от 0 до TAU+5; результаты записываются в список SS3;
|
||||||
|
|
||||||
|
- список SS3 записывается в текстовый файл с именем Res11.bin.
|
||||||
|
|
||||||
|
3) Создайте модуль М0 - главную программу, которая вызывает М2 и отображает в виде графика список SPS3.
|
||||||
|
|
||||||
|
4) Подготовьте файл с исходными данными - 50 отсчетов случайного нормально распределенного с некоторыми параметрами сигнала. Проведите по программе расчеты со значениями TAU, равными 0, 5 и 10.
|
||||||
|
|
||||||
|
## Решение
|
||||||
|
|
||||||
|
Всё в модулях в гите.
|
||||||
Загрузка…
Ссылка в новой задаче