我想通过在 MATLAB 中应用汉明滤波器来消除一维信号中的吉布斯伪影。
我所拥有的是k1
这是频域中的信号。我可以通过应用 DFT 来获取时域信号k1
:
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这个链接 https://drive.google.com/file/d/1JS4jTf2gRujwDbERQwjUyU6RXwCTND4I/view如果你需要的话。)
根据您发布的所谓“吉布斯”的数据space
是频率上的高频分量。当您乘以汉明窗频率时,实际上您正在平滑那些较高的频率。它们位于复杂数组 k1 的边界(负和正)中。
波纹管是当你做时会发生的事情k2 = wk.*k1
;
这就是为什么你所谓的空间“吉布斯”消失了。
这不是常用的汉明窗的标准用法time|space
在对信号、函数或滤波器内核进行剪辑和采样时降低吉布斯频率time|space
.
重现它space
您必须设计一个非常平滑的低通滤波器,以给出汉明窗频率响应才能进行卷积。我不记得汉明窗的逆变换,但您可以使用高斯滤波器。
Btw wx = ifft(ifftshift(wk));
给出一个wx
相对于其最大值不对称。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)