数字信号处理实验讲义.docx

上传人:b****5 文档编号:6343506 上传时间:2023-01-05 格式:DOCX 页数:62 大小:226.29KB
下载 相关 举报
数字信号处理实验讲义.docx_第1页
第1页 / 共62页
数字信号处理实验讲义.docx_第2页
第2页 / 共62页
数字信号处理实验讲义.docx_第3页
第3页 / 共62页
数字信号处理实验讲义.docx_第4页
第4页 / 共62页
数字信号处理实验讲义.docx_第5页
第5页 / 共62页
点击查看更多>>
下载资源
资源描述

数字信号处理实验讲义.docx

《数字信号处理实验讲义.docx》由会员分享,可在线阅读,更多相关《数字信号处理实验讲义.docx(62页珍藏版)》请在冰豆网上搜索。

数字信号处理实验讲义.docx

数字信号处理实验讲义

 

 

数字信号处理

实验指导书

 

 

 

曲阜师范大学物理工程学院

信号与信息处理教研室

2012.03

 

前言

数字信号处理是是电子信息工程专业的一门专业基础课。

本课程主要研究如何对信号进行分析、变换、综合、估计与识别等加工处理的基本理论和方法,数字信号处理实验是验证、巩固和补充课堂讲授的理论知识的必要环节。

通过实验,使学生巩固所学基本理论,掌握最基本的数字信号处理的理论和方法,提高综合运用所学知识,提高计算机编程的能力。

进一步加强学生独立分析问题、解决问题的能力、综合设计及创新能力的培养,同时注意培养学生实事求是、严肃认真的科学作风和良好的实验习惯,为今后的工作打下良好的基础。

数字信号处理实验指导书针对每个实验介绍了MATLAB语言数字信号处理工具箱中的相应函数,举例并附有相应的程序。

为配合课堂理论教学,实验内容安排仍从认识性和验证性入手,逐步增加设计性和工程应用性内容,达到训练实验技能和积累工程实际应用经验之目的。

数字信号处理实验成绩占本门课程总成绩的20%。

 

实验要求

在实验过程中,要求学生做到:

1、预习实验指导书有关部分,认真做好实验内容的准备工作,就实验可能出现的情况提前作出思考和分析,需要计算的参数提前完成计算工作,并认真写出预习报告。

2、仔细观察实验过程中图形随参数的变化,记录图形变化的主要情况,作出必要说明和分析。

3、认真书写实验报告并在规定的时间内把实验报告交给辅导教师。

实验报告包括实验目的和要求,实验情况及其分析。

对需要编程的实验,写出程序设计说明,给出源程序框图和清单以及实验结论、相关图表,并做必要的分析总结。

4、遵守机房纪律,服从辅导教师指挥,爱护实验设备,注意卫生。

5、实验课程不迟到。

如有事不能出席,所缺实验一般不补。

实验验收分为两个部分。

第一部分是上机操作,包括检查程序运行和即时提问。

第二部分是提交书面的实验报告。

每个实验都应当在规定的时间内完成并检查通过,过期视为未完成该实验,扣该实验操作成绩。

为避免期末集中检查方式产生的诸多不良问题,希望同学们抓紧时间,合理安排,认真完成。

 

实验一MATLAB基本命令

一、实验目的:

掌握Matlab基本命令的使用,以便在以后的实验和进一步的学习中使用Matlab命令。

实验任务:

1、熟悉Matlab语言环境,学习基本命令的使用,并要求掌握。

2、熟悉Matlab中的信号处理Demo使用,并了解其中的程序结构和命令。

MATLAB代表MatrixLaboratory。

MATLAB最早是为方便矩阵存取而编写的一种软件,现已发展成为一个具有高性能数值计算和可视化功能的科学计算环境。

MATLAB集成了数值分析、矩阵计算、信号处理和图形等众多功能,具有简单易用的环境,问题的提出和解答只须以数学方式表达和描述,不需要大量原始而传统的编程过程。

MATLAB一些简单命令:

1.Demo命令:

MATLAB例程演示

初次学习MATLAB可以使用demo命令来熟悉MATLAB语言环境。

你可以在MATLAB的窗口中直接敲demo,它将带你学习使用MATLAB。

2.Help命令:

在线帮助。

语法格式为

