fork download
  1. import numpy as np
  2. import matplotlib.pyplot as plt
  3. from scipy.signal import butter, lfilter
  4.  
  5. # Создание временного вектора и синусоидального сигнала
  6. fs = 500 # Частота дискретизации
  7. t = np.linspace(0, 1, fs, endpoint=False) # Временной вектор
  8. f1 = 5 # Частота сигнала
  9. f2 = 50 # Частота помехи
  10. signal = np.sin(2 * np.pi * f1 * t) + 0.5 * np.sin(2 * np.pi * f2 * t)
  11.  
  12. # Функция для создания низкочастотного фильтра
  13. def butter_lowpass(cutoff, fs, order=5):
  14. nyquist = 0.5 * fs
  15. normal_cutoff = cutoff / nyquist
  16. b, a = butter(order, normal_cutoff, btype='low', analog=False)
  17. return b, a
  18.  
  19. # Функция для фильтрации сигнала
  20. def lowpass_filter(data, cutoff, fs, order=5):
  21. b, a = butter_lowpass(cutoff, fs, order=order)
  22. y = lfilter(b, a, data)
  23. return y
  24.  
  25. # Параметры фильтра
  26. cutoff_frequency = 10 # Частота среза
  27.  
  28. # Применение низкочастотного фильтра
  29. filtered_signal = lowpass_filter(signal, cutoff_frequency, fs)
  30.  
  31. # Построение графиков
  32. plt.figure(figsize=(12, 6))
  33.  
  34. # Исходный сигнал
  35. plt.subplot(2, 1, 1)
  36. plt.plot(t, signal, label='Исходный сигнал', color='blue')
  37. plt.title('Исходный сигнал')
  38. plt.xlabel('Время [с]')
  39. plt.ylabel('Амплитуда')
  40. plt.grid()
  41. plt.legend()
  42.  
  43. # Отфильтрованный сигнал
  44. plt.subplot(2, 1, 2)
  45. plt.plot(t, filtered_signal, label='Отфильтрованный сигнал', color='orange')
  46. plt.title('Отфильтрованный сигнал (низкочастотный фильтр)')
  47. plt.xlabel('Время [с]')
  48. plt.ylabel('Амплитуда')
  49. plt.grid()
  50. plt.legend()
  51.  
  52. plt.tight_layout()
  53. plt.show()
  54.  
Success #stdin #stdout 1.26s 85920KB
stdin
Standard input is empty
stdout
Standard output is empty