форкнуто от main/python-labs
Родитель
cde8cf6e18
Сommit
ffcd01212b
@ -1,88 +1,31 @@
|
|||||||
## ИКЗ ПО теме 8
|
## Модуль 3
|
||||||
Добровольска Елизавета, А-02-23
|
Добровольска Елизавета, А-02-23
|
||||||
Вариант 4
|
Вариант 10
|
||||||
|
|
||||||
## Задание
|
## Задание
|
||||||
|
|
||||||
Разработайте функцию по заданию и на ее основе создайте модуль. Создайте второй модуль, в котором должны быть инструкции для ввода/создания исходных данных
|
M3_10
|
||||||
для проверки работы функции, вызов функции и отображение полученных результатов.
|
1) Создайте модуль М1, содержащий две функции:
|
||||||
Разработайте функцию с 5 аргументами, создающую отсчеты сигнала в виде последовательности импульсов с заданными параметрами:
|
|
||||||
амплитуда, продолжительность импульса, период (импульс + пауза), число отсчетов (аргументы функции).
|
|
||||||
Сигнал должен быть записан в виде столбца в текстовый файл с заданным именем (5-й аргумент функции), а также возвращен в вызывающую программу в виде списка.
|
|
||||||
|
|
||||||
## Решение
|
- функция 1: аргументы - два кортежа с целочисленными элементами, не обязательно одинаковой длины; в функции должен быть составлены два списка: SPS1 с элементами из двух входных кортежей, причем элементы SPS1 должны быть упорядочены по возрастанию величины, а также список SPS2 с элементами, равными 1 или 2, причем значение 1 берется в том случае, если соответствующий элемент в SPS1 взят из первого кортежа, а значение 2 - если из второго;
|
||||||
|
|
||||||
Код модуля для генерации сигнала:
|
- функция 2: аргумент - числовой список; по этому списку в функции должны быть вычислены среднее, наименьшее и наибольшее значения, медиана и оценка стандартного отклонения,
|
||||||
```py
|
|
||||||
def generate_pulsed_signal(amplitude, pulse_duration, period, num_samples, filename):
|
|
||||||
signal_data = []
|
|
||||||
|
|
||||||
for i in range(num_samples):
|
2) Создайте еще один модуль М2, в котором должны выполняться операции:
|
||||||
# Определяем находится ли текущий отсчет в фазе импульсаа
|
|
||||||
if (i % period) < pulse_duration:
|
|
||||||
signal_data.append(amplitude)
|
|
||||||
else:
|
|
||||||
signal_data.append(0) # Фаза паузы
|
|
||||||
|
|
||||||
# Запись сигнала в файлик
|
- запрашивается и вводится имя бинарного файла с данными; проверяется наличие файла и при отсутствии - повторение запроса;
|
||||||
with open(filename, 'w') as f:
|
|
||||||
for sample in signal_data:
|
|
||||||
f.write(f"{sample}\n")
|
|
||||||
|
|
||||||
return signal_data
|
- из указанного файла считываются два кортежа: KRT1 и KRT2.
|
||||||
```
|
|
||||||
|
|
||||||
Основной модуль:
|
- применяется функция 1 к этим двум кортежам и отображаются полученные списки;
|
||||||
|
|
||||||
```py
|
- применяется функция 2 к списку SPS1 и отображаются результаты расчета;
|
||||||
from signal_generator import generate_pulsed_signal
|
|
||||||
|
|
||||||
print("Генерация импульсного сигнала")
|
- в текстовый файл с именем Res22.txt записываются результаты расчета по функции 1 так, чтобы в каждой строке был один элемент из SPS1 и один элемент из SPS2, разделенные пробелом.
|
||||||
|
|
||||||
|
3) Создайте модуль М0 - главную программу, которая вызывает М2 и отображает в виде графика полученный из функции 1 список SPS1.
|
||||||
|
|
||||||
signal_amplitude = 10.0
|
4) Подготовьте бинарный файл с двумя кортежами, содержащими, соответственно, 40 и 50 случайных целочисленных элементов из диапазона значений от 20 до 45. Проверьте работу программы с этими данными.
|
||||||
signal_pulse_duration = 5
|
|
||||||
signal_period = 15
|
|
||||||
signal_num_samples = 100
|
|
||||||
output_file_name = "pulsed_signal.txt"
|
|
||||||
|
|
||||||
print(f"\nПараметры сигнала:")
|
|
||||||
print(f" Амплитуда: {signal_amplitude}")
|
|
||||||
print(f" Продолжительность импульса: {signal_pulse_duration} отсчетов")
|
|
||||||
print(f" Период (импульс+пауза): {signal_period} отсчетов")
|
|
||||||
print(f" Общее число отсчетов: {signal_num_samples}")
|
|
||||||
print(f" Файл для записи: {output_file_name}")
|
|
||||||
|
|
||||||
generated_signal = generate_pulsed_signal(
|
|
||||||
signal_amplitude,
|
|
||||||
signal_pulse_duration,
|
|
||||||
signal_period,
|
|
||||||
signal_num_samples,
|
|
||||||
output_file_name
|
|
||||||
)
|
|
||||||
|
|
||||||
print(f"\nСигнал успешно сгенерирован и записан в файл '{output_file_name}'.")
|
|
||||||
print("\nПервые 20 отсчетов сгенерированного сигнала (возвращенный список):")
|
|
||||||
print(generated_signal[:20])
|
|
||||||
print("\n(Полный список доступен в переменной 'generated_signal' и в файле).")
|
|
||||||
|
|
||||||
```
|
|
||||||
|
|
||||||
Вывод в консоли:
|
|
||||||
|
|
||||||
Генерация импульсного сигнала
|
|
||||||
|
|
||||||
Параметры сигнала:
|
|
||||||
Амплитуда: 10.0
|
|
||||||
Продолжительность импульса: 5 отсчетов
|
|
||||||
Период (импульс+пауза): 15 отсчетов
|
|
||||||
Общее число отсчетов: 100
|
|
||||||
Файл для записи: pulsed_signal.txt
|
|
||||||
|
|
||||||
Сигнал успешно сгенерирован и записан в файл 'pulsed_signal.txt'.
|
|
||||||
|
|
||||||
Первые 20 отсчетов сгенерированного сигнала (возвращенный список):
|
|
||||||
[10.0, 10.0, 10.0, 10.0, 10.0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 10.0, 10.0, 10.0, 10.0, 10.0]
|
|
||||||
|
|
||||||
(Полный список доступен в переменной 'generated_signal' и в файле).
|
|
||||||
|
|
||||||
|
|||||||
Загрузка…
Ссылка в новой задаче