# Индивидуальное контрольное задание по модулю 3 Зеленкина Ксения А-02-23 ## Задание Вариант 8 1) Создайте модуль М1, содержащий две функции: -функция 1: аргументы - кортеж Х с последовательностью отсчетов некоторого сигнала и два числовых параметра Т1 и Т2; в функции должен создаваться список с индексами "аномальных" отсчетов сигнала, удовлетворяющих неравенствам XT2; - функция 2: аргументы - кортеж Х с отсчетами сигнала и список "аномальных" значений; в функции должен создаваться новый кортеж Х1, в котором элементы, не являющиеся "аномальными", совпадают с соответствующими элементами из Х, а "аномальные" значения заменяются по правилу: если это первый или последний элемент, то он заменяется на среднее значение по кортежу Х, а остальные - заменяются на полусумму соседних по индексу элементов. 2) Создайте еще один модуль М2, в котором должны выполняться операции: - запрашивается и вводится имя бинарного файла с данными (кортежем); проверяется наличие файла и при отсутствии - повторение запроса; - запрашиваются и вводятся граничные значения Т1 и Т2 с проверкой Т1,T2; - из указанного файла считывается кортеж Х с сигналом; - с применением функции 1 создается список с индексами "аномальных" отсчетов; результат отображается на экране; - если список "аномальных отсчетов не пустой, то с применением функции 2 создается кортеж Х1 с "исправленным" сигналом, отображается на экране и записывается в текстовый файл Res33.txt; в ином случае выдается сообщение об отсутствии "аномальных" отсчетов. 3) Создайте модуль М0 - главную программу, которая вызывает М2 и отображает в виде графика сигналы Х и Х1. 4) Подготовьте бинарный файл, в который запишите кортеж Х с 50 случайными, нормально распределенными числами с математическим ожиданием 10 и стандартным отклонением 5. Проведите 2 расчета по программе с использованием этого файла: в первом расчете задайте Т1=5, Т2=18, а во втором - Т1=-20, Т2=50. ## Решение Содердимое Mod0 _Код:_ ```py import matplotlib.pyplot as plt from Mod2 import process_signal result = process_signal() if result: X, X1, anomalies = result plt.figure(figsize=(10, 6)) plt.subplot(2, 1, 1) plt.plot(X, 'b-') if anomalies: anomaly_values = [X[i] for i in anomalies] plt.plot(anomalies, anomaly_values, 'ro') plt.title('Исходный сигнал') plt.grid(True) if X1 is not None: plt.subplot(2, 1, 2) plt.plot(X1, 'g-') plt.title('Исправленный сигнал') plt.grid(True) plt.tight_layout() plt.show() ``` Содердимое Mod1 _Код:_ ```py def find_anomalies(X, T1, T2): anomalies = [] for i, value in enumerate(X): if value < T1 or value > T2: anomalies.append(i) return anomalies def correct_anomalies(X, anomalies): if not anomalies: return X X_list = list(X) n = len(X_list) avg_value = sum(X_list) / n for idx in anomalies: if idx == 0 or idx == n - 1: X_list[idx] = avg_value else: X_list[idx] = (X_list[idx - 1] + X_list[idx + 1]) / 2 return tuple(X_list) ``` Содердимое Mod2 _Код:_ ```py import os from Mod1 import find_anomalies, correct_anomalies def process_signal(): while True: filename = input("Введите имя файла с данными: ") if os.path.exists(filename): break print(f"Файл '{filename}' не найден.") while True: T1 = float(input("Введите значение T1: ")) T2 = float(input("Введите значение T2: ")) if T1 < T2: break print("T1 должно быть меньше T2.") X = [] with open(filename, 'r') as f: for line in f: line = line.strip() if line: X.append(float(line)) X_tuple = tuple(X) anomalies = find_anomalies(X_tuple, T1, T2) print(f"Найдено аномальных отсчетов: {len(anomalies)}") print(f"Индексы: {anomalies}") if anomalies: X1_tuple = correct_anomalies(X_tuple, anomalies) with open('Res33.txt', 'w') as f: f.write(f"X: {X_tuple}\nX1: {X1_tuple}\nИндексы: {anomalies}\nT1={T1}, T2={T2}") return X_tuple, X1_tuple, anomalies else: print("Аномальные отсчеты отсутствуют.") return X_tuple, None, anomalies process_signal() ``` Содердимое Test _Код:_ ```py import numpy as np def create_test_file(filename="signal_data.bin", n=50, mean=10, std=5): data = np.random.normal(mean, std, n) with open(filename, 'w') as f: for value in data: f.write(f"{value}\n") print(f"Файл '{filename}' создан.") create_test_file() ``` Запуск Test.py _Вывод:_ ```py Файл 'signal_data.bin' создан. ``` Запуск Mod0 (T1 = 5, T2 = 18) _Вывод:_ ```py Введите имя файла с данными: signal_data.bin Введите значение T1: 5 Введите значение T2: 18 Найдено аномальных отсчетов: 14 Индексы: [1, 2, 5, 8, 10, 18, 24, 30, 31, 35, 40, 44, 45, 47] ``` Cписок "аномальных отсчетов не пустой => записываем в текстовый файл Res33.txt Содержимое Res33: Запуск Mod0 (T1 = -20, T2 = 50) _Вывод:_ ```py Введите имя файла с данными: signal_data.bin Введите значение T1: -20 Введите значение T2: 50 Найдено аномальных отсчетов: 0 Индексы: [] Аномальные отсчеты отсутствуют. ``` Если в поле "Введите имя файла с данными: " мы ничего не введём. Программа повторит запрос. _Вывод:_ ```py Введите имя файла с данными: Файл '' не найден. Введите имя файла с данными: ```