форкнуто от 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
|
||||
Загрузка…
Ссылка в новой задаче