老马迷图分享 http://blog.sciencenet.cn/u/zmpenguestc 感悟人生,传承师魂 ......

博文

频域滤波补零延拓及滤波器循环移位例析

已有 1057 次阅读 2017-11-12 13:55 |个人分类:图像处理|系统分类:教学心得|关键词:线性卷积,循环卷积,频域滤波


频域滤波补零延拓及滤波器循环移位例析

文/彭真明

由于时域滤波属于有限序列的线性卷积,频域滤波方式实际上是利用离散傅里叶变换(DFT)求时域线性卷积的过程,而DFT本质上是对应时域滤波中针对周期序列的循环卷积。因此,频域滤波中信号及滤波器需要在时域进行补零延拓(padding),且滤波器延拓后还要做循环移位(circularly shift)。

利用时域线性卷积滤波,滤波器与信号长度可以不一致。设

信号:x = [1 2 3 4 5],长度为m = 5

滤波器:h = [1 2 3],长度为n = 3

时域线性卷积为:

y = conv(x,h) = [1 4 10 16 22 22 15]

去掉边界元素:

y =conv(x,h,’same’) = [4 10 16 22 22]

以上则为时域滤波结果。

如果做时域循环卷积,则滤波器h与信号x长度必须保持一致,且长度L≥m+n–1。本例中,两者长度至少为7。采用补零延拓方法,即

xp = [1 2 3 4 5 0 0]

hp = [1 2 3 0 0 0 0]

时域循环卷积为:

yp = conv(xp,hp) = [1 4 10 16 22 22 15 0 0 0 0 0 0]

取主值序列有:

yp(1:7) = [1 4 10 16 22 22 15]

可以看出,循环卷积可以求出线性卷积的结果。

由于循环卷积可以利用DFT在频域实现,即

yf = real(ifft(fft(xp).*fft(hp))) = [1 4 10 16 22 22 15]

去掉边界元素,得到滤波结果为:

yf = yf(1:5) = [1 4 10 16 22]

这与空域结果不一致。实际上,yf(2:6)才是一致的。

为了从起始点截取滤波结果的有效值,对滤波器补零延拓后的hp做循环移位,有

hp = [2 3 0 0 0 0 1]

此时,频域滤波结果为:

yf = real(ifft(fft(xp).*fft(hp))) = [4 10 16 22 22 15 1]

去掉边界元素,最后得到频域滤波结果为:

yf = yf(1:5) = [4 10 16 22 22]

可以看出,与空域线性卷积完全保持一致。

实际应用中,为了便于提升FFT的计算效率,频域滤波常将信号及滤波器延拓至信号的2倍长度,或2的整数幂。

相关博文

[1]如何保持空域与频域滤波结果的一致性

[2]如何保持空域与频域滤波结果的一致性(续)



http://blog.sciencenet.cn/blog-425437-1084907.html

上一篇:小班研讨课,难在哪?
收藏 分享 举报

4 李曙 徐令予 张云 李毅伟

该博文允许注册用户评论 请点击登录 评论 (1 个评论)

数据加载中...

Archiver|手机版|科学网 ( 京ICP备14006957 )

GMT+8, 2017-11-20 07:49

Powered by ScienceNet.cn

Copyright © 2007-2017 中国科学报社

返回顶部