1、实 验 报 告课程名称 数字信号处理 实验项目 实验一 用 DFT 实现长序列卷积并用 FFT 进行信号普分析系 别 信息与通信工程_专 业_电子信息工程_班级/学号_ _学生姓名 _ _ 实验日期 _成 绩 _指导教师 _ _1一、实验目的:1、加深对离散傅立叶变换的理解;2、熟悉用 FFT 进行信号的频谱分析;3、熟悉长序列卷积的实现方法。二、实验内容:在实际的应用环境下,可能需要有限时宽的序列和一个时宽不定或长度非常长的序列进行卷积运算,理论上可以将整个波形存储起来,利用快速卷积方法进行处理,于是要求对短序列补充很多零点,从而导致计算量和需要的存储空间无谓的增加。实际上,当两序列长度差距
2、较大时,快速卷积算法的优势并不能体现出来,而且输入数据未收集完之前,不能够计算出一个输出结果,因此整个系统必然存在较大的延时,不能进行实时处理。为了解决这个问题,可以将长序列分段,然后计算响应。根据分段方式不同,可分为重叠相加法和重叠保留法两种。本实验要求用重叠保留法实现长序列的卷积。重叠保留法通过将长序列 x(n)按照如下方式分成长度为 N 长的子段:()(1)01kxnkNKn,即每一子段与前一子段之间有 K-1 个点重叠。于是,将子段 和 ()kx进行长度为 N 的圆周卷积,即()hn()()01kkynxhnN,可见, 的长度为 N 点。然而 和 线性卷积的长度为k k()N+K-1,
3、因此 的前 K-1 点与线性卷积结果不同,其余的 N-K+1 点()y与线性卷积的结果相同。因此,将 的前 K-1 点舍去,即()kyn 1()kNKR于是20()*()(1)kynxhynLM可见,在重叠保留法中,将原始序列进行有重叠的分段,子段与单位冲激响应之间进行圆周卷积,因此 中的前 K-1 点与线性卷积的结()k果不等需要舍弃,而保留与线性卷积的结果相同的点。题目一:利用一个单位冲激响应序列为 h(n)的系统,设计实现对长的数据的滤波处理,要求使用重叠保留法通过 FFT 来实现这种处理,要求各输入数据段重叠 p 个样点,并从每一段产生的输出中取出 m 个样点,再连接在一起以得到所要求
4、的输出序列。设计滤波算法程序。试用 ()1,072xnnh各数据段长 N=6 个样点,验证你的程序,并求出 p 和 m,显示出分段的输入序列各段的内容和分段的输出序列各段的内容,用杆状图绘出线性卷积输出结果和通过 FFT 重叠保留法的输出结果。注:1、在 Matlab 中,有限长序列可以用行向量表示,如:x=2,1,-1,0,1,4,3,7,向量 x 的下标从 1 开始。若想取出向量 x 中第 M 个到第 N个值构成新的向量,用 x (M:N)。2、当两个序列对应点相乘时,在 Matlab 中使用“.*”运算符,称“点乘” 。3、Matlab 中,补零可以用 zeros 函数实现,例如:x=x
5、,zeros(1,N); 为在原 x 序列后补 N 个 0;x=zeros(1,M),x,zeros(1,N); 为在原 x 序列前补 M 个 0,后补 N 个 0。4、线性卷积函数:conv (x,h);FFT 和逆 FFT 函数:fft (x) 或 fft (x,N)、ifft (x) 或 ifft (x,N),N 表示 N 点长 FFT 或逆 FFT。三、流程图:编写程序3四、实验结果:输入已知量用 Matlab 的 conv 进行线性卷积傅立叶变换构建矩阵,补零4五、试验心得:通过这次试验,我加深对离散傅立叶变换的理解,并熟悉了用FFT 进行信号的频谱分析,通过自己动手编程熟悉了长序列
6、卷积的实现方法。总之这次试验让我受益良多,不仅熟悉了 matlab 软件,而且让我对书本上的理论知识有了更深刻的理解。六、附录:程序源代码:clc,clear,close allx=1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18; h=1 0 -2;h1=1 0 -2 0 0 0; %h 补零x0=0,0,x(1:4); %第一段x1=x(3:8); %第二段x2=x(7:12); %第三段x3=x(11:16); %第四段x4=x(15:18),0,0; %第五段x5=zeros(5,6);y5=zeros(5,6);y0=ifft(fft(x0,6
7、).*fft(h1,6); %每段分别 DFT 变换y1=ifft(fft(x1,6).*fft(h1,6);5y2=ifft(fft(x2,6).*fft(h1,6);y3=ifft(fft(x3,6).*fft(h1,6);y4=ifft(fft(x4,6).*fft(h1,6);y=y0(3:6),y1(3:6),y2(3:6),y3(3:6),y4(3:6); %将有用的数据拼接x5(1,:)=x0;x5(2,:)=x1;x5(3,:)=x2;x5(4,:)=x3;x5(5,:)=x4;y5(1,:)=y0;y5(2,:)=y1;y5(3,:)=y2;y5(4,:)=y3;y5(5,:)=y4;x5y5ysubplot(211) %结果图形显示stem(y)xlabel(n);ylabel(y(n);title(重叠保留法);z=conv(x,h)subplot(212) %直接线性卷积图形显示stem(z)xlabel(n);ylabel(z(n);title(直接卷积);