Helptopictopic为要取得的帮助主题。

例如:

helpfft将显示fft()函数的说明。

3.编写MATLAB程序:

MATLAB的程序以.M结尾,你可以使用MATLAB窗口中File--NewM--file的菜单命令来建立一个.m空白文件,编写完成后,你保存一下,然后可以在MATLAB窗口中敲此文件名执行该文件。

函数编写

script编写

4.常用的MATLAB命令归类:

通用命令:

Help在线帮助

Demo例程演示

Path路径设置

Who列出当前变量

What列出当前路径下的.m文件

Clear清除所有变量

Clc清除当前命令窗口命令

Clf清除当前图形

Quit退出MATLAB

运算符:

加法:

+

减法:

乘法:

*

点乘:

.*

指数:

.^

除法:

\

点除:

.\

关系运算符:

小于<大于>小于等于<=大于等于>=等于==不等于~=

基本矩阵

zeros零阵ones1阵

信号运算

abs取模值

angle相角

real实部

imag虚部

conv卷积

fft快速傅立叶变换

ifft快速傅立叶反变换

图形函数

figure生成一图框

axis设置坐标轴

hold保持原图

text在图上标记文字

gtext通过鼠标点击方式在图上标记文字

plot画图

subplot子图

title添加图名

xlabel给X轴增加文本标注

ylabel给Y轴增加文本标注

grid设置网格线

stem离散序列数据杆状图

bar条形图

polar极坐标

实验二离散时间信号分析

实验目的:

通过Matlab实现基本信号的表示和运算。

理解信号的构成和性质。

实验任务:

1.学习使用基本信号在Matlab中的基本表示方法。

2.了解本实验中的扩展函数的结构和组成,实现自己设计的扩展函数的编程:

(1)写一新的卷积函数conv_m,它可求出带下标的序列卷积。

(2)修改给出的evenodd函数,使他能接受任意序列并把它分解成共轭对称分量和共轭反对称分量。

3.掌握复杂信号的表示方法;并对复杂信号进行编程实现。

(1)产生下列序列并绘出离散图:

(a).x(n)=2δ(n+2)-δ(n-4)-5≤n≤5

(b)x(n)=n[u(n)-u(n-10)]+10e-0.3(n-10)[u(n-10)-u(n-2)]0≤n≤20

(c)x(n)=cos(0.04πn)+0.2w(n)0≤n≤50

其中w(n)是均值为零、方差为1的白噪声序列

(d)

(n)=[x1x1x1x1],其中x1=[54321]

(e)已知x(n)=u(n)-u(n-10),要求将它分解成奇偶序列。

(2)用Matlab产生一矩形脉冲串,连续时间为2s,脉冲个数为10,并绘制其波形图。

4.掌握复序列x(n)的实部、虚部、幅值和相位离散图,并编程实现。

产生复信号:

x(n)=e(-0.1+j0.3)n-10≤n≤10

并画出复序列x(n)的实部、虚部、幅值和相位离散图。

一.离散信号

在数字信号处理(DSP)中,所有的信号都是离散(时间)信号,因此首先应解决在MATLAB中如何表示离散信号。

设一模拟信号经A/D变换后,得到序列信号

x(n)={x(n)}={…,x(-1),x(0),x

(1),…}

由于MATLAB对下标的约定为从1开始递增,因此要表示x(n),一般应采用两个矢量,如:

n=[-3,-2,-1,0,1,2,3,4,5]

y=[1,-1,3,2,0,4,5,2,1]

这表示了一个含9个采样点的矢量:

y(n)={x(-3),x(-2),x(-1),x(0),x

(1),…x(5)}。

通常情况下,序列值从x(0)开始,因此一个N点序列x(n)={x(0),x

(1),…,x(N-1)}可简单地表示成

y=[x(0),x

(1),…,x(N-1)]

这时y的下标为1~N。

二.基本信号表示

1.单位取样序列

这一函数可利用MATLAB的zeros函数实现:

x=zeros(1,N);

x

(1)=1

还可以借助于关系操作符实现:

n=1:

N;

x=[n==1];

如要产生

则可采用MATLAB实现:

n=n1:

n2;

x=[(n-n0)==0];

2.单位阶跃序列

这一函数可利用MATLAB的ones函数实现:

x=ones(1,N);

