为低通滤波器选择频率以滤除燃料信号中的噪声
Selecting frequency for Low Pass filter to filter noise from fuel signal
我正在尝试从燃油液位信号中去除尖峰噪声,为此,我想在 python 中实现一个低通滤波器,我有信号的频域图,但我不明白如何实现选择截止频率或带通以防我应该使用带通滤波器。我的数据的采样频率是 1sample/3min。这是我生成频域响应及其输出的代码。
#Fourier Transform of signal
fuel_vol_fft=np.fft.fft((fuel_vol-np.mean(fuel_vol)),axis=0) / fuel_vol.shape[0]
freq=np.fft.fftfreq(fuel_vol.shape[0],d=3) #sampling time step = 3 min- sampling rate 1/3 cycle/min
plt.figure(figsize=(20,7))
plt.plot(freq,fuel_vol_fft.real)
plt.grid()
plt.xlabel('Frequency (Hz)')
plt.ylabel('Amplitude')
plt.title('Frequency Domain Fuel Signal - Presuming regulary sampled')
plt.show()
这是我的信号的频域视图:
频域特写:
最后这里是我的原始 time-domain 信号的一部分 close-up,带有显示噪声的尖峰。
我建议在这里使用移动平均滤波器。
它还有一个低通效应,因为它基本上是通过将定义数量的值相加并将它们归一化为已处理的值数量来对离散输入信号进行积分:
https://en.wikipedia.org/wiki/Moving_average
它也很容易实现,它只是一个加权和,对于平滑信号的原因来说,它非常适合。可能 10 或 20 个样本的移动平均值应该适合您的应用。
我正在尝试从燃油液位信号中去除尖峰噪声,为此,我想在 python 中实现一个低通滤波器,我有信号的频域图,但我不明白如何实现选择截止频率或带通以防我应该使用带通滤波器。我的数据的采样频率是 1sample/3min。这是我生成频域响应及其输出的代码。
#Fourier Transform of signal
fuel_vol_fft=np.fft.fft((fuel_vol-np.mean(fuel_vol)),axis=0) / fuel_vol.shape[0]
freq=np.fft.fftfreq(fuel_vol.shape[0],d=3) #sampling time step = 3 min- sampling rate 1/3 cycle/min
plt.figure(figsize=(20,7))
plt.plot(freq,fuel_vol_fft.real)
plt.grid()
plt.xlabel('Frequency (Hz)')
plt.ylabel('Amplitude')
plt.title('Frequency Domain Fuel Signal - Presuming regulary sampled')
plt.show()
这是我的信号的频域视图:
频域特写:
我建议在这里使用移动平均滤波器。
它还有一个低通效应,因为它基本上是通过将定义数量的值相加并将它们归一化为已处理的值数量来对离散输入信号进行积分:
https://en.wikipedia.org/wiki/Moving_average
它也很容易实现,它只是一个加权和,对于平滑信号的原因来说,它非常适合。可能 10 或 20 个样本的移动平均值应该适合您的应用。