форкнуто от 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.
|
||||
|
||||
## Решение
|
||||
|
||||
Всё в модулях в гите.
|
||||
Загрузка…
Ссылка в новой задаче