1、西安邮电大学通信与信息工程学院实 验 报 告(2016/2017 学年 第 2 学期)实验名称: 数字信号处理实验 学生姓名: 石龙飞 专 业: 通信工程 学 号: 03151307 指导教师: 常虹 2017 年 06 月 01 日西安邮电大学通院数字信号处理实验独立设课实验过程考核表学生姓名 石龙飞 班级/ 学号 通工 1510/03151307承担任务实验室(单位)三号实验楼 423 所在部门 电科实验室实施时间 2017 年 5 月 11 日 2017 年 6 月 1 日第一次 熟悉 MATLAB 的使用第二次 信号的表示第三次 FFT 频谱分析及应用第四次 信号的运算卷积第五次 线性
2、卷积的快熟处理办法重叠相加法第六次 线性卷积的快熟处理办法重叠保留法第七次 IIR 数字滤波器的设计具体内容第八次 FIR 数字滤波器的设计指导教师姓名 常虹 职务或职称学习态度 认真 一般 不认真学习纪律 全勤 偶尔缺勤 经常缺勤指导教师对学生的评价实践能力 很强 一般 较差指导教师评语指导教师(师傅)签字 年 月 日 西安邮电大学通院数字信号处理实验独立设课实验成绩鉴定表学生姓名石龙飞 专业班级/ 学号 通工 1510/03151307315 进行时间2017 年 5 月 11 日 2017 年 6 月 1 日平时成绩(30 分)课堂出勤情况、课堂纪律及学习态度(25 分)遵守实验室的规章
3、制度情况(5 分)实验能力(40 分)分析、解决实际问题能力(10 分)文件检索或软硬件设计能力(10 分)实验完成情况(20 分)考核内容标准实习报告(30 分)语言及文字表达力(10 分)实验报告结构(10 分)书写格式规范(10 分)总评成绩1 熟悉 MATLAB1.1 实验目的1、 了解 MATLAB 程序设计语言的基本特点,熟悉 MATLAB 软件的运行环境。2、掌握各种信号的建模方式。3、掌握各种信号的托兴表示方法。4、掌握变量等有关概念,具备初步的将一般数学模型转化为对应的计机模型并进行处理的能力。1.2 实验原理1、图形保持hold on/off 命令控制是保持原有图形还是刷新
4、原有图形,不带参数的 hold 命令在两种状态之间进行切换。2、绘图修饰命令title(图形名称)xlabel(x 轴说明)ylabel(y 轴说明)text(x,y,图形说明)legend1.3 实验内容以及步骤单位采样序列代码:x=-5:5;y1=zeros(1,5),1,zeros(1,5);stem(x,y1,r)axis(-5,5,0,2);单位阶跃序列代码:x=-5:5;y1=zeros(1,5),1,ones(1,5);stem(x,y1,r)axis(-5,5,0,2);矩形序列代码:x=-5:10;y1=zeros(1,5),ones(1,5),zeros(1,6);plot
5、(x,y1)stem(x,y1,r)axis(-5,10,0,2);三角波代码:fs=10000;t=-1:1/fs:1;w=0.4;x=tripuls(t,w);plot(t,x)方波代码:t=-2*pi:0.001:2*pi;x=square(t);plot(t,x);xlabel(t),ylabel(z=square(t)锯齿波代码:x=0:0.01:5;y=1-mod(x,1);plot(x,y)Sinc 函数代码:clearn=-5:0.5:10y=sin(0.5*pi*n);stem(n,y,g)1.4 实验结果分析学习使用 MATLAB7.0 软件;学习信号的图形表示方法,掌握各
6、种各种信号的的建模方式;实现单位采样序列、单位阶跃序列、举行序列、三角波、方波、锯齿波、Sinc 函数。1.5 实验总结以及体会构成经过本次试验,我对于用 MATLAB 来作出一些数字信号中的一些基本波形的图像有了深刻的认识,可以熟练而又准确地以 MATLAB 为工具做出诸如单位阶跃序列,矩形序列等多种序列的图形,不仅如此,在作图中,我对于 MATLAB 的一些作图的基本指令,以及需要作出的序列有了深刻的认识与见解;本节课做出这些图形并不是重点,重点是了解MATLAB 程序设计语言的基本特点,掌握这一个重要的工具,并且可以将数学模型熟练地转化为计算机模型,并进行处理,这才是本次实验真正的作用与
7、意义,也是作为当代大学生的我们所必须具备的基本能力。1.6 指导老师评语2 信号的表示2.1 实验目的1、了解MATLAB 程序设计语言的基本特点,熟悉MATLAB 软件运行环境。2、掌握各种信号的建模方式。3、掌握各种信号的图形表示方法。4、掌握变量等有关概念,具备初步的将一般数学模型转化为对应的计算机模型并进行处理的能力2.2 实验原理常用的 MATLAB 绘图语句有figure、plot、subplot、stem 等,图形修饰语具有title、axis、text 等。2.2.1 figure 语句figure 有两种用法。当只有一句figure 命令时,程序会创建一个新的图形窗口,并返回
8、一个整数型的窗口编号。当采用figure(n)时,表示将第n 个图形窗口作为当前的图形窗口,将其显示在所有窗口的最前面。如果该图形窗口不存在,则新建一个窗口,并赋以编号n。2.2.2 plot 语句线形绘图函数。用法为 plot(x,y,s)。参数x 为横轴变量,y 为纵轴变量,s 用以控制图形的基本特征如颜色、粗细等,通常可以省略,常用方法如表1-1 所示。表 1-1 plot 命令的参数及其含义参数 含义 参数 含义 参数 含义Y 黄色 . 点 - 实线M 紫色 O 圆 ; 虚线C 青色 X 打叉 -. 点划线R 红色 + 加号 - 破折线G 绿色 * 星号 向上三角形B 蓝色 S 正方形
9、 向右三角形K 黑色 v 向下三角形 P 五角星形表1-12.2.3 subplot 语句subplot(m,n,i)是分割显示图形窗口命令,它把一个图形窗口分为m 行n 列共mn 个小窗口,并指定第i 个小窗口为当前窗口。2.2.4 二维统计分析图在MATLAB 中,二维统计分析图形很多,常见的有条形图、阶梯图、杆图和填充图等,所采用的函数分别是:bar(x,y,选项)stairs(x,y,选项)stem(x,y,选项)fill(x1,y1,选项1,x2,y2,选项2,)2.2.5 图形保持hold on/off 命令控制是保持原有图形还是刷新原有图形,不带参数的hold 命令在两种状态之间
10、进行切换。2.2.6 绘图修饰命令title(图形名称)xlabel(x 轴说明)ylabel(y 轴说明)text(x,y,图形说明)legend(图例1,图例2,)2.2.7 MATLAB 常用信号生成函数(1) ZEROS 功能:产生全零阵列 调用格式:X=ZEROS (N) %产生N 行N 列的全零矩阵 X=ZEROS(M,N) %产生M 行N 列的全零矩阵(2) ONES 功能:产生全 1 阵列 调用格式:X=ONES(N) %产生N 行N 列的全1 矩阵 X=ONES(M,N) %产生M 行N 列的全1 矩阵(3) SINC 功能:辛格函数 调用格式:Y= SINC(X) %(4)
11、 RECTPULS 功能:产生矩形脉冲信号 调用格式:Y= RECTPULS (T) %产生高度为1、宽度为1、关于T0 对称的矩形脉冲 Y= RECTPULS (T,W) %产生高度为1、宽度为W、关于T0 对称的矩形脉冲(5) RAND 功能:产生伪随机序列 调用格式:Y= RAND (1,N) %产生0,1上均匀分布的随机序列 Y= RANDN (1,N) %产生均值为0,方差为1 的白噪声序列(6) SAWTOOTH 功能:产生周期锯齿波或三角波 调用格式:Y= SAWTOOTH (T) %产生幅值为1,1,以2 为周期的方波 Y=SAWTOOTH(T,WIDTH)% 产生幅值为1,1
12、,以WIDTH *2 为周期的方波(7) SQUARE 功能:产生方波 调用格式:Y= SQUARE (T) %产生幅值为1,1,以2 为周期的锯齿波 Y= SQUARE(T,DUTY) % 产生幅值为1,1,以占空比为DUTY 的方波 例: t = 0:.0001:.0625; y = SQUARE(2*pi*30*t,80); plot(t,y)产生一个占空比为80%的方波(8) FLIPLR 功能: 序列左右翻转 调用格式:Y = FLIPLR(X) % X = 1 2 3 翻转后 3 2 14 5 6 6 5 4(9) CUMSUM 、SUM 功能: 计算序列累加 调用格式:Y = C
13、UMSUM(X) % 向量X 元素累加,记录每一次的累加结果,而SUM只记录最后的结果。2.3:实验内容以及步骤1、分别以条形图、阶梯图、杆图和填充图形式绘制曲线y=2sin(x)。程序如下:x=0:pi/10:2*pi;y=2*sin(x);subplot(2,2,1);bar(x,y,g);title(bar(x,y,g);axis(0,7,-2,2);subplot(2,2,2);stairs(x,y,b);title(stairs(x,y,b);axis(0,7,-2,2);subplot(2,2,3);stem(x,y,k);title(stem(x,y,k);axis(0,7,-2
14、,2);subplot(2,2,4);fill(x,y,y);title(fill(x,y,y);axis(0,7,-2,2);2、采用图形保持,在同一坐标内绘制曲线y1=0.2e-0.5xcos(4x) 和y2=2e-0.5xcos(x)。程序如下:x=0:pi/100:2*pi;y1=0.2*exp(-0.5*x).*cos(4*pi*x);plot(x,y1)hold ony2=2*exp(-0.5*x).*cos(pi*x);plot(x,y2);hold off3、在0x2 区间内,绘制曲线y1=2e-0.5x 和y2=cos(4x),并给图形添加图形标注。程序如下:x=0:pi/1
15、00:2*pi;y1=2*exp(-0.5*x);y2=cos(4*pi*x);plot(x,y1,x,y2)title(x from 0 to 2pi); %加图形标题xlabel(Variable X); %加X 轴说明ylabel(Variable Y); %加Y 轴说明text(0.8,1.5,曲线y1=2e-0.5x); %在指定位置添加图形说明text(2.5,1.1,曲线y2=cos(4pix);legend(y1, y2) %加图例4、实现单位采样序列 (n)、单位阶跃序列u( n)、矩形序列 ( ) N R n ,并用图形显示。写出程序及输出图形%单位采样序列 (n)n=-5
16、:10;y=zeros(1,5),1,zeros(1,10);stem(n,y);%单位阶跃序列u(n)axis(-5,10,0,2);n=-5:10;y=zeros(1,5),ones(1,11);stem(n,y,r)axis(-5,10,0,2);%矩形序列 ( ) N R n n=-5:10;y=zeros(1,5),ones(1,5),zeros(1,6);plot(n,y)stem(n,y)axis(-5,10,0,2);title(矩形序列);5、实现三角波、方波、锯齿波、Sinc 函数,并用图形显示。写出程序及输出图形%三角波fs=10000;t=-1:1/fs:1;w=0.4
17、;x=tripuls(t,w);plot(t,x)title(三角波);%方波t=-2*pi:0.001:2*pi;x=square(t);plot(t,x);xlabel(t),ylabel(x=square(t);%锯齿波x= 0:0.01:5;y=1-mod(x,1);plot(x,y)title(锯齿波)%Sinc函数n=-5:0.5:10;y=sin(0.5*pi*n);stem(n,y,g)title(正弦序列);2.4:实验结果分析1、 分别以条形图、阶梯图、杆图和填充图形式绘制曲线y=2sin(x)。2、 采用图形保持,在同一坐标内绘制曲线y1=0.2e-0.5xcos(4x)
18、 和y2=2e-0.5xcos(x)。3、 在0x2 区间内,绘制曲线y1=2e-0.5x 和y2=cos(4x),并给图形添加图标注。4、实现单位采样序列 (n)、单位阶跃序列 u(n)、矩形序列 ( ) N R n ,并用图形显示,写出程序及输出图形。5、 实现三角波、方波、锯齿波、Sinc 函数,并用图形显示。写出程序及输出图形2.5:实验总结以及体会构成本次实验主要是熟悉了如何使用 MATLAB 表示信号,通过 MATLAB 的函数来实现是主要方法,其次也可以自行编写函数,表示自己需要的特定信号,来适应不同的应用场合。在信号表示中学会画图是非常重要的一件事,几乎所有的信号都可以也需要用
19、图像表示出来,这样对分析和实验都是有着好处的,熟练掌握画图函数,这些便都可以迎刃而解,画图函数有很多种,其参数也是形形色色,记住每个参数的位置意义是非常重要的。因为是对数字信号的处理,因此免不了会用到很多的理论知识,这时就是理论和时间结合的时候,MATLAB 是一个可以仿真信号的工具,可以模拟实际,需要用理论知识来设计解决问题所需要的模型,然后用 MATLAB 将其仿真出来,看看实际结果是否是我们预期的,这个结果也将是我们在现实中实施该方案所能看到的结果。2.6:指导老师评语3 FFT 频谱分析及应用3.1 实验目的1、通过实验加深对FFT 的理解;2、熟悉应用FFT 对典型信号进行频谱分析的
20、方法。3.1 实验原理在各种信号序列中,有限长序列占重要地位。对有限长序列可以利用离散傅立叶变换(DFT)进行分析。 DFT 不但可以很好的反映序列的频谱特性,而且易于用快速算法(FFT)在计算机上进行分析。有限长序列的 DFT 是其z 变换在单位圆上的等距离采样,或者说是序列傅立叶的等距离采样,因此可以用于序列的谱分析。FFT 是DFT 的一种快速算法,它是对变换式进行一次次分解,使其成为若干小数据点的组合,从而减少运算量。在 MATLAB 信号处理工具箱中的函数fft(x,n ),可以用来实现序列的N 点快速傅立叶变换。经函数fft求得的序列一般是复序列,通常要求出其幅值和相位。MATLA
21、B中提供了求复数的幅值和相位的函数:abs、angle,这些函数一般和fft同时使用。3.3.3 实验内容以及步骤被噪声污染得信号,比较难看出所包含得频率分量,如一个由50Hz 和120Hz正弦信号构成的信号,受零均值随机噪声的干扰,数据采样率为1000Hz ,试用FFT 函数来分析其信号频率成分,要求:1 画出时域波形;2 分析信号功率谱密度。N = 40;n = 0:N-1;t = 0.01*n;x = 2*sin(4*pi*t) + 5*cos(8*pi*t);k = 0:N/2;w = 2*pi/N*k;X = fft(x, N);magX = abs(X(1:N/2+1);subpl
22、ot(2, 1, 1);stem(n, x, .);title(signal x(n);subplot(2, 1, 2);stem(magX);title(FFT N=40);xlabel(f (unit : pi); ylabel(|X|);grid3.3.4 实验结果分析3.3.5 实验总结以及体会构成本次实验只要是针对有限长序列,我们可以通过 MATLAB 对其进行离散傅里叶变化,是非常方便的,因为工具内部已经将函数写好,我们只需要将变化的信号交给函数就可以,可以说大大地减小了手工计算量,并且能过直观得将图画出来。其中需要注意的问题也有很多,比如因为操作失误,将函数名称写错,软件机会报错
23、,这个问题还是比较容易查找的,其次是在表示信号的时候,将一些数值写错,到会最后的变换不是我们需要的,画出的图像有明显的问题,这些都需要细心才能避免,当然还有一些比较头疼的错误,比如函数不会使用,所给的参数错误,或者不符合标准。3.3.6 指导老师评语4 信号的运算-卷积4.1 实验目的1、掌握信号的线性卷积运算。2、掌握信号的循环卷积运算。3、掌握信号循环卷积计算线性卷积的条件。4.2 实验原理数字信号卷积定理4.3 实验内容以及步骤1、假设卷积下面信号X(n)= 0nN | length(x2)N)error(N必须大于等于x的长度);endx1=x1 zeros(1,N-length(x1
24、);x2=x2 zeros(1,N-length(x2);X1=fft(x1,N);X2=fft(x2,N);X=X1.*X2;y = ifft(X,N);y=real(y);n1=0:1:19;hn=sin(0.2*n1)+cos(0.5*n1);n2=0:1:9;xn=exp(0.2*n2);N=length(xn)+length(hn)-1;n=0:N-1;ny=0:20;y1=circonvt(xn,hn,21); y2=circonvt(xn,hn,N);xn=xn zeros(1,N-length(xn);hn=hn zeros(1,N-length(hn);X1= fft(xn,
25、N);H=fft(hn,N);X=X1.*H;x=ifft(X);x=real(x);subplot(2,2,1);stem(n,xn);title(xn(n);axis(0,33,0,5);subplot(2,2,2);stem(n,hn);title(h(n);axis(0,33,-2,2);subplot(2,2,3);stem(ny,y1,fill);title(21点循环卷积);axis(0,33,-20,30);hold on;subplot(2,2,4);stem(n,x);title(线性卷积);axis(0,33,-20,30);subplot(2,2,3);stem(n,x
26、,r,-);axis(0,33,-20,30);hold off4.4 实验结果分析1、假设卷积下面信号X(n)= 0n M + Lh 1的循环卷积将会避免所有的时间混叠效应(通过使用填补零)。然而,每一段输出的长度现在大于M 。要将输出的各段合起来,必须把每一段的重叠部分加起来。因此,这个方法也可以称为“重叠输出”法。这里讲解较简略,更详细的论述请在相关教科书中查找。5.3 实验内容以及步骤编写一个实现块卷积重叠相加法的M 文件函数。该函数的输入之一应是段的长度M,或者是FFT 的长度。循环卷积应在DFT 域中进行。最终,这将会使程序最快的运行。function y = test4_1(x,
27、 h, Nfft)H=fft(h,Nfft);M=Nfft - length(h)+1; for ix = 1:M:length(x)x_seg = x(ix:ix+M-1); X = fft(x_seg,Nfft);Y = X.*H;y_seg = ifft(Y);y(ix:ix+Nfft-1)= y(ix:ix+Nfft-1) +y_seg(1: Nfft);endy = ifft(Y, Nfft);if any(imag(h) endn1 = 0:1:19;hn = sin(0.2*n1) + cos(0.5*n1);n2 = 0:1:9;xn = exp(0.2*n2);z = con
28、v(hn, xn);N = length(xn)+length(hn)-1;hn = hn zeros(1, N-length(hn);R = length(xn);M = length(hn);%y = test4_1(xn, hn, 8);y = fftfilt(xn, hn, 8);k1 = 1:length(y);k = 1:N;plot(k1, y, b-o, k, z, g-x)xlabel(Time index n);ylabel(Amplitude)legend(yn, zn);5.4 实验结果分析5.5 实验总结以及体会构成最基本的卷积运算时所有卷积的基础,是他还远不够实际中
29、的需要,在实际生产生活中有时不仅仅是计算出结果就行,设计者还要考虑这个算法效益,如果数据庞大,计算一个卷积需要几分钟甚至以小时为单位,那么这个算法基本也没什么意义,所以我们还要考虑时间的开销是否合理,于是优化算法就显得尤为重要,将复杂的问题以最短的时间计算出来。在这里我们优化了卷积算法,即重叠相加法,可以比之前的算法更快的完成卷积,为我们节省时间。5.6 指导老师评语6 线性卷积的快速处理方法重叠保留法6.1 实验目的1、掌握信号的块运算重叠保留法原理。 2、掌握信号的块运算重叠保留法的实现方法。3、通过实验和分析深入了解重叠保留法。6.2 实验原理学习使用 MATLAB2014 软件进行建模
30、。学习信号的重叠保留法的基本原理。学习重叠保留法的 MATLAB 实现。实现信号的重叠保留法运算;通过与卷积运算进行对比,比较其浮点运算次数及消耗的时间。6.3 实验内容以及步骤通过 conv 函数来测试此函数的正确性。考虑使用下面信号()=1 0N | length(x2)N)error(N必须大于等于x的长度);endx1=x1 zeros(1,N-length(x1);x2=x2 zeros(1,N-length(x2);X1=fft(x1,N);X2=fft(x2,N);X=X1.*X2;y = ifft(X,N);y = real(y); % ovrlpsav 函数function
31、y = ovrlpsav(x,h,N)Lenx=length(x);M=length(h);if NMN=M+2;endM1=M-1;L=N-M1;h=h,zeros(1,N-M);x=zeros(1,M1),x,zeros(1,N-1);K=floor(Lenx+M-1)/(L);Y=zeros(K+1,N);for k = 0:Kxk = x (k*L+1:k*L+N);Y(k+1,:)=circonvt(xk,h,N);endY=Y(:,M:N);y=(Y(:);endxn=ones(1,17);n1=0:1:100; hn=sin(n1*pi/13); z=conv(hn,xn); N
32、=length(xn)+length(hn)-1; hn=hn zeros(1,N-length(hn); R=length(xn); M=length(hn); y=ovrlpsav(xn,hn,10); k1=1:length(y);k=1:N; plot(k1,y,b-o,k,z,g-x); title(x(n)和 h(n)的循环卷积图像 ); xlabel(n);ylabel(y);6.4 实验结果分析6.5 实验总结以及体会构成最基本的卷积运算时所有卷积的基础,是他还远不够实际中的需要,在实际生产生活中有时不仅仅是计算出结果就行,设计者还要考虑这个算法效益,如果数据庞大,计算一个卷积需要几分钟甚至以小时为单位,那么这个算法基本也没什么意义,所以我们还要考虑时间的开销是否合理,于是优化算法就显得尤为重要,将复杂的问题以最短的时间计算出来。在这里我们优化了卷积算法,即重叠相加法,可以比之前的算法更快的完成卷积,为我们节省时间。