我是信号处理的初学者,很难从使用加速度计收集的地板振动数据中滤除环境噪声。
我尝试过使用巴特沃斯滤波器 (IIR) 和正弦函数 (FIR) 以及一些窗口函数。然而,仅使用上述低通滤波器,我看不到时域图和频域图有明显变化。
当我使用滤波器和窗函数时,频域图确实显示了一些变化。但是,当我使用过滤数据的逆 fft 时,原始数据的大小会降低。我不确定过滤器/窗口功能是否正确应用。
fs = 1652 Hz
fc = 208 Hz
我不确定确定截止频率的正确方法,因为我不确定通带/阻带纹波的可接受范围是多少。
这是我的正弦滤波器:
def fir_lowpass(data, fc, fs, nfft):
# Convert to normalized frequency
fc_nor = fc / (fs / 2)
N = nfft
n = np.arange(N)
# Compute sinc filter.
h = np.sinc(2 * fc * (n - (N - 1) / 2))
# Compute hanning window.
w = signal.hann(N)
# Multiply sinc filter with window.
h = h * w
# Normalize to get unity gain.
h = h / np.sum(h)
# Apply filter to data
data = np.convolve(data, h, 'same')
return data
这是我的巴特沃斯过滤器:
def IIR_lowpass(data, fc, fs):
fc_nor = fc / (fs / 2) # Normalize cutoff frequency
b, a = signal.butter(5, fc_nor, btype='low', analog=False, output='ba')
filt_data = signal.filtfilt(b, a, data)
return filt_data