форкнуто от main/python-labs
Вы не можете выбрать более 25 тем
Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.
173 строки
4.3 KiB
Markdown
173 строки
4.3 KiB
Markdown
# Индивидуальное контрольное задание №4 по Теме 8
|
|
Лазарев Данил, А-01-23
|
|
|
|
# Задание
|
|
По указанному преподавателем варианту контрольного задания обратитесь к индивидуальному заданию с таким номером в теме 7, разработайте функцию, на ее основе создайте модуль. Создайте второй модуль, в котором должны быть инструкции для ввода/создания исходных данных для проверки работы функции, вызов функции и отображение полученных результатов.
|
|
|
|
Разработайте функцию с 5 аргументами, создающую отсчеты сигнала в виде последовательности импульсов с заданными параметрами: амплитуда, продолжительность импульса, период (импульс + пауза), число отсчетов (аргументы функции). Сигнал должен быть записан в виде столбца в текстовый файл с заданным именем (5-й аргумент функции), а также возвращен в вызывающую программу в виде списка
|
|
|
|
# Решение
|
|
Модуль 1
|
|
```
|
|
def f(A, Prod_Imp, period, num_ot, filename):
|
|
# Генерация сигнала
|
|
signal = []
|
|
for i in range(num_ot):
|
|
# Определяем положение в текущем периоде
|
|
pos = i % period
|
|
# Если находимся в пределах длительности импульса
|
|
if pos < Prod_Imp:
|
|
signal.append(A)
|
|
else:
|
|
signal.append(0.0)
|
|
# Запись в файл
|
|
with open(filename, 'w', encoding='utf-8') as f:
|
|
for i in signal:
|
|
f.write(f"{i}\n")
|
|
return signal
|
|
```
|
|
Модуль 2
|
|
```
|
|
import Modul1
|
|
|
|
def main():
|
|
A = float(input("Амплитуда импульса: "))
|
|
Prod_Imp = int(input("Продолжительность импульса (в отсчетах): "))
|
|
period = int(input("Период (импульс + пауза, в отсчетах): "))
|
|
num_ot = int(input("Общее число отсчетов: "))
|
|
filename = input("Имя файла для сохранения: ")
|
|
|
|
# Генерация сигнала
|
|
from Modul1 import f as G
|
|
signal = G(A, Prod_Imp, period, num_ot, filename)
|
|
|
|
# Вывод результатов
|
|
print('Сгенерирован сигнал')
|
|
for i in range(len(signal)):
|
|
print(f"{i}: {signal[i]}")
|
|
|
|
print('Все значения сохранены в файл')
|
|
|
|
import matplotlib.pyplot as plt
|
|
plt.title('График импульсного сигнала')
|
|
plt.xlabel('Номер отсчета')
|
|
plt.ylabel('Амплитуда')
|
|
plt.plot(signal)
|
|
plt.show()
|
|
|
|
main()
|
|
```
|
|
Итоговый вывод:
|
|
```
|
|
>> Амплитуда импульса: 5
|
|
>> Продолжительность импульса (в отсчетах): 3
|
|
>> Период (импульс + пауза, в отсчетах): 10
|
|
>> Общее число отсчетов: 100
|
|
>> Имя файла для сохранения: r.txt
|
|
|
|
Сгенерирован сигнал
|
|
|
|
0: 5.0
|
|
1: 5.0
|
|
2: 5.0
|
|
3: 0.0
|
|
4: 0.0
|
|
5: 0.0
|
|
6: 0.0
|
|
7: 0.0
|
|
8: 0.0
|
|
9: 0.0
|
|
10: 5.0
|
|
11: 5.0
|
|
12: 5.0
|
|
13: 0.0
|
|
14: 0.0
|
|
15: 0.0
|
|
16: 0.0
|
|
17: 0.0
|
|
18: 0.0
|
|
19: 0.0
|
|
20: 5.0
|
|
21: 5.0
|
|
22: 5.0
|
|
23: 0.0
|
|
24: 0.0
|
|
25: 0.0
|
|
26: 0.0
|
|
27: 0.0
|
|
28: 0.0
|
|
29: 0.0
|
|
30: 5.0
|
|
31: 5.0
|
|
32: 5.0
|
|
33: 0.0
|
|
34: 0.0
|
|
35: 0.0
|
|
36: 0.0
|
|
37: 0.0
|
|
38: 0.0
|
|
39: 0.0
|
|
40: 5.0
|
|
41: 5.0
|
|
42: 5.0
|
|
43: 0.0
|
|
44: 0.0
|
|
45: 0.0
|
|
46: 0.0
|
|
47: 0.0
|
|
48: 0.0
|
|
49: 0.0
|
|
50: 5.0
|
|
51: 5.0
|
|
52: 5.0
|
|
53: 0.0
|
|
54: 0.0
|
|
55: 0.0
|
|
56: 0.0
|
|
57: 0.0
|
|
58: 0.0
|
|
59: 0.0
|
|
60: 5.0
|
|
61: 5.0
|
|
62: 5.0
|
|
63: 0.0
|
|
64: 0.0
|
|
65: 0.0
|
|
66: 0.0
|
|
67: 0.0
|
|
68: 0.0
|
|
69: 0.0
|
|
70: 5.0
|
|
71: 5.0
|
|
72: 5.0
|
|
73: 0.0
|
|
74: 0.0
|
|
75: 0.0
|
|
76: 0.0
|
|
77: 0.0
|
|
78: 0.0
|
|
79: 0.0
|
|
80: 5.0
|
|
81: 5.0
|
|
82: 5.0
|
|
83: 0.0
|
|
84: 0.0
|
|
85: 0.0
|
|
86: 0.0
|
|
87: 0.0
|
|
88: 0.0
|
|
89: 0.0
|
|
90: 5.0
|
|
91: 5.0
|
|
92: 5.0
|
|
93: 0.0
|
|
94: 0.0
|
|
95: 0.0
|
|
96: 0.0
|
|
97: 0.0
|
|
98: 0.0
|
|
99: 0.0
|
|
|
|
Все значения сохранены в файл
|
|
```
|
|
 |