还借助于关系操作符“>=”来实现。

如要产生在n1≤n0≤n2上的单位阶跃序列

则可采用MATLAB实现:

n=n1:

n2;

x=[(n-n0)>=0];

3.实指数序列

x(n)=an

采用MATLAB实现:

n=0:

N-1;

x=a.^n;

4.复指数序列

采用MATBLAB实现:

n=0:

N-1;

x=exp((lu+j*w0)*n);

5.正(余)弦序列

采用MATLAB实现:

n=0:

N-1;

x=cos(w0*n+Q);

6.随机序列

MATLAB中提供了两类(伪)随机信号:

rand(1,N)产生[0,1]上均匀分布的随机矢量;

randn(1,N)产生均值为0,方差为1的高斯随机序列,也就是白噪声序列。

其它分布的随机数可通过上述随机数的变换而产生。

7.周期序列

x(n)=x(n+N)

例如,设x1表示x序列中一个周期的序列,要产生P个周期的x序列,可以把它重复4次,用MALAB实现:

x=[x1,x1,x1,…..,x1];

但是高明的方法是利用MATLAB的强有力的下标能力。

先产生一个包含P行x(n)

值的矩阵,然后用结构(:

)把它的P行串接起来成为一个长行,不过这种结构只能用于列向,所以我们往往还要用矩阵转置把它扩展成行向。

>>xtilde=x1’*ones(1,P);%P列x1

>>xtilde=xtilde(:

);%长的列向量

>>xtilde=xtilde’;%长的行向量

三.序列操作

1.信号加

x(n)={x1(n)+x2(n)}

采用MATLAB实现:

x=x1+x2;

注意:

当x1和x2序列的长度不等或其位置不对应时,信号相加就不是这么简单。

首先应使x1、x2具有相等的长度,然后两者对齐,最后进行相加。

2.信号乘

x(n)={x1(n)*x2(n)}

这是一种样本对样本的相乘,也即点乘运算,在MATLAB中可采用.*(数组乘法)来实现,但两序列x1、x2也应经过处理。

3.改变比例

y(n)=a{x(n)}={ax(n)}

采用MATLAB实现:

y=alpha*x;

4.移位

y(n)={x(n-k)}

5.折叠

y(n)={x(-n)}

它将序列x(n)在n=0处倒转,在MATLAB中可直接用fliplr函数实现。

6.取样和

它不同于信号加。

采用MATLAB实现:

y=sum(x(n1:

n2));

7.取样积

采用MATLAB实现:

y=prod(x(n1:

n2));

8.卷积和

y(n)=x(n)*h(n)=

可直接采用MATLAB中的函数conv,即

y=conv(x,h);

它默认序列从n=0开始。

但如果序列是从一负值开始,即如

{x(n):

nxb≤n≤nxe}

{h(n):

nhb≤n≤nhe}

其中nxb<0或nhb<0,或两者同时为负时,就不能直接采用conv函数。

通过卷积结果序列{y(n):

nyb≤n≤nye}

且nyb=nxb+nhb,nye=nxe+nhe

这样我们就可以构成一新的卷积函数conv_m,它可求出带下标的序列卷积。

9.信号能量

采用MATLAB实现:

Px=sum(abs(x).^2);

Px=sum(x.*conj(x));

10.奇偶综合

任何一个序列x(n)都可分解成偶对称部分xe(n)和奇对称部分x0(n),即

x(n)=xe(n)+x0(n)

其中

xe(n)=

{x(n)+x(-n)}

x0(n)=

{x(n)-x(-n)}

这样我们可以设计一函数evenodd,完成将任一给定序列x(n)分解成xe(n)和x0(n)。

四.MATLAB信号生成函数

1.square()方波发生器。

调用格式为:

square(T)返回一周期为2π的方波,采样时刻由向量T指定。

square(T,DUTY)产生一给定占空比的方波,占空比DUTY是信号为正

值的比例。

2.sawtooth()锯齿波和方波发生器。

调用格式为:

sawtooth(T)返回一周期为2π的锯齿波,采样时刻由向量T指定。

sawtooth(T,WIDTH)产生一三角波,WIDTH指定最大值出现的地方,其取值在0到1之间,1对应2π。

3.diric()周期sinc函数(Dirichlet函数)。

调用格式:

