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

Matlab 频域和空域的汉明滤波器,matlab,signal-processing,fft,ifft,hamming-window,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,

我想通过在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');


(A)
s2
的结果似乎是正确的,因为信号看起来模糊,吉布斯伪影消失了。然而,(B)
s3
的结果是完全不同和不正确的。(B)项遗漏了什么?(如果需要,请从下载k1.mat。)

从您在
空间发布的数据中,您称之为“Gibbs”
是频率上的高频分量。当你在频率上乘以你的汉明窗时,实际上你是在平滑那些更高的频率。它们位于复杂数组k1的边界(负数和正数)

下面是当您使
k2=wk.*k1
时发生的情况

这就是你所谓的太空“吉布斯”消失的原因

这不是通常在
时间|空间
上使用的汉明窗口的标准用法,当在
时间|空间
上对信号、函数或滤波器内核进行剪裁和采样时,汉明窗口可以降低吉布的频率

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


顺便说一句,wx=ifft(ifftshift(wk))
给出了一个相对于其最大值不对称的
wx

循环与线性卷积?