форкнуто от main/python-labs
main
Родитель
1bb16f9cff
Сommit
b4ce53684b
@ -0,0 +1,18 @@
|
|||||||
|
import matplotlib.pyplot as plt
|
||||||
|
from MMM2 import main_pr
|
||||||
|
|
||||||
|
def plot_signals(X, X1):
|
||||||
|
plt.figure()
|
||||||
|
plt.plot(X, label='X',marker='o', linestyle='-')
|
||||||
|
plt.plot(X1, label='X1',marker='s', linestyle='--')
|
||||||
|
plt.title('Сравнение исходного и исправленного сигналов')
|
||||||
|
plt.legend()
|
||||||
|
plt.grid(True)
|
||||||
|
plt.show()
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
result = main_pr()
|
||||||
|
if result:
|
||||||
|
X, X1 = result if result[1] is not None else (result[0], None)
|
||||||
|
plot_signals(X, X1)
|
||||||
@ -0,0 +1,23 @@
|
|||||||
|
def find_anomal(X, M1, M2):
|
||||||
|
|
||||||
|
K = []
|
||||||
|
for i in range(1, len(X)):
|
||||||
|
diff = X[i] - X[i - 1]
|
||||||
|
if diff < M1 or diff > M2:
|
||||||
|
K.append(i)
|
||||||
|
return tuple(K)
|
||||||
|
|
||||||
|
def cor_anom(X, K):
|
||||||
|
|
||||||
|
X1 = X.copy()
|
||||||
|
n = len(X)
|
||||||
|
|
||||||
|
for idx in K:
|
||||||
|
if idx == n - 1:
|
||||||
|
X1[idx] = X[idx - 1]
|
||||||
|
elif idx == 0:
|
||||||
|
X1[idx] = X[idx + 1]
|
||||||
|
else:
|
||||||
|
X1[idx] = 0.5 * (X[idx - 1] + X[idx + 1])
|
||||||
|
|
||||||
|
return X1
|
||||||
@ -0,0 +1,51 @@
|
|||||||
|
import os
|
||||||
|
import pickle
|
||||||
|
from MMM1 import find_anomal, cor_anom
|
||||||
|
|
||||||
|
def read_sig(filename):
|
||||||
|
numbers = []
|
||||||
|
try:
|
||||||
|
with open(filename, 'r', encoding='utf-8') as f:
|
||||||
|
for line in f:
|
||||||
|
parts = line.strip().split()
|
||||||
|
for part in parts:
|
||||||
|
try:
|
||||||
|
numbers.append(float(part))
|
||||||
|
except ValueError:
|
||||||
|
continue
|
||||||
|
except Exception as e:
|
||||||
|
print(f"Ошибка чтения файла: {e}")
|
||||||
|
return None
|
||||||
|
return numbers
|
||||||
|
|
||||||
|
def main_pr():
|
||||||
|
while True:
|
||||||
|
filename = input("Введите имя текстового файла с сигналом: ")
|
||||||
|
if os.path.isfile(filename):
|
||||||
|
break
|
||||||
|
print("Файл не найден. Попробуйте снова.")
|
||||||
|
|
||||||
|
X = read_sig(filename)
|
||||||
|
if X is None:
|
||||||
|
print("Не удалось прочитать сигнал.")
|
||||||
|
return
|
||||||
|
|
||||||
|
M1 = float(input("Введите M1 (нижняя граница): "))
|
||||||
|
M2 = float(input("Введите M2 (верхняя граница): "))
|
||||||
|
|
||||||
|
anomalies = find_anomal(X, M1, M2)
|
||||||
|
if anomalies:
|
||||||
|
print(f"Индексы аномальных отсчетов: {anomalies}")
|
||||||
|
else:
|
||||||
|
print("Индексов аномальных отcчетов нет")
|
||||||
|
|
||||||
|
if anomalies:
|
||||||
|
X1 = cor_anom(X, anomalies)
|
||||||
|
|
||||||
|
with open('Res44.bin', 'wb') as f:
|
||||||
|
pickle.dump(X1, f)
|
||||||
|
print("Результат сохранён в файл Res44.bin")
|
||||||
|
else:
|
||||||
|
print("Аномальных отсчетов не обнаружено.")
|
||||||
|
|
||||||
|
return X, X1 if anomalies else None
|
||||||
Загрузка…
Ссылка в новой задаче