数字信号处理实验指导书.docx
- 文档编号:10012194
- 上传时间:2023-02-07
- 格式:DOCX
- 页数:102
- 大小:414.41KB
数字信号处理实验指导书.docx
《数字信号处理实验指导书.docx》由会员分享,可在线阅读,更多相关《数字信号处理实验指导书.docx(102页珍藏版)》请在冰豆网上搜索。
数字信号处理实验指导书
前言
数字信号处理是一门理论和工程实践密切结合的课程。
为了加深对教学内容的理解,应在学习理论的同时,加强上机实验,深入理解和消化基本理论,锻炼初学者独立解决问题的能力。
本课程实验要求学生运用MATLAB编程完成一些数字信号处理的基本功能。
MATLAB是一高效的工程计算语言,它将计算、可视化和编程等功能集于一个易于使用的环境。
在MATLAB环境中描述问题计编制求解问题的程序时,用户可以按照符合人们科学思维的方式和数学表达习惯的语言形式来书写程序。
MATLAB广泛应用于工业,电子,医疗和建筑等众多领域。
其典型应用主要包括以下几个方面:
数学计算;
算法开发;
数据采集;
系统建模和仿真;
数据分析和可视化
科学和工程绘图;
应用软件开发(包括用户界面)。
实验1用MATLAB产生时域离散信号
一、.实验目的:
1、了解常用时域离散信号及其特点
2、掌握用MATLAB产生时域离散信号的方法
二、.实验原理:
1、时域离散信号的概念
在时间轴的离散点上取值的信号,称为离散时间信号。
通常,离散时间信号用x(n)表示,其幅度可以在某一范围内连续取值。
由于信号处理设备或装置(如计算机、专用的信号处理芯片等)均以有限位的二进制数来表示信号的幅度,因此,信号的幅度也必须离散化。
我们把时间和幅度均取离散值的信号称为时域离散信号或数字信号。
在MATLAB语言中,时域离散信号可以通过编写程序直接产生。
2、常用时域离散信号的生成
1)单位抽样序列
单位抽样序列的表示式为
或
以下三段程序分别用不同的方法来产生单位抽样序列。
例1-1用MATLAB的关系运算式来产生单位抽样序列。
注:
ijpi不可用
n1=-5;n2=5;n0=0;
n=n1:
n2;
x=[n==n0];
stem(n,x,'filled');
axis([n1,n2,0,1.1*max(x)]);
xlabel('时间(n)');ylabel('幅度x(n)');
title('单位脉冲序列');
运行结果如图1-1所示:
图1-1
例1-2用zeros函数和抽样点直接赋值来产生单位抽样序列。
n1=-5;n2=5;k=0;
n=n1:
n2;
nt=length(n);
nk=abs(k-n1)+1;
x=zeros(1,nt);
x(nk)=1;
绘图部分的程序及作图结果与例1-1相同。
例1-3生成移位的单位脉冲序列。
n1=-5;n2=5;n0=2;
n=n1:
n2;
x=[(n-n0)==0];
stem(n,x,'filled');
axis([n1,n2,0,1.1*max(x)]);
xlabel('时间(n)');ylabel('幅度x(n)');
title('单位脉冲序列');
运行结果如图1-2所示
图1-2
2)单位阶跃序列
单位阶跃序列表示式为
或
以下三段程序分别用不同的方法来产生单位阶跃序列。
例1-4用MATLAB的关系运算式来产生单位阶跃序列。
n1=-2;n2=8;n0=0;
n=n1:
n2;
x=[n>=n0];
stem(n,x,'filled');
axis([n1,n2,0,1.1*max(x)]);
xlabel('时间(n)');ylabel('幅度x(n)');
title('单位阶跃序列');
box
运行结果如图1-3所示:
图1-3
例1-5用zeros和ones函数来产生单位阶跃序列。
n1=-2;n2=8;k=0;
n=n1:
n2;
nt=length(n);
nk=abs(k-n1)+1;
x=[zeros(1,nk-1),ones(1,nt-nk+1)];
绘图部分的程序及作图结果与例1-4相同。
.
例1-6生成移位的单位阶跃序列。
n1=-10;n2=10;n0=4;
n=n1:
n2;
x=[(n-n0)>=0];
stem(n,x,'filled');
axis([n1,n2,0,1.1*max(x)]);
xlabel('时间(n)');ylabel('幅度x(n)');
title('移位的单位阶跃序列');
box
程序运行结果如图1-4所示:
图1-4
3)实指数序列
实指数序列的表示式为x(n)=an其中a为实数
例1-7编写产生a=1/2和a=2的实指数连续信号和离散序列的程序
n1=-10;n2=10;a1=0.5;a2=2;
na1=n1:
0;x1=a1.^na1;
na2=0:
n2;x2=a2.^na2;
subplot(2,2,1);plot(na1,x1);
title('实指数信号(a<1)');
subplot(2,2,3);stem(na1,x1,'filled');
title('实指数序列(a<1)');
subplot(2,2,2);plot(na2,x2);
title('实指数信号(a>1)');
subplot(2,2,4);stem(na2,x2,'filled');
title('实指数序列(a<1)');
box
程序运行结果如图1-5所示:
图1-5
4)复指数序列
复指数序列的表示式为x(n)=e(σ+jω)n
当ω=0时,x(n)为实指数序列;当σ=0时,x(n)为虚指数序列,即
ejωn=cos(ωn)+jsin(ωn)
其实部为余弦序列,虚部为正弦序列。
例1-8编写程序产生σ=-0.1,ω=0.6的复指数连续信号与离散序列。
n1=30;a=-0.1;w=0.6;
n=0:
n1;
x=exp((a+j*w)*n);
subplot(2,2,1);plot(n,real(x));
title('复指数信号的实部');
subplot(2,2,3);stem(n,real(x),'filled');
title('复指数序列的实部');
subplot(2,2,2);plot(n,imag(x));
title('复指数信号的虚部');
subplot(2,2,4);stem(n,imag(x),'filled');
title('复指数序列的虚部');
box
程序运行结果如图1-6所示
图1-6
5)正(余)弦序列
正(余)弦序列的表示式为x(n)=Umsin(ω0n+Θ)
例1-9已知一时域周期性正弦信号的频率为1Hz,振幅值为1V。
编写程序在图形窗口上显示两个周期的信号波形,并对该信号的一个周期进行32点采样获得离散信号。
f=1;Um=1;nt=2;
N=32;T=1/f;
dt=T/N;
n=0:
nt*N-1;
tn=n*dt;
x=Um*sin(2*f*pi*tn);
subplot(2,1,1);plot(tn,x);
axis([0,nt*T,1.1*min(x),1.1*max(x)]);
ylabel('x(t)');
subplot(2,1,2);stem(tn,x);
axis([0,nt*T,1.1*min(x),1.1*max(x)]);
ylabel('x(n)');
box
程序运行结果如图1-7所示
图1-7
6)矩形波序列
MATLAB提供有专门函数square用于产生矩形波。
其调用格式如下:
x=square(t):
类似于sin(t),产生周期为2∏,幅值为±1的方波。
x=square(t,duty):
产生指定周期的矩形波,其中duty用于指定占空比。
将square的参数t换成n,且n取整数,则可以获得矩形序列。
例1-10一个周期性矩形信号频率为5kHz,信号幅度在0~2V之间,占空比为0.25,。
编写程序生成该信号,要求在图形窗口上显示2个周期的信号波形;对信号的一个周期进行16点采样获得离散信号。
f=5000;nt=2;
N=16;T=1/f;
dt=T/N;
n=0:
nt*N-1;
tn=n*dt;
x=square(2*f*pi*tn,25)+1;
subplot(2,1,1);plot(tn,x);
axis([0,nt*T,1.1*min(x),1.1*max(x)]);
ylabel('x(t)');
subplot(2,1,2);stem(tn,x);
axis([0,nt*T,1.1*min(x),1.1*max(x)]);
ylabel('x(n)');
box
程序运行结果如图1-8所示:
三、.实验内容:
1、阅读并上机验证实验原理部分的例题程序,理解每一条语句的含义。
改变例题中的有关参数(如信号的频率、周期、幅度、显示时间的取值范围、采样点数等),观察对信号波形的影响。
2、编写程序,产生以下离散序列:
(1)f(n)=δ(n)(-3 (2)f(n)=u(n)(-5 (3)f(n)=e(0.1+j1.6∏)n(0 (4)f(n)=3sin(nП/4)(0 3、一个连续的周期性方波信号频率为200Hz,信号幅度在-1~+1V之间,要求在图形窗口上显示其两个周期的波形。 以4kHz的频率对连续信号进行采样,编写程序生成连续信号和其采样获得的离散信号波形。 四、.实验预习: 1、预先阅读附录部分的MATLAB基础介绍,认真阅读实验原理,明确本次实验任务,读懂例题程序,了解实验方法。 2、根据实验内容预先编写实验程序。 3、预习思考题: 产生单位脉冲序列和单位阶跃序列各有几种方法? 如何使用? 五、实验报告 1、列写调试通过的实验程序,打印实验程序产生的曲线图形。 2、思考题: 通过例题程序,你发现采样频率Fs、采样点数N、采样时间间隔dt在程序编写中有怎样的联系? 使用时需注意什么问题? 实验2离散LSI系统的时域分析 一、.实验目的: 1、加深对离散系统的差分方程、单位脉冲响应、单位阶跃响应和卷积分析方法的理解。 2、初步了解用MATLAB语言进行离散时间系统时域分析的基本方法。 3、掌握求解离散时间系统的单位脉冲响应、单位阶跃响应、线性卷积以及差分方程的程序的编写方法,了解常用子函数的调用格式。 二、实验原理: 1、离散LSI系统的响应与激励 由离散时间系统的时域分析方法可知,一个离散LSI系统的响应与激励可以用如下框图表示: 其输入、输出关系可用以下差分方程描述: 2、用函数impz和dstep求解离散系统的单位脉冲响应和单位阶跃响应。 例2-1已知描述某因果系统的差分方程为6y(n)+2y(n-2)=x(n)+3x(n-1)+3x(n-2)+x(n-3) 满足初始条件y(-1)=0,x(-1)=0,求系统的单位脉冲响应和单位阶跃响应。 解: 将y(n)项的系数a0进行归一化,得到 y(n)+1/3y(n-2)=1/6x(n)+1/2x(n-1)+1/2x(n-2)+1/6x(n-3) 分析上式可知,这是一个3阶系统,列出其bk和ak系数: a0=1,a,1=0,a,2=1/3,a,3=0 b0=1/6,b,1=1/2,b,2=1/2,b,3=1/6 程序清单如下: a=[1,0,1/3,0]; b=[1/6,1/2,1/2,1/6]; N=32; n=0: N-1; hn=impz(b,a,n); gn=dstep(b,a,n); subplot(1,2,1);stem(n,hn,'k'); title('系统的单位序列响应'); ylabel('h(n)');xlabel('n'); axis([0,N,1.1*min(hn),1.1*max(hn)]); subplot(1,2,2);stem(n,gn,'k'); title('系统的单位阶跃响应'); ylabel('g(n)');xlabel('n'); axis([0,N,1.1*min(gn),1.1*max(gn)]); 程序运行结果如图2-1所示: 图2-1 3、用函数filtic和filter求解离散系统的单位序列响应和单位阶跃响应。 例2-2已知描述某因果系统的差分方程为6y(n)-2y(n-4)=x(n)-3x(n-2)+3x(n-4)-x(n-6),满足初始条件y(-1)=0,x(-1)=0,求系统的单位脉冲响应和单位阶跃响应。 时间轴上N取32点。 注意: 原式非标准形式,必须化为标准形式后再列出系数b,a。 程序清单如下: x01=0;y01=0; a=[1,0,0,0,-1/3,0,0]; b=[1/6,0,-1/2,0,1/2,0,-1/6]; N=32;n=0: N-1; xi=filtic(b,a,0); x1=[n==0]; hn=filter(b,a,x1,xi); x2=[n>=0]; gn=filter(b,a,x2,xi); subplot(1,2,1);stem(n,hn,'k'); title('系统的单位序列响应'); ylabel('h(n)');xlabel('n'); axis([0,N,1.1*min(hn),1.1*max(hn)]); subplot(1,2,2);stem(n,gn,'k'); title('系统的单位阶跃响应'); ylabel('g(n)');xlabel('n'); axis([0,N,1.1*min(gn),1.1*max(gn)]); 程序运行结果如图2-2所示: 图2-2 4、用MATLAB实现线性卷积 1)用函数conv进行卷积运算: 求解两个序列的卷积和,关键在于如何确定卷积结果的时宽区间。 MATLAB提供的求卷积函数conv默认两个序列的序号均从n=0开始,卷积结果y对应的序列的序号也从n=0开始。 例2-3已知两个序列f1=0.8n(0 n1=0: 20; f1=0.8.^n1; subplot(2,2,1);stem(n1,f1,'filled'); title('f1(n)'); n2=0: 10; N2=length(n2); f2=ones(1,N2); subplot(2,2,2);stem(n2,f2,'filled'); title('f2(n)'); y=conv(f1,f2); subplot(2,1,2);stem(y,'filled'); 程序运行结果如图2-3所示: 图2-3 2)非零起始序列的卷积运算: 当两个序列不是从0开始时,必须对conv函数稍加扩展。 由卷积原理可知,若待卷积的两个序列序号分别为{x(n);nx=nxs: nxf},{h(n);nh=nhs: nhf},则卷积和y(n)的序号起点和终点分别为: nys=nxs+nhs,nyf=nxf+nhf。 据此可定义通用卷积函数convu: function[y,ny]=convu(h,nh,x,nx) nys=nh (1)+nx (1);nyf=nh(end)+nx(end); y=conv(h,x);ny=nys: nyf; 例2-4已知序列f1=0.5n(0 程序清单如下: n1=0: 10;f1=0.5*n1; n2=-2: 10;nt=length(n2); f2=ones(1,nt); [y,ny]=convu(f1,n1,f2,n2); subplot(2,2,1);stem(n1,f1); subplot(2,2,2);stem(n2,f2); subplot(2,1,2);stem(ny,y); 程序运行结果如图2-4所示: 图2-4 3)卷积积分的动态过程演示: 为了更深入地理解序列卷积的原理,下面提供一段演示卷积和的动态过程的程序。 例2-5动态演示例2-3两个序列f1=0.8n(0 程序清单如下: clf; nf1=0: 20; f1=0.8.^n1; lf1=length(n1); nf2=0: 10; lf2=length(n2); f2=ones(1,lf2); m=max(lf2,lf1); iflf2>lf1nf2=0;nf1=lf2-lf1; elseiflf2 elsenf2=0;lf1=0; end; lt=m; u=[zeros(1,lt),f2,zeros(1,nf2),zeros(1,lt)]; t1=(-lt+1: 2*lt); f1=[zeros(1,2*lt),f1,zeros(1,nf1)]; hf1=fliplr(f1); N=length(hf1); y=zeros(1,3*lt); fork=0: 2*lt p=[zeros(1,k),hf1(1: N-k)]; y1=u.*p; yk=sum(y1); y(k+lt+1)=yk; subplot(4,1,1);stem(t1,u); subplot(4,1,2);stem(t1,p); subplot(4,1,3);stem(t1,y1); subplot(4,1,4);stem(k,yk); axis([-20,50,0,5]);holdon pause (2); end 程序运行结果如图2-5所示: 图2-5 5、离散LSI系统时域响应的求解: MATLAB提供了多种方法求解离散LSI系统的响应: 1)用conv函数进行卷积积分,求任意输入的系统零状态响应; 例2-6已知描述某因果系统的差分方程为6y(n)+2y(n-2)=x(n)+3x(n-1)+3x(n-2)+x(n-3), 满足初始条件y(-1)=0,x(-1)=0。 在该系统的输入端加一个矩形脉冲序列,其占空比为0.25,一个周期取16个采样点,求该系统的响应。 程序清单如下: N=16; n=0: N-1; x=[ones(1,N/4),zeros(1,3*N/4)]; subplot(2,2,1);stem(n,x); a=[1,0,1/3,0,]; b=[1/6,1/2,1/2,1/6]; hn=impz(b,a,n); subplot(2,2,2);stem(n,hn); y=conv(x,hn); subplot(2,1,2);stem(y); 程序运行结果如图2-6所示: 图2-6 2)用dlsim函数求任意输入的系统零状态响应; 例2-7已知某IIR数字低通滤波器的系统函数为 输入两个正弦叠加的序列 ,求该系统的响应。 程序清单如下: nx=0: 8*pi; x=sin(nx/2)+sin(10*nx)/3; subplot(3,1,1);stem(nx,x); a=[1,-0.34319,0.60439,-0.20407]; b=[0.1321,0.3963,0.3963,0.1321]; nh=0: 9;h=impz(b,a,nh); subplot(3,1,2);stem(nh,h); y=dlsim(b,a,x); subplot(3,1,3);stem(y); 程序运行结果如图2-7所示 图2-7 3)用filtic和filter函数求任意输入的系统完全响应。 例2-8已知描述某系统的差分方程为y(n)-1.5y(n-1)+0.5y(n-2)=x(n)n≥0,满足初始条件y(-1)=4,y(-2)=10,求系统输入为x(n)=(0.25)nu(n)时的零输入、零状态及全响应。 解为了更深入地理解filtic和filter函数的用法,先用经典法求得系统完全响应表达式: ,并编写程序绘出其图形,以便与用MATLAB函数求解的结果进行对比。 程序清单如下: a=[1,-1.5,0.5]; b=1; N=20;n=0: N-1; x=0.25.^n; x0=zeros(1,N); y01=[4,10]; xi=filtic(b,a,y01); y0=filter(b,a,x0,xi); xi0=filtic(b,a,0); y1=filter(b,a,x,xi0); y=filter(b,a,x,xi); y2=((1/3)*(1/4).^n+(1/2).^n+(2/3)).*ones(1,N); subplot(2,3,1);stem(n,x); title('输入信号x(n)'); subplot(2,3,2);stem(n,y0); title('系统的零输入响应'); subplot(2,3,3);stem(n,y1); title('系统的零状态响应'); subplot(2,2,3);stem(n,y); title('用filter求得的完全响应'); subplot(2,2,4);stem(n,y2); title('经典法求得的完全响应'); 程序运行结果如图2-8所示: 图2-8 三、实验内容: 1、输入并运行例题程序,理解每一条语句的含义。 2、已知描述某离散LSI系统的差分方程为2y(n)-3y(n-1)+y(n-2)=x(n-1),分别用impz和dstep函数、filtic和filter函数两种方法求解系统的单位序列响应和单位阶跃响应。 3、编写程序描绘下列序列的卷积波形: (1)f1(n=u(n),f2(n)=u(n-2),(0≤n<10) (2)x(n)=sin(n/2),h(n)=(0.5)n(-3≤n≤4П) 4、已知某离散LSI系统的单位序列响应为h(n)=3δ(n-3)+0.5δ(n-4)+0.2δ(n-5)+0.7δ(n-6)-0.8δ(n-7) 求输入为x(n)=e-0.5nu(n)时的系统响应。 5、已知描述某离散LSI系统的差分方程为y(n)=0.7y(n-1)+2x(n)-x(n-2),求输入为x(n)=u(n-3)时的系统响应。 四、实验预习: 1、认真阅读实验原理部分,明确实验目的,复习有关离散LSI系统的理论知识。 2、读懂实验原理部分的例题程序,熟悉与本实验有关的MATLAB函数。 3、根据实验内容预先编写实验程序,并思考本实验提出的有关MATLAB函数在调用时应注意哪些问题。 五、实验报告: 1、列写调试通过的实验程序,打印实验程序产生的曲线图形。 2、列出本实验提出的有关MATLAB函数在调用时应注意的问题。 实验3离散LSI系统的频域分析 一、实验目的 1、加深对离散系统变换域分析——z变换的理解,掌握使用MATLAB进行z变换和逆z变换的常用函数的用法。 2、了解离散系统的零极点与系统因果性和稳定性的关系,熟悉使用MATLAB进行离散系统的零极点分析的常用函数的用法。 3、加深对离散系统的频率响应特性基本概念的理解,掌握使用MATLAB进行离散系统幅频响应和相频响应特性分析的常用方法。 二、实验原理 1、z变换和逆z变换 (1)用ztrans函数求无限长序列的z变换。 该函数只给出z变换的表达式,而没有给出收敛域。 另外,由于这一函数还不尽完善,有的序列的z变换还不能求出,逆z变换也存在同样的问题。 例7-1求以下各序列的z变换 x1(n)=anx2(n)=nx3(n)=n(n-1)/
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 数字信号 处理 实验 指导书