форкнуто от main/python-labs
Вы не можете выбрать более 25 тем
Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.
113 строки
4.1 KiB
Markdown
113 строки
4.1 KiB
Markdown
# Индивидуальное контрольное задание по теме 8
|
|
Подольский Никита, А-01-23
|
|
|
|
## Задание (Вариант 4)
|
|
|
|
Разработайте функцию с 5 аргументами, создающую отсчеты сигнала в виде последовательности импульсов с заданными параметрами: амплитуда, продолжительность импульса, период (им-пульс + пауза), число отсчетов (аргументы функции). Сигнал должен быть записан в виде столбца в текстовый файл с заданным именем (5-й аргумент функции), а также возвращен в вызывающую программу в виде списка.
|
|
|
|
По указанному преподавателем 4ому варианту контрольного задания разработайте функцию, на ее основе создайте модуль. Создайте второй модуль, в котором должны быть инструкции для ввода/создания исходных данных для проверки работы функции, вызов функции и отображение полученных результатов.
|
|
|
|
## Решение
|
|
### Вариант 4
|
|
``` python
|
|
# module_pulse.py
|
|
|
|
def generate_pulse_signal(ampl, pulse_len, period, n_samples, filename):
|
|
ampl = float(ampl)
|
|
pulse_len = int(pulse_len)
|
|
period = int(period)
|
|
n_samples = int(n_samples)
|
|
|
|
if pulse_len <= 0 or period <= 0 or n_samples <= 0 or period < pulse_len:
|
|
print("Ошибка: проверь параметры (pulse_len>0, period>=pulse_len, n_samples>0)")
|
|
return [] # вернём пустой список
|
|
|
|
signal = []
|
|
for i in range(n_samples):
|
|
if (i % period) < pulse_len:
|
|
signal.append(ampl)
|
|
else:
|
|
signal.append(0)
|
|
|
|
f = open(filename, "w", encoding="utf-8")
|
|
for x in signal:
|
|
f.write(str(x) + "\n")
|
|
f.close()
|
|
|
|
return signal
|
|
|
|
|
|
```
|
|
|
|
|
|
```python
|
|
# main_test.py
|
|
|
|
from module_pulse import generate_pulse_signal
|
|
|
|
def main():
|
|
print("Генератор импульсного сигнала (вариант 4)\n")
|
|
|
|
ampl = float(input("Амплитуда: "))
|
|
pulse_len = int(input("Длительность импульса (отсчёты): "))
|
|
period = int(input("Период (импульс+пауза, отсчёты): "))
|
|
n_samples = int(input("Число отсчётов: "))
|
|
filename = input("Имя файла для записи (например signal.txt): ").strip()
|
|
|
|
signal = generate_pulse_signal(ampl, pulse_len, period, n_samples, filename)
|
|
|
|
print("\nГотово.")
|
|
print(f"Сигнал записан в файл: {filename}")
|
|
print("Первые 30 отсчётов (или меньше):")
|
|
print(signal[:30])
|
|
|
|
# чтобы было видно структуру по периодам:
|
|
print("\nСигнал по строкам (индекс: значение) для первых 30:")
|
|
for i in range(min(30, len(signal))):
|
|
print(i, ":", signal[i])
|
|
|
|
|
|
if __name__ == "__main__":
|
|
main()
|
|
|
|
```
|
|
|
|
Результат
|
|
``` python
|
|
Генератор импульсного сигнала (вариант 4)
|
|
|
|
Амплитуда: 5
|
|
Длительность импульса (отсчёты): 3
|
|
Период (импульс+пауза, отсчёты): 8
|
|
Число отсчётов: 20
|
|
Имя файла для записи (например signal.txt): signal.txt
|
|
|
|
Готово.
|
|
Сигнал записан в файл: signal.txt
|
|
Первые 30 отсчётов (или меньше):
|
|
[5.0, 5.0, 5.0, 0, 0, 0, 0, 0, 5.0, 5.0, 5.0, 0, 0, 0, 0, 0, 5.0, 5.0, 5.0, 0]
|
|
|
|
Сигнал по строкам (индекс: значение) для первых 30:
|
|
0 : 5.0
|
|
1 : 5.0
|
|
2 : 5.0
|
|
3 : 0
|
|
4 : 0
|
|
5 : 0
|
|
6 : 0
|
|
7 : 0
|
|
8 : 5.0
|
|
9 : 5.0
|
|
10 : 5.0
|
|
11 : 0
|
|
12 : 0
|
|
13 : 0
|
|
14 : 0
|
|
15 : 0
|
|
16 : 5.0
|
|
17 : 5.0
|
|
18 : 5.0
|
|
19 : 0
|
|
```
|
|
|