找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 3373|回复: 0
打印 上一主题 下一主题
收起左侧

《数字信号处理》Matlab实验指导书

[复制链接]
跳转到指定楼层
楼主
ID:264237 发表于 2017-12-20 14:21 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
《数字信号处理》实验指导书
编    写: 张大鹏
适用专业:电子信息工程

专    业:      电子信息工程           
姓    名:      江凯伦           
学    号:       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。
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏2 分享淘帖 顶 踩
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|51黑电子论坛 |51黑电子论坛6群 QQ 管理员QQ:125739409;技术交流QQ群281945664

Powered by 单片机教程网

快速回复 返回顶部 返回列表