форкнуто от main/python-labs
Родитель
976924f0a5
Сommit
e5542fd69f
@ -0,0 +1,27 @@
|
|||||||
|
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()
|
||||||
@ -0,0 +1,19 @@
|
|||||||
|
def find_anomalous_indices(X, M1, M2):
|
||||||
|
|
||||||
|
indices = []
|
||||||
|
for i in range(1, len(X)):
|
||||||
|
diff = X[i] - X[i-1]
|
||||||
|
if diff < M1 or diff > 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
|
||||||
@ -0,0 +1,51 @@
|
|||||||
|
# M2.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
|
||||||
Загрузка…
Ссылка в новой задаче