Lykova Liza 1 месяц назад
Родитель 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.
## Решение
Всё в модулях в гите.
Загрузка…
Отмена
Сохранить