应用带通滤波器后信号开始处的大尖峰

信息处理 matlab Python OFDM 带通 巴特沃思
2022-02-21 13:55:13

前言:我是一名博士生,对许多信号处理和工程概念相当缺乏经验,请温柔。

我试图从 2.4GHz CSI 幅度信号中滤除 1Hz 到 2Hz 的频率范围,但是在应用巴特沃斯带通滤波器后,我观察到信号开始处有一个大尖峰。如果我从信号中删除前 100 个左右的样本,这对尖峰没有影响。我已经尝试使用 Python(使用 scipy 的 lfilter)和 MATLAB(使用黄油和过滤器)进行此操作,并且在两者中都观察到了相同的行为。我知道这些过滤方法有多种变体,但是也许我不明白应该使用哪一种。我正在尝试复制这项工作。

该信号由大约 60 个 OFDM 子载波组成,这些子载波都绘制在我的示例中。

在哪里:

  • 对接 = 2
  • fcutlow = 1
  • fcuthigh = 2
  • Fs = 9.7

MATLAB:

[b, a] = butter(buttOrd, [fcutlow fcuthigh]/(Fs/2), "bandpass");
filterSig = filter(b, a, signal);

Python:

b, a = signal.butter(buttOrd, [fcutlow/(Fs/2), fcuthigh/(Fs/2)], "bandpass")
filterSig = signal.lfilter(b, a, signal)

未经过滤的信号

上图:未过滤的信号。

滤波信号

上图:过滤后的信号。

通过将给定带通滤波器的范围减小到更小,例如 1Hz-1.01Hz,可以观察到更小、一致的信号。我理解为什么较小的范围会产生不同的响应,但我不明白我观察到的具体行为。

1个回答

您在滤波器输出开始时看到的尖峰是带通滤波器本身的脉冲响应。这会以瞬态效应的形式发生,如果滤波后的信号本质上是正弦 + 直流,则会更加明显。如果它是纯零均值噪声,那么尖峰会有些模糊。

您可以在输出上使用群延迟偏移来提取没有该尖峰的相关部分,或者尝试设置滤波器的初始条件以禁用瞬态响应,但几乎总是首选第一种方法。