Y=diric(X,N)返回一大小与X相同的矩阵,其元素为Dirichlet函数。

N必须为正整数,该函数将0到2π等间隔分成N等分。

4.pulstran()通过对连续函数或脉冲原型进行采样而得到脉冲序列的发生器

5.rectplus()非周期矩形波发生器

6.tripuls()非周期三角脉冲发生器

五.MATLAB七个基本的扩展函数

1.单位取样序列

impseq.m

function[x,n]=impseq(n0,n1,n2)

%Generatesx(n)=delta(n-n0);n1<=n,n0<-n2

%------------------------------

%[x,n]=impseq(n0,n1,n2)

%

if((n0n2)|(n1>n2))

error(ˊargumentsmustsatisfyn1<=n0<=n2ˊ)

end

n=[n1:

n2];

x=[(n-n0)==0];

2.单位阶跃序列

stepseq.m

function[x,n]=stepseq(n0,n1,n2)

%Generatesx(n)=u(n0);n1<=n0<=n2

%--------------------------

%[x,n]=stepseq(n0,n1,n2)

%

if((n0n2)|(n1>n2))

error(ˊargumentsmustsatisfyn1<=n0<=n2ˊ)

end

n=[n1:

n2];

x=[(n-n0)>=0];

3.信号加

sigadd.m

function[y,n]=sigadd(x1,n1,x2,n2)

%implementsy(n)=x1(n)+x2(n)

%--------------------------------

%[y,n]=sigadd(x1,n1,x2,n2)

%y=sumsequenceovern,whichincludesn1andn2

%x1=firstsequenceovern1

%x2=secondsequenceovern2(n2canbedifferentfromn1)

%

n=min(min(n1),min(n2):

max(max(n1),max(n2)));

y1=zeros(1,length(n));y2=y1;

