3

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

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

s1 = ifft(ifftshift(k1));

该信号具有吉布斯伪影。现在,我想通过 (A) 将 Hamming 滤波器乘以k1频域和 (B) 将 Hamming 滤波器的 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.m​​at 。)

4

1 回答 1

1

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

波纹管是当你做的时候发生的事情k2 = wk.*k1

在此处输入图像描述

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

这不是汉明窗的标准用法,汉明窗通常用于在time|spacetime|space.

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

顺便说一句 ,关于它的最大值是不对称的wx = ifft(ifftshift(wk));wx

于 2019-05-28T12:46:25.860 回答