从加速度计中滤除不需要的噪声的正确方法是什么?

信息处理 fft 过滤器设计 IFFT 窗户
2022-02-17 17:22:05

我是信号处理的初学者,很难从使用加速度计收集的地板振动数据中滤除环境噪声。

我尝试过使用巴特沃斯滤波器 (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
1个回答

假设:

  • 您将自己限制在 LTI 过滤器中。
  • 您可以同时表征噪声和感兴趣的信号。

然后:

  • (a) 如果您想检测感兴趣的信号(例如检测脚步声),请使用匹配滤波器。
  • (b) 如果要估计此类信号的值,请使用维纳滤波器。

这些是您可以做的“最好的”(在一堆假设下)。您将需要测量和表征您的信号(即估计 (b) 的噪声和信号的功率谱密度,因为 (a) 您需要信号本身的形状。)