matlab中fft后的低通滤波器

信息处理 matlab 卷积 低通滤波器
2022-02-03 14:43:46

我是信号处理的新手,我正在自学。因此,我可能会问一些不值得你花时间的问题。

目前我正在尝试弄清楚低通滤波器的概念。使用 matlab 我创建了一个复杂的信号 x:

x = rand(1,1000)+rand(1,1000) .* 1i

我用 fdatool 创建了一个过滤器 Num,Num 的规格是:

Fs = 1000;  % Sampling Frequency

Fpass = 460;             % Passband Frequency
Fstop = 500;             % Stopband Frequency
Dpass = 0.057501127785;  % Passband Ripple
Dstop = 0.0001;          % Stopband Attenuation
dens  = 20;              % Density Factor

据我了解,我现在必须做。我试图通过向量相乘在频域中对 Num 和 x 进行卷积。一步一步我这样做了:

  1. 首先,我将 Num 填充到与 x 相同的长度。
  2. 然后我将 x 和 Num 相乘,得到 y= Num * x;

现在 y 应该几乎没有超过 500 的频率,对吧?如果我检查信号,似乎没有发生低通滤波。

1个回答

看起来你在时域和频域之间有点迷失了。如果“Num”是 FIR 滤波器的分子(如其所示),则这些是滤波器的系数(或脉冲响应)。作为信号的脉冲响应存在于时域中。

如果您想使用此脉冲响应(或有人称之为过滤内核)执行过滤操作,您应该在它和您希望在时域中过滤的信号之间执行卷积(conv) 。

--

您创建的脉冲响应具有等效的频域响应(您将在 fdatool 中看到)。上面描述的时域卷积等效于将此频域响应 乘以输入信号的频域表示。

由于您的信号 x 很复杂,我假设您的意思是某些“噪声”信号的频域表示。这种表示本身很奇怪,它并不代表“白”噪声信号,而是纯粹随机排列的频率和相位,我觉得很难想象。

如果您想观察低通滤波,我建议您执行以下操作:

  1. 使用 rand 在时域中创建纯实数(无“i”分量)噪声信号(请记住,rand 产生的值范围为 0->1,您需要对其进行缩放和移位以创建范围为 -1 的信号-> 1)。该信号在理论上将是纯白色的,因此在频域中具有平坦的幅度响应(即它将是一条直线)。

  2. 将此信号与您的滤波器脉冲响应进行卷积。

    您可以将此操作视为等效于将滤波器的响应(您在 FDATool 中看到的)乘以输入信号的频域(实际上是恒定的)。结果应该是您熟悉的低通滤波器响应的缩放版本(尽管滤波器设计中的一些其他影响,例如权衡)。

此过程的输出仍在时域中,因此如果您执行 FFT 或其他一些变换以转换到频域,则可以绘制它,并观察低通滤波效果。

祝你学习顺利:)