移动平均去噪.py 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. #开发时间:2024/6/12 9:36
  2. import numpy as np
  3. import pandas as pd
  4. import matplotlib.pyplot as plt
  5. from matplotlib import rcParams
  6. # 移动平均法
  7. def moving_average(signal, window_size):
  8. return np.convolve(signal, np.ones(window_size) / window_size, mode='same')
  9. plt.rcParams['xtick.direction'] = 'in'
  10. plt.rcParams['ytick.direction'] = 'in'
  11. plt.rcParams['font.sans-serif'] = ['SimHei'] # 用来正常显示中文标签
  12. plt.rcParams['axes.unicode_minus'] = False # 用来正常显示负号
  13. config = {
  14. "font.family": 'serif',
  15. "font.size": 20,
  16. "mathtext.fontset": 'stix',
  17. "font.serif": ['Times New Roman'], # 宋体
  18. 'axes.unicode_minus': False # 处理负号
  19. }
  20. rcParams.update(config)
  21. # 读取信号
  22. fs = 1000
  23. noisy_signal = pd.read_csv('noisy_signals_time.csv')
  24. # 检查是否包含时间列
  25. if 'time' in noisy_signal.columns:
  26. time_column = noisy_signal['time'].values.reshape(-1, 1)
  27. other_columns = noisy_signal.drop(columns='time')
  28. else:
  29. time_column = None
  30. other_columns = noisy_signal
  31. # 应用去噪方法
  32. window_size = 5 # 窗口宽度
  33. denoised_signals = pd.DataFrame()
  34. for column in other_columns.columns:
  35. denoised_signals[column] = moving_average(other_columns[column].values, window_size)
  36. # 如果有时间列,将其添加回去
  37. if time_column is not None:
  38. denoised_signals.insert(0, 'time', time_column)
  39. # 保存去噪后的信号到CSV文件
  40. denoised_signals.to_csv('denoise_MovingAverage.csv', index=False)
  41. # 绘图
  42. plt.figure(figsize=(12, 10))
  43. # 绘制原始信号和去噪后信号(这里只绘制第一列作为示例)
  44. plt.subplot(3, 1, 1)
  45. plt.plot(noisy_signal.iloc[:, 1], label='Noisy Signal')
  46. plt.legend()
  47. plt.subplot(3, 1, 2)
  48. plt.plot(denoised_signals.iloc[:, 1], label='Moving Average')
  49. plt.legend()
  50. plt.tight_layout()
  51. plt.show()