y1(find((n>=min(n1)&(n

y2(find((n>=min(n2))&(n<=max(n2))==1))=x2;

y=y1+y2

4.信号乘

sigmult.m

function[y,n]=sigmult(x1,n1,x2,n2)

%implementsy(n)=x1(n)*x2(n)

%----------------------------------

%[y,n]=sigmult(x1,n1,x2,n2)

%y=productsequenceovern,whichincludesn1andn2

%x1=firstsequenceovern1

%x2=secondsequenceovern2(n2canbedifferentfromn1)

%

n=min(min(n1),min(n2):

max(max(n1),max(n2)));

y1=zeros(1,length(n));y2=y1;

y1(find((n>=min(n1))&(n<=max(n1))==1))=x1;

y2(find((n>=min(n2))&(n<=max(n2))==1))=x2;

y=y1.*y2

5.移位

sigshift.m

function[y,n]=sigshift(x,m,n0)

%implementsy(n)=x(n-n0)

%----------------------------------

%[y,n]=sigshift(x,m,n0)

%

n=m+n0;y=x;

6.折叠

sigfold.m

function[y,n]=sigfold(x,n)

%implementsy(n)=x(-n)

%---------------------------

%[y,n]=sigsfold(x,n)

%

y=fliplr(x);n=-fliplr(n);

7奇偶综合

evenodd.m

function[xe,xo,m]=evenodd(x,n)

%Realsignaldecompositionintoevenandoddparts

%------------------------------

%[xe,xo,m]=evenodd(x,n)

%

ifany(imag(x)=0)

error(ˊxisnotarealsequenceˊ)

end

m=-fliplr(n);

m1=min([m,n]);m2=max([m,n]);m=m1:

m2;

nm=n

(1)-m

(1);n1=1:

length(n);

x1=zeros(1,length(m));

x1(n1+nm)=x;x=x1;

xe=0.5*(x+fliplr(x));

xo=0.5*(x-fliplr(x));

【例2-1】实验任务3.

(1)产生下列序列并绘出离散图:

x(n)=2δ(n+2)-δ(n-4)-5≤n≤5

解:

利用MATLAB及信号处理工具箱函数,再加上前面构造的几个函数如sigadd,sigmult等,可很容易编写出可直接执行的MATLAB程序ex31.m:

%Example3.1

%a)x(n)=2*delta(n+2)-delta(n-4),-5<=n<=5

%figure

(1);clf

n=[-5:

5];

x=2*impseq(-2,-5,5)-impseq(4,-5,5);

subplot(2,2,1);stem(n,x);title(′SequenceinExample3.1a′);

【例2-2】设线性时不变(LTI)系统的单位冲激响应为

h(n)=(0.9)nu(n)

输入序列为

x(n)=u(n)-u(n-10)

求系统输出y(n)。

解:

系统输出y(n)为输入x(n)与系统单位冲激响应h(n)的卷积,可直接采用conv-m函数求出输出序列。

MATLAB程序为ex22.m:

%Example2-2

%x(n)=[u(n)-u(n-10)];h(n)=(0.9)^n*u(n)n=0:

04

%y(n)=conv(x,h)

%

n=-5:

50;

u1=stepseq(0,-5,50);u2=stepseq(10,-5,50);

%inputx(n)

x=u1-u2;

%impulseresponseh(n)

h=((0.9).^n).*u1;

figure

(1)

subplot(3,1,1);stem(n,x);axis([-5,50,0,2])

title(′InputSequence′)

ylabel(′x(n)′)

subplot(3,1,2);stem(n,h);axis([-5,50,0,2])

ylabel(′h(n)′)

%outputresponse

[y,ny]=conv_m(x,n,h,n);

subplot(3,1,3);stem(ny,y);axis([-5,50,0,8])

gtext(′ImpulseResponse′)

xlabel(′n′),ylabel(′y(n)′)

执行结果分析所得的序列的离散图.

实验报告要求

1.实验报告包括目的、要求、内容、步骤、结果、总结,形成完整实验报告。

实验步骤不是书本内容的复制,而是自己结合实验内容进行探索的过程。

2.提交打印版实验报告,A4纸张打印,并附源程序清单。

3.提交的报告和源程序中标注清楚姓名学号专业等基本信息,禁止抄袭。

 

实验三离散系统分析

实验目的:

通过用Matlab实现信号的分析和表示方法,掌握离散系统的分析方法。

实验任务:

1.了解系统的Matlab描述和转换

2.掌握分析线性时不变系统的方法,并编程实现。

给定系统H(z)=-0.2z/(z2+0.8),

(1)求出H(z)的幅频响应和相频响应;

(2)绘制极零点图;

(3)求出并绘出该系统的单位抽样响应;

(4)令x(n)=u(n),求出并绘出系统的单位阶跃响应y(n)。

MATLAB系统的描述和转换

MATLAB的信号处理工具提供了几种线性时不变系统的模型,我们可以灵活的选择合适的模型以满足不同应用场合的需要。

信号处理工具箱提供的离散时间系统模型常用于数字滤波器,这些模型包括传递函数、零极点增益形式、状态空间形式、部分分式、二阶级联形式、格状结构和卷积矩阵等。

1.传递函数形式

在MATLAB信号处理工具箱中,数字滤波器的传递函数具有以下形式:

这种形式称为DSP(DigitalSignalProcessing),它和控制工具箱的z传递函数模型形式不同。

这一模型用z传递函数分子和分母多项式的系数构成两个向量来确定,即

num=[b

(1)b

(2)…b(nb+1)]

den=[a

(1)a

(2)…a(na+1)]

式中nb和na分别为分子num和den的阶数

在MATLAB中,要定义一个DSP形式的传递函数可利用FILT。

调用格式:

sys=filt(num,den)

sys=filt(num,den,Ts)

2.零极点增益形式

在MATLAB信号处理工具箱中,离散时间系统(数字滤波器)的零极点形式具有以下形式:

这一模型用零点向量和极点向量及增益来表示,即

q(z)=[q

(1),q

(2),…,q(n)]

p(z)=[p

(1),p

(2),…,p(n)]

MATLAB函数poly和roots可实现传递函数形式和零极点增益形式的转换。

3.状态空间形式

离散系统的状态空间表达式为:

x(n+1)=Ax(n)+Bu(n)

y(n)=Cx(n)+Du(n)

式中,u为输入,y为输出,x为状态向量。

在MATLAB信号处理工具箱中,用矩阵A、B、C、D表示数字滤波器模型(和控制工具箱一样)

MATLAB信号处理工具箱还提供传递函数、零极点和状态空间三种模型之间的相互转换函数,它们是zp2ft

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 党团工作 > 入党转正申请

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1