《利用FFT实现快速卷积》由会员分享,可在线阅读,更多相关《利用FFT实现快速卷积(5页珍藏版)》请在金锄头文库上搜索。
1、-一、实验原理一、实验原理应用 FFT 实现数字滤波器实际上就是用FFT 来快速计算有限长度序列的线性卷积。 这种方法就是先将输入信号 x(n)通过 FFT 变换为它的频谱采样值X(k),然后再和 FIR 滤波器的频响采样值 H(k)相乘,H(k)可事先存放在存储器中,最后再将乘积H(k)X(k)通过快速傅里叶变换(简称 IFFT)还原为时域序列,即得到输出y(n)。现以FFT求有限长序列间的卷积及求有限长度序列与较长序列间的卷积为例来讨论FFT的快速卷积方法。(1)序列x(n)和h(n)的长差不多。设x(n)的长为N1,h(n)的长为N2,要求N1y(n) x(n) y(n) h(m)x(n
2、 m)m0用 FFT 完成这一卷积的具体步骤如下:为使两有限长序列的线性卷积可用其循环卷积代替而不发生混叠,必须选择循环卷积长度N N1 N21,若采用基 2-FFT 完成卷积运算,要求N 2(m为整数) 。m用补零方法使 x(n)和h(n)变成列长为 N 的序列。x(n)0 n N11x(n) N1 n N 10h(n)0 n N21h(n) 0N n N 12用 FFT 计算 x(n)和h(n)的 N 点离散傅里叶变换完成 X(k)和 H(k)乘积,Y(k) X(k)H(k)用 FFT 计算 Y(k)的离散傅里叶反变换得* 1nkN1 1*nky(n) Y(k)WNY (k)WNk0Nk0
3、N(2)当x(n)长度很长时,即N1 N2,通常不允许等x(n)全部采集齐后再进行卷积,否则使输出相对于输入有较长的延时,另外,若N1 N21太大,h(n)要补上太多的零点,很不经济,且 FFT 的计算时间也要很长。为此,采用分段卷积的方法,即把 x(n)分成长度与 h(n)相仿的一段段,分别求出每段卷积的结果,然后用相应的方式把它们结合起来,便是总的输出。N1-二、实验内容与要求二、实验内容与要求给定两个序列 x(n)=2,1,1,2,h(n)=1,-1,-1,1。首先直接在时域计算两者的线性卷积;其次用 FFT 快速计算二者的线性卷积,验证结果。数字滤波器的脉冲响应为h(n)=(-) RN
4、2(n), ,N2可自定,本实验取 N2=1712n输入序列 x(n)可选下列几种情况:X(n)=RN1(n),N1可自取 16x(n)=cos(2n)RN1(n),N1=16N1X(n)=() RN1(n), N1=16实验前,预先编制一个应用FFT 实现数字滤波器的通用程序。上机独立调试,并打印或记录实验结果。将实验结果与预先笔算的结果比较,验证其正确性。13n三、实验过程三、实验过程x=2,1,1,2;h=1 -1 -1 1;XK=fft(x,N);HK=fft(h,N);YK=XK.*HK;yn=ifft(YK,N);if all(imag(x)=0)&(all(imag(h)=0)y
5、n=real(yn);endy=conv(x,h);n=0:N-1;subplot(2,1,1);stem(n,y);ylabel(时域计算);subplot(2,1,2);stem(n,yn,.);ylabel(FFT 快速);-n=0:1:15;m=0:1:16;N1=length(n);N2=length(m);xn=ones(1,N1);hn=(-0.5).m;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);stem(x,
6、yn,.);n=0:1:15;m=0:1:16;N1=length(n);N2=length(m);-xn=cos(2*pi*n/N1);hn=(-0.5).m;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);endx=0:N-1;stem(x,yn,.);n=0:1:15;m=0:1:16;N1=length(n);N2=length(m);xn=(1/3).n;hn=(-0.5).m;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);endx=0:N-1;stem(x,yn,.);-