需求
一段振动信号有尖峰,可以用什么方法给平滑掉
思路
平滑振动信号以去除尖峰,常用的方法包括移动平均(Moving Average)、高斯滤波(Gaussian Filter)、中值滤波(Median Filter)等。这里提供一个使用移动平均和中值滤波的Python示例:
移动平均法
移动平均是一种简单的平滑技术,通过计算数据点的局部平均值来平滑数据序列
import numpy as np
import matplotlib.pyplot as plt
# 假设vibration_signal是你的振动信号
vibration_signal = np.random.normal(0, 1, 1000)
vibration_signal[::100] += 10 # 添加尖峰
# 移动平均
def moving_average(signal, window_size):
return np.convolve(signal, np.ones(window_size)/window_size, mode='valid')
smoothed_signal_ma = moving_average(vibration_signal, 50)
plt.plot(vibration_signal, label='Original Signal')
plt.plot(smoothed_signal_ma, label='Smoothed Signal (MA)', color='red')
plt.legend()
plt.show()
中值滤波法
中值滤波是一种非线性的滤波技术,通过替换数据点为其邻域中值来减少噪声。
import numpy as np
import matplotlib.pyplot as plt
from scipy.signal import medfilt
# 假设vibration_signal是你的振动信号
vibration_signal = np.random.normal(0, 1, 1000)
vibration_signal[::100] += 10 # 添加尖峰
# 中值滤波
smoothed_signal_median = medfilt(vibration_signal, kernel_size=5)
plt.plot(vibration_signal, label='Original Signal')
plt.plot(smoothed_signal_median, label='Smoothed Signal (Median)', color='green')
plt.legend()
plt.show()
高斯滤波
高斯滤波是一种基于高斯函数的平滑技术,适用于去除高斯噪声。
from scipy.ndimage import gaussian_filter
# 高斯滤波
import numpy as np
import matplotlib.pyplot as plt
from scipy.ndimage import gaussian_filter
# 假设vibration_signal是你的振动信号
vibration_signal = np.random.normal(0, 1, 1000)
vibration_signal[::100] += 10 # 添加尖峰
# 高斯滤波
smoothed_signal_gaussian = gaussian_filter(vibration_signal, sigma=5)
plt.plot(vibration_signal, label='Original Signal')
plt.plot(smoothed_signal_gaussian, label='Smoothed Signal (Gaussian)', color='orange')
plt.legend()
plt.show()
每种方法都有其优缺点,适用于不同的场景。移动平均简单易用,但可能不适合处理有尖锐峰值的信号;中值滤波对于去除尖峰噪声效果较好,但可能会改变信号的形状;高斯滤波在平滑数据的同时保持了边缘信息,但参数选择(如sigma)对结果影响较大。你可以根据实际情况选择最适合的方法。