频域和空域中的汉明滤波器

时间:2018-01-18 16:47:54

标签: matlab signal-processing fft ifft hamming-window

我想通过在MATLAB中应用汉明滤波器来消除一维信号中的吉布斯伪像。

我所拥有的是k1,它是频域中的信号。我可以通过在k1上应用DFT来获得时域信号:

s1 = ifft(ifftshift(k1));

此信号具有吉布斯神器。现在,我想通过(A)将汉明滤波器乘以频域中的k1和(B)在空间域中将汉明滤波器的IFFT与s1进行卷积来消除它。我期待两者的输出相同:

% (A) Multiplying Hamming filter to `k1`
n = size(k1,2);
wk = hamming(n,'symmetric')'; 
k2 = wk.*k1;
s2 = ifft(ifftshift(k2));

% (B) Convolving IFFT of Hamming filter with `s1`
wx = ifft(ifftshift(wk));
s3 = conv(s1,wx,'same');

enter image description here

(A)s2的结果似乎是正确的,因为信号看起来模糊并且Gibbs神器消失了。但是,(B)s3的结果完全不同且不正确。 (B)缺少什么? (如果需要,请从this link下载k1.mat。)

1 个答案:

答案 0 :(得分:1)

根据您在space上发布的称为“吉布斯”的数据,是频率上的高频分量。实际上,当您在频率上乘以汉明窗时,就是在平滑那些较高的频率。它们位于复数数组k1的边界(负数和正数)中。

当您创建k2 = wk.*k1时,会发生以下情况;

enter image description here

这就是为什么您所谓的“ Gibbs”空间消失了的原因。

这不是在time|space上常用的汉明窗的标准用法,以减少在time|space上对信号,函数或滤波器内核进行裁剪和采样时降低吉布的频率。

要在space中重现它,您必须设计一个非常平滑的低通滤波器,该滤波器在频率上给汉明窗响应以进行卷积。我不记得汉明窗的逆变换,但可以使用高斯滤波器。

顺便说一句,wx = ifft(ifftshift(wk));给出了wx与其最大值不对称。