08实验八 利用快速傅里叶变换(FFT)实现快速卷积

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验八 利用FFT 实现快速卷积

一、 实验目的

(1) 通过这一实验,加深理解FFT 在实现数字滤波(或快速卷积)中的重要作用,更好的利用FFT 进行数字信号处理。

(2) 进一步掌握循环卷积和线性卷积两者之间的关系。

二、 实验原理与方法

数字滤波器根据系统的单位脉冲响应h(n)是有限长还是无限长可分为有限长单位脉冲响应(Finite Impulse Response )系统(简记为FIR 系统)和无限长单位脉冲响应(Infinite Impulse Response )系统(简记为IIR 系统)。

对于FIR 滤波器来说,除了可以通过数字网络来实现外,也可以通过FFT 的变换来实现。

一个信号序列x(n)通过FIR 滤波器时,其输出应该是x(n)与h(n)的卷积:

当h(n)是一个有限长序列,即h(n)是FIR 滤波器,且时

在数字网络(见图6.1)类的FIR 滤波器中,普遍使用的横截型结构(见下图6.2

图6.1 滤波器的数字网络实现方法

图6.2 FIR 滤波器横截型结构

∑+∞

-∞

=-=

=m m n h m x n h n x n y )()()(*)()(∑+∞

-∞

=-=

=m m n x m h n x n h n y )

()()(*)()(10-≤≤N n ∑-=-=1

0)

()()(N m m n x m h n y y(n)

y(n)

-1-1-1-1

应用FFT 实现数字滤波器实际上就是用FFT 来快速计算有限长度列间的线性卷积。

粗略地说,这种方法就是先将输入信号x(n)通过FFT 变换为它的频谱采样 值X(k),然后再和FIR 滤波器的频响采样值H(k)相乘,H(k)可事先存放在存储器中,最后再将乘积H(k)X(k)通过快速傅里叶变换(简称IFFT )还原为时域序列,即得到输出y(n)如图6.3所示。

图6.3 数字滤波器的快速傅里叶变换实现方法

现以FFT 求有限长序列间的卷积及求有限长度列与较长序列间的卷积为例来讨论FFT 的快速卷积方法。

(1) 序列和的列长差不多。设的列长为,的列长为,要求

N

用FFT 完成这一卷积的具体步骤如下: i.

为使两有限长序列的线性卷积可用其循环卷积代替而不发生混叠,必须选择循环卷积长度,若采用基2-FFT 完成卷积运

算,要求(为整数)。

ii.

用补零方法使,变成列长为的序列。

iii.

用FFT 计算的点离散傅里叶变换

iv. 做和乘积,

v.

用FFT 计算的离散傅里叶反变换得

)(n x )(n h )(n x 1N )(n h 2N )()(n x n y =∑-=-==10

)

()()(*)()(N r r n h r x n h n x n h 121-+≥N N N m

N 2=m )(n x )(n h N ⎩⎨

⎧-≤≤-≤≤=1010)()(11N n N N n n x n x ⎩⎨

⎧-≤≤-≤≤=101

0)()(22N n N N n n h n h )(),(n h n x N )()(k X n x FFT

−−→−)()(k H n h FFT −−→−)(k X )(k H )()()(k H k X k Y ⋅=)(k Y

y(n)

(2) 当x(n)长度很长时,即,通常不允许等x(n)全部采集齐后再进行卷积,否则使输出相对于输入有较长的延时,另外,若太大,要补上太多的零点,很不经济,且FFT 的计算时间也要很长。为此,采用分段卷积的方法,即把x(n)分成长度与h(n)相仿的一段段,分别求出每段卷积的结果,然后用相应的方式把它们结合起来,便是总的输出。分段卷积方法主要有两种,即重叠相加法和重叠保留法。具体内容请参考教材中“快速离散傅里叶变换”一章中的线性卷积的FFT 算法部分,本实验这部分不作重点要求。

三、 实验任务

(1)用FFT 实现以下两序列的线性卷积。

n=[0:1:11]; m=[0:1:5]; N1=length(n); N2=length(m);

xn=0.8.^n; hn=ones(1,N2); N=N1+N2-1; XK=fft(xn,N); HK=fft(hn,N); YK=XK.*HK; yn=ifft(YK,N);

if all(imag(xn)==0)&(all(imag(hn)==0)) yn=real(yn); end x=0:N-1; stem(x,yn,'.')

title('2015167111(1)ÏßÐÔ¾í»ý');

*

101

0)(*1)(1)(⎭⎬

⎫⎩⎨⎧⎥⎦⎤

⎢⎣⎡=⎥⎦⎤⎢⎣⎡=∑∑-=---N k nk x N k nk x W k Y N W k Y N n y 21N N >>121-+N N )

(n h ⎩⎨

⎧≤≤=⎩⎨

⎧≤≤=其它

其它0

501)(01108.0)(n n h n n x n

(2)数字滤波器的脉冲响应为可自定,本实验取

输入序列可选下列几种情况

i.

可取16

clc

clear all n=[0:1:15]; m=[0:1:16]; N1=length(n); N2=length(m); x=ones(1,N1); h=(-1/2).^m; N=N1+N2-1; X=fft(x,N); H=fft(h,N); Y=X.*H;

y=ifft(Y,N);

if all(imag(x)==0)&(all(imag(h)==0)) y=real(y); end

x1=0:N-1; stem(x1,y);

title('2015167111(2-1)FFT 快速卷积');

ii.

clc

clear all n=[0:1:15]; m=[0:1:16]; N1=length(n); N2=length(m);

x=cos(2*pi*n/16); h=(-1/2).^m; N=N1+N2-1; X=fft(x,N); H=fft(h,N); Y=X.*H;

y=ifft(Y,N);

if all(imag(x)==0)&(all(imag(h)==0))

2

2),()21

()(N n R n h N n =172=N )(n x )

()(1n R n x N =1N 16)(2cos

)(111

==N n nR N n x N π

相关文档
最新文档