《数字信号处理》实验指导书
编 写: 张大鹏
适用专业:电子信息工程
专 业: 电子信息工程
姓 名: 江凯伦
学 号: 198840009
指导教师: 张大鹏
完成日期: 2017年 12月 3日
信息与电气工程学院
目 录
概述 3
实验一 Matlab基本操作 7
实验二 序列 11
实验三 Z变换 18
实验四 FFT 21
概述
Matlab是一种功能强大的工具软件,在数字信号处理领域有着广泛的应用,因此数字信号处理课程的实验主要是在Matlab环境下进行的。
MATLAB语言是一种广泛应用于工程计算及数值分析领域的新型高级语言,自1984年由美国 MathWorks 公司推向市场以来,历经十多年的发展与竞争,现已成为国际公认的最优秀的工程应用开发环境。MATLAB功能强大、简单易学、编程效率高,深受广大科技工作者的欢迎。
MATLAB特点:
1. 数值计算和符号计算功能
MATLAB的数值计算功能包括:矩阵运算、多项式和有理分式运算、数据统计分析、数值积分、优化处理等。符号计算将得到问题的解析解。
2.MATLAB语言
MATLAB除了命令行的交互式操作以外,还可以程序方式工作。使用MATLAB可以很容易地实现C或FORTRAN语言的几乎全部功能,包括Windows图形用户界面的设计。
3.图形功能
MATLAB提供了两个层次的图形命令:一种是对图形句柄进行的低级图形命令,另一种是建立在低级图形命令之上的高级图形命令。利用MATLAB的高级图形命令可以轻而易举地绘制二维、三维乃至四维图形,并可进行图形和坐标的标识、视角和光照设计、色彩精细控制等等。
4.应用工具箱
基本部分和各种可选的工具箱。
基本部分中有数百个内部函数。
其工具箱分为两大类:功能性工具箱和学科性工具箱。功能性工具箱主要用来扩充其符号计算功能、可视建模仿真功能及文字处理功能等。学科性工具箱专业性比较强,如控制系统工具箱、信号处理工具箱、神经网络工具箱、最优化工具箱、金融工具箱等,用户可以直接利用这些工具箱进行相关领域的科学研究。 MATLAB集成环境
MATLAB 7.X是一个高度集成的语言环境,在该环境下既可以进行交互式的操作,又可以编写程序、运行程序并跟踪调试程序。
1. MATLAB的启动
启动MATLAB有两种常见方法:
(1)通过“开始”按钮,选择“程序”菜单项,然后打开“MATLAB”菜单中的“MATLAB”程序,就可启动MATLAB系统
(2) 利用Windows 建立快捷方式的功能,将MATLAB程序以快捷方式放在桌面上。只要在桌面上双击该图标即可启动MATLAB
2. MATLAB命令窗口
(1) 命令窗口的菜单栏
菜单栏共包含File、Edit、Window和Help四项。
File菜单项:
New命令:用于建立M文件、图形窗口。
Open命令:打开一个已经建立的M文件。
Run Script命令:执行一个命令文件。
Load Workspace命令:将变量装入当前空间。
Save Workspace As命令:把当前工作空间的所有变量用后缀为.mat的文件保存起来。
Show Workspace命令:打开变量浏览器。
Set Path命令:打开MATLAB的路径浏览器。
Preferences命令:打开命令窗口的显示格式。
Print Setup命令:设置打印机的参数。
Print命令:打印和设置一些打印参数。
Print Selection命令:打印选中的内容。
Exit MATLAB命令:退出MATLAB系统。
Edit菜单项:
Undo、Cut、Copy和Paste等命令:分别用于撤销上一次操作、剪切、复制和粘贴。
Clear命令:删除内容。
Select All命令:用于选定所有文本内容。
Clear Session命令:清除命令编辑区的全部内容,但并不删除工作空间中的变量。
Help菜单项:
Help Window命令:打开MATLAB的帮助窗口。
Help Tips命令:打开帮助窗口,并首先显示MATLAB的帮助系统的分类和使用方法。
Help Desk(HTML)命令:打开系统WWW浏览器,并显示MATLAB的帮助桌面。 Examples and Demos命令:可以通过演示MATLAB提供的例子来熟悉相关部分的用法。
About MATLAB命令:打开关于MATLAB的版本和版权等信息。
Subsribe命令:打开机器上的WWW浏览器,用户可过填写相关的表格来获得MathWorks公司的产品。
MATLAB运算量
1.变量和赋值语句
MATLAB赋值语句有两种形式:
(1) 变量=表达式
(2) 表达式
其中“表达式”是用运算符将有关运算量连接起来的式子,其结果是一个矩阵。[注] 第二种语句形式下,将表达式的值赋给MATLAB的永久变量ans。如果在语句的最后加分号,那么,MATLAB仅仅执行赋值操作,不再显示运算的结果。在一条语句中,如果表达式太复杂,一行写不下,可以加上三个小黑点(续行符)并按下回车键,然后接下去再写。例如 s=1-1/2+1/3-1/4+1/5-1/6+1/7-…- 1/8+1/9-1/10+1/11-1/12。
2.MATLAB表达式
算术表达式。
运算符有:+(加)、-(减)、*(乘)、/(右除)、\(左除)、^(乘方)
对于矩阵来说,左除和右除表示两种不同的除数矩阵和被除数矩阵的关系。关系表达式。
运算符有:<(小于)、<=(小于或等于)、>(大于)、>=(大于或等于)、==(等于)、~=(不等于)
逻辑表达式。
运算符有:&(与)、|(或)和~(非)
运算法则:
(1)在逻辑运算中,确认非零元素为真,用1表示,零元素为假,用0表示。
(2)参与逻辑运算的可以是两个标量、两个同维矩阵或参与逻辑运算的元素一个为标量,另一个为矩阵。
(3)在算术、关系、逻辑运算中,算术运算优先级最高,逻辑运算优先级最低。
实验1 Matlab基本操作
1. 实验目的
初步掌握Matlab中的矩阵生成方法和绘图方法。
2. 实验内容和步骤
(1) 矩阵的生成与察看
在工作区键入以下命令
>>x=[1 2 3 4;1 2 3 4;1 2 3 4;1 2 3 4];
可以看到工作区的变量窗口出现了x,双击察看可以看到这是一个4x4的矩阵。
>>x=[1 2 3 4;1 2 3 4;1 2 3 4;1 2 3 4]
可以在工作区看到x的内容
x =
1 2 3 4
1 2 3 4
1 2 3 4
1 2 3 4
当键入以下命令的的时候
>> x([2,3],:)
>> x(:,[1,2])
将会出现指定行或列的信息。
请自己输入一个4x4可逆矩阵,并且用inv()函数来求解逆阵,最后将逆阵第2,3列的信息显示出来。
(2) 帮助的获取
Matlab的帮助功能非常强大,虽然其内容都是英文,只要使用者有一定的英文阅读能力,获取信息的可能性还是很大的。
实验的第3部分内容是画图,在画图之前键入
>>help plot
察看其基本用法。
(3) 画图命令
首先生成一个一维矩阵x
>> x = 0:0.01:10
然后产生一个一维矩阵y
>>y = sin(x)
画出相应的图形。生成z=cos(x)矩阵,并把两个函数画在一张图上。
3.实验结果
4. 实验分析
MATLAB具有强大的画图功能,可以将各种信号表示出来
5.思考题
Matlab是否对大小写敏感,请举例说明。
敏感
实验2 序列
1. 实验目的 掌握Matlab中基本信号的生成方法和序列的运算方法
2. 实验内容和步骤
(1) 实际应用中,常把一个列向量作为一路信号,先构造一个行向量
>> x=[4 3 7 -9 1]
然后转置
>> x=x'
利用转置后的x生成一个三通道信号
>>y=[x 2*x x/pi]
(2) 许多不同的工具箱都可以产生信号波形,其中大部分都要求时间向量作为参数,如果以1000Hz抽样频率产生的波形,适宜的时间向量如下
>>t=(0:0.001:1)'
(3) 基本序列生成
δ(n) :
>> n=1;
>> x=[1 zeros(1,n-1)]
u(n) :
>>n= 一个指定长度(计算机无法处理无穷的数据)
>>x=ones(1,N)
anu(n) :
>>n= 一个指定长度(计算机无法处理无穷的数据)
>> b=[0:n-1]
>> x=a.^b
exp((σ+jω)*n):
>> u=1
>> w=2
>> x=exp((u+j*w)*b)
(4) 基本周期波形
方波:
正弦波:
锯齿波:
(5) sinc波形
(6) 序列的运算
信号加
>>x=x1+x2
信号乘
>>x=x1.*x2
比例
>>y=k*x
折叠
>>y=fliplr(x)
抽样和
>>y=sum(x(n1:n2))
抽样积
>>y=prod(x(n1:n2))
信号能量
>>Ex=sum(abs(x).^2)
信号功率
>>Px=(sum(abs(x).^2)/n
3. 实验结果
4.思考题
>>t=(0:0.001:1)’;
>>x1=sin(2*pi*50*t)+2*sin(2*pi*120*t);
>>x=x1+0.5*randn(size(t));
(1) 求x(1)~x(50)的抽样和抽样积。
(2) 求x的能量和功率。
(3) 把结果用图形表示出来。
实验3 Z变换
1. 实验目的:掌握使用Matlab处理Z变换、Z反变换的方法。
2. 实验原理
z变换定义
利用差分方程可求离散系统的结构及瞬态解。为了分析系统的另外一些重要特性,如稳定性和频率响应等,需要研究离散时间系统的z变换(类似于模拟系统的拉氏变换),它是分析离散系统和离散信号的重要工具。
一个离散序列x(n)的Z变换定义为
其中z为复变量,是一个以实部为横坐标,虚部为纵坐标构成的平面上的变量,这个平面也称z平面。
常用Z[x(n)]表示对序列x(n)的z变换,即
这种变换也称为双边z变换,与此相应还有单边z变换,单边z变换只是对单边序列(n>=0部分)进行变换的z变换,其定义为
可以把单边z变换看成是双边z变换的一种特例,即因果序列情况下的双边z变换。
Z变换收敛域
一般,序列的Z变换并不一定对任何z值都收敛,z平面上使上述级数收敛的区域称为“收敛域”。我们知道,级数一致收敛的条件是绝对值可和,因此z平面的收敛域应满足
因为对于实数序列, ,因此,|z|值在一定范围内才能满足绝对可和条件,这个范围一般表示为
Rx-〈|z|〈Rx+
这就是收敛域,一个以Rx-和Rx+为半径的两个圆所围成的环形区域,Rx-和Rx+称为收敛半径,Rx-和Rx+的大小,即收敛域的位置与具体序列有关,特殊情况为Rx-或Rx+等于0,这时圆环变成圆或空心圆。
Z变换收敛域的特点:
· 收敛域是一个圆环,有时可向内收缩导原点,有时可向外扩展到∞,只有x(n)=δ(n)的收敛域是整个z平面;
· 在收敛域内没有极点,x(z)在收敛域内每一点上都是解析函数。
Z变换表示法:
· 级数形式;
· 解析表达式(注意只表示收敛域上的函数,同时要注明收敛域)。
3. 实验内容和步骤
(1) 已知一个Z变换的表达式
请使用residuez函数来计算反变换后的序列。
(2) 已知一个因果线性移不变系统
y(n) = 0.81y(n-2) + x(n) – x(n-2) 求
a.H(z)
提示:直接笔算即可
在Matlab中,一个分式可以以下形式表示:
H(z) =B(z)/A(z)
对于已知条件B(z)=1 – z^-2 , A(z)=1 – 0.81z^-2。
在Matlab中将B按照z^-1的升幂表示成向量形式为[1 0 -1 ],同理A表示成[1 0 -0.81]。
b.冲击响应
提示: 对于数字系统的冲击响应,可使用函数dimpulse。
为与后面的阶跃响应呼应,可把二者画在一幅图上,可使用函数subplot。
c.阶跃响应
提示: 对于数字系统的阶跃响应,可使用函数dimpulse。
d.H(ejw) 的幅频相频曲线
提示:可使用函数freqz,时间向量按照下式设定:
t=[0:1:500]*pi/500;
(3) 解差分方程
y(n) = 1/3[x(n) + x(n-1) + x(n-2)] + 0.95y(n-1) – 0.9025y(n-2) n>=0
其中 x(n) = cos(pi*n/3),y(-1) = -2,y(-2) = -3,x(-1) = 1,x(-2) = 1。程序如下:
b=[1,1,1]/3;
a=[1,-0.95,0.9025];
Y=[-2,-3];
X=[1,1];
xic=filtic(b,a,Y,X);
bxplus=[1,-0.5];
axplus=[1,-1,1];
ayplus=conv(a,axplus);
byplus=conv(b,bxplus) + conv(xic,axplus)
[R,p,C]=residuez(byplus,zxplus);
Mp=abs(p),A(p)=angle(p)/pi
n=[0:50];
x=cos(pi*n/3);
y=filter(b,a,x,xic);
plot(n,y)
请详细分析程序,在每行加上注解。
4. 实验结果
Z变换
Z反变换
实验4 FFT
1. 实验目的
掌握在Matlab下进行付立叶变换的方法。
2.实验原理
(一)基—2按时间抽取FFT算法
对于有限长离散数字信号{x[n]},0 £ n £ N-1,其离散谱{x[k]}可以由离散付氏变换(DFT)求得。DFT的定义为
可以方便的把它改写为如下形式:
不难看出,WN是周期性的,且周期为N,即
WN的周期性是DFT的关键性质之一。为了强调起见,常用表达式WN取代W以便明确其周期是N。
由DFT的定义可以看出,在x[n]为复数序列的情况下,完全直接运算N点DFT需要(N-1)2次复数乘法和N(N-1)次加法。因此,对于一些相当大的N值(如1024)来说,直接计算它的DFT所作的计算量是很大的。FFT的基本思想在于,将原有的N点序列序列分成两个较短的序列,这些序列的DFT可以很简单的组合起来得到原序列的DFT。例如,若N为偶数,将原有的N点序列分成两个(N/2)点序列,那么计算N点DFT将只需要约[(N/2)2 ·2]=N2/2次复数乘法。即比直接计算少作一半乘法。因子(N/2)2表示直接计算(N/2)点DFT所需要的乘法次数,而乘数2代表必须完成两个DFT。上述处理方法可以反复使用,即(N/2)点的DFT计算也可以化成两个(N/4)点的DFT(假定N/2为偶数),从而又少作一半的乘法。这样一级一级的划分下去一直到最后就划分成两点的FFT运算的情况。比如,一个N = 8点的FFT运算按照这种方法来计算FFT可以用下面的流程图来表示:
关于蝶形结运算的具体原理及其推导可以参照讲义,在此就不再赘述。按频率抽取的FFT的原理也可查阅相关资料,这里就不再推导了
3.实验内容和步骤
(1) 设定一信号并计算它的FFT变换
>> t = (0:1/99:1);
>>x = sin(2*pi*15*t) + sin(2*pi*40*t);
>>y = fft(x);
>>m=abs(y);
>>p=unwrap(angle(y));
>>f=(0:length(y)-1) * 99/length(y);
>>subplot(1,2,1);
>>plot(f,m);
>>set(gca,’XTick’,[15 40 60 85]);
>>subplot(1,2,2);
>>plot(f, p*180/pi);
>>set(gca,’XTick’,[15 40 60 85]);
(2) x(t) = 2sin(4πt) + 5cos(8πt),求x(t)的N点幅度谱和相位谱
(3) 比较原序列和经过FFT和IFFT后的序列。
4.实验结果
5.实验分析
在图1中明显能看到整个频谱图关于Nyquist频率对称,不过Nyquist频率右边的谱图实际上是负频部分,没有意义,从中看到,该信号包含两个频率15Hz和40Hz。由于使用的采样频率fs=100Hz,所以Nyquist频率为50Hz。
|