# Индивидуальное контрольное задание по теме 9 Ефремов Станислав, А-02-23 ## Задание M3_9 1) Создайте модуль М1, содержащий две функции: - функция 1: аргументы - список Х с последовательностью отсчетов некоторого сигнала и два числовых параметра:М1 и М2; в функции должен создаваться кортеж К с индексами "аномальных" отсчетов сигнала, для которых выполняются неравенства: X[i]-X[i-1]M2. - функция 2: аргументы - список Х с отсчетами сигнала и кортеж К с индексами "аномальных" отсчетов; в функции должен создаваться новый список Х1, в котором элементы совпадают с элементами из Х, если те не являются "аномальными", а элементы из списка К заменяются на X[i]=0.5*(X[i-1]+X[i+1]), а если "аномальным" окажется последний элемент, то его значение заменяется на значение предпоследнего элемента. 2) Создайте еще один модуль М2, в котором должны выполняться операции: - запрашивается и вводится имя текстового файла со значениями сигнала; проверяется наличие файла и при отсутствии - повторение запроса; - из указанного файла считывается список Х с сигналом, причем в строках файла может быть разное число отсчетов сигнала; - запрашиваются и вводятся граничные значения М1 и М2 (с проверкой: М1 M2: indices.append(i) return tuple(indices) def correct_anomalies(X, K): X1 = X.copy() for idx in K: if idx == len(X) - 1: X1[idx] = X1[idx - 1] else: X1[idx] = 0.5 * (X1[idx - 1] + X1[idx + 1]) return X1 ``` ### Модуль 2 ```py import os import sys import pickle def run_M2(): while True: filename = input("Введите имя текстового файла с сигналом: ").strip() if os.path.isfile(filename): break X = [] with open(filename, 'r') as f: for line in f: parts = line.strip().split() for p in parts: X.append(float(p)) while True: M1 = float(input("Введите M1 (нижняя граница разности): ")) M2 = float(input("Введите M2 (верхняя граница разности, M2 > M1): ")) if M1 < M2: break else: print("M1 должно быть меньше M2.") from M1 import find_anomalous_indices, correct_anomalies K = find_anomalous_indices(X, M1, M2) print(f"Аномальные индексы: {K}") if K: X1 = correct_anomalies(X, K) print("Исправленный сигнал:", X1) with open("Res44.bin", "wb") as f: pickle.dump(X1, f) print("Результат записан в Res44.bin") else: print("Аномальных отсчётов не обнаружено.") return X, X1 if K else X ``` ### Модуль 0 ```py import pylab from M2 import run_M2 def main(): X, X1 = run_M2() pylab.figure(figsize=(10, 5)) pylab.subplot(1, 2, 1) pylab.plot(X, label='Исходный сигнал') pylab.title("Исходный сигнал") pylab.xlabel("Отсчёты") pylab.ylabel("Значение") pylab.grid(True) pylab.subplot(1, 2, 2) pylab.plot(X1, label='Исправленный сигнал', color='orange') pylab.title("Исправленный сигнал") pylab.xlabel("Отсчёты") pylab.ylabel("Значение") pylab.grid(True) pylab.tight_layout() pylab.show() if __name__ == "__main__": main() ``` ## Результат ### Для -2 и 5: ```py Введите имя текстового файла с сигналом: signal.txt Введите M1 (нижняя граница разности): -2 Введите M2 (верхняя граница разности, M2 > M1): 5 Аномальные индексы: (4, 6, 11, 12, 13, 14, 15, 19, 21, 23, 24, 25, 26, 27, 29, 31, 32, 35, 36, 37, 39, 40, 41, 42, 43, 44, 45, 46, 47) Исправленный сигнал: [4.263134009624702, 4.067283548723314, 4.874920842655541, 4.834128754109237, 8.223862521322928, 11.61359628853662, 10.259560286375322, 8.905524284214025, 8.186641831318802, 8.638222773625724, 10.700010550793879, 12.779448770191685, 8.629985270429243, 9.424308136414886, 8.760419982249502, 9.797062915592713, 10.833705848935924, 9.862509524620615, 11.252167038027647, 12.422198441999871, 13.592229845972096, 10.572927730780062, 7.553625615588027, 7.133718458186862, 9.520052608400205, 9.619255895493783, 6.667092820033337, 5.8050169142673225, 4.942941008501308, 8.946793175470068, 12.950645342438829, 11.648800239430907, 12.308287984866364, 12.96777573030182, 13.306115816113852, 6.713448306681809, 8.251140355134947, 9.870702494815166, 11.490264634495386, 6.833826225314228, 7.604423745564782, 10.493832859781548, 7.59146239455013, 11.577494034371783, 9.08507549520261, 16.320693167525047, 10.352440652123295, 8.987414956427836, 7.622389260732377, 11.17003135779134] Результат записан в Res44.bin ``` ![alt text](-2and5.png) ### Для -20 и 50: ```py Введите имя текстового файла с сигналом: signal.txt Введите M1 (нижняя граница разности): -20 Введите M2 (верхняя граница разности, M2 > M1): 50 Аномальные индексы: () Аномальных отсчётов не обнаружено. ``` ![alt text](-20and50.png)