资源描述
数字信号处理MATLAB实验
———————————————————————————————— 作者:
———————————————————————————————— 日期:
2
个人收集整理 勿做商业用途
物理与电子科学学院
《数字信号处理》实验指导书
-———MATLAB实验
赵发勇 编
二零一零年九月三十日
目录
目录 2
MATLAB简介 3
一、MATLAB初步 3
1. MATLAB的主要功能 3
2.启动MATLAB及界面简介 3
3。 MATLAB的常用命令 4
4.基本运算 5
5.退出 6
二、变量与函数、语句、矩阵及其运算 6
1.变量与函数 6
2.语句与M文件 6
3.矩阵及其运算 7
三、MATLAB 支持的数据结构 8
四、MATLAB绘图 9
1、绘制二维图形 9
2、绘制三维图形 10
五、MATLAB编程 11
1、关系运算和逻辑运算 11
2、控制语句 11
3、函数编写方法与应用 13
《数字信号处理》的MATLAB实验 14
实验一 MATLAB基础入门练习 14
实验二 离散时间信号分析 16
实验三 离散时间系统及响应 18
实验四 离散傅立叶变换及性质 20
实验五 用FFT和CZT对信号进行频谱分析 21
实验六 IIR数字滤波器设计与信号滤波 24
实验七 用窗函数法设计FIR滤波器 27
实验报告格式 30
MATLAB简介
MATLAB是MATrix LABoratory的缩写。由MathWorks 公司于1984年推出,1993 年推出了其微机版, 在Windows环境下使用。其最初由美国的Cleve Moler博士所研制,目的是为线性代数等课程中的矩阵运算提供一种方便可行的实验手段。经过十几年的市场竞争和发展,MATLAB已发展成为在自动控制、生物医学工程、信号分析处理、语言处理、图像信号处理、雷达工程、统计分析、计算机技术、金融界和数学界等各行各业中都有极其广泛应用的软件,同时也成为理工科学生必须掌握的一项基本技能。
为了帮助学生熟悉MATLAB,进行数字信号处理,本节把MATLAB介绍给大家。
一、MATLAB初步
1。 MATLAB的主要功能
(1).数值计算计算
MATLAB以矩阵作(或数组)为数据操作的基本单位,提供了十分丰富的数值计算函数,是进行数值分析的高效软件包。
(2).编程语言
MATLAB与其它高级语言一样,有编程功能,具有程序结构控制、函数调用、数据结构、输入输出、面向对象等程序语言特征,而且简单易学、编程效率高。
(3)。MATLAB工具箱
MATLAB包含两部分内容:基本部分和各种可选的工具箱。
(4).绘图功能
MATLAB提供了两个层次的绘图操作:一种是对图形句柄进行的低层绘图操作,另一种是建立在低层绘图操作之上的高层绘图操作。
温馨提示:绘图功能在我们学习数字信号处理过程中的主要作用是帮助大家直观了解处理的结果,在实际信号处理中,可能用的不多。
2.启动MATLAB及界面简介
点击桌面上MATLAB图标,可进入到MATLAB命令窗(MATLAB Command Window),其命令提示符为〉〉。用户可在命令窗内输入命令、编程、进行计算.
MATLAB 6.5环境包括MATLAB主窗口、命令窗口(Command Window)、工作空间窗口(Workspace)、命令历史窗口(Command History)、当前目录窗口(Current Directory)、图形窗口(Figure)和文本编辑窗口(Editor)等组成。观看其默认窗口分布情况可以如下操作:
Desktop——-desktop layout--defaut
(1).主窗口
MATLAB主窗口是MATLAB的主要工作界面。主窗口除了嵌入一些子窗(Command Window、Workspace、Command History、Current Directory)外,还主要包括菜单栏和工具栏。菜单栏,共包含File、Edit、View、Web、Window和Help 6个菜单项,与其它Windows应用软件相似,大家可以自己点击观看。工具栏, MATLAB 6.5主窗口的工具栏共提供了10个命令按钮。这些命令按钮均有对应的菜单命令,但比菜单命令使用起来更快捷、方便.下面重点介绍一下命令窗口(Command Window)。
命令窗口
命令窗口是MATLAB的主要交互窗口,用于输入命令并显示除图形以外的所有执行结果。MATLAB命令窗口中的“>>”为命令提示符,表示MATLAB正在处于准备状态.在命令提示符后键入命令并按下回车键后,MATLAB就会解释执行所输入的命令,并在命令后面给出计算结果。例如
>>x=10;y=15;
〉〉z=x+y
z=15
说明:①语句后输入分号表示不在主窗口显示结果,但可以从变量窗口看到;
②如果一个命令行很长,或编程时一个语句很长,需要用两行来书写,可以在第一个物理行之后加上3个小黑点并按下回车键,然后接着下一个行继续写命令的其他部分.3个小黑点称为续行符,即把下面的物理行看作该行的逻辑继续。
温馨提示:命令窗口是MATLAB与用户之间的主要交互式运算窗口.
3。 MATLAB的常用命令
(1).help命令 在命令窗内输入help命令,再敲回车键,在屏幕上出现了在线帮助总览。(注意:MATLAB命令被输入后,必需敲回车键才能执行。为行文方便,以后不再每次提醒“敲回车键")学会使用help命令,是学习MATLAB的有效方法。
如果要了解相关函数的使用方法及参数意义可输入
>〉help xcorr
(2).demo命令 在命令窗内输入demo命令,再敲回车,键屏幕上将出现演示窗口.(MATLAB Demo Window)一共有三个窗口,左边的窗口显示欲演示内容的大标题,选定其中一项,右下方的小窗口显示欲演示的具体内容,选中其中一栏,再点击run按扭,屏幕上将演示选定的演示程序。右上方的窗口显示关于大标题的一些说明。
(3).Type命令 在命令窗内输入type 文件名,则MATLAB将在主窗口显示程序的M文件内容,帮助大家了解M文件编程方法,通过对其语句的分析,不仅可以提高理论认识,也是学习MATLAB的函数(function)编写方法有效途径。
〉〉type xcorr
(4).其它常用的命令与函数
Addpath:增加MATLAB的工作目录。MATLAB通常只能对其工作路径下的文件运行,如果你的文件不在其默认的目录下,可以通过addpath命令来添加你的目录,例
>>path
结果显示当前的所有默认目录。
〉〉addpath c:\
结果将C盘根目录作为一个默认目录,即在C盘根目录下文件均可以直接在MATLAB下执行。
clear :清除内存空间变量.
whos 变量名:查看此变量的具体情况.如
>>whos x
Name Size Bytes Class
x 1x2 16 double array
Grand total is 2 elements using 16 bytes
clc:清屏命令,清除当前主窗口内所有显示。
dir:查看当前目录。
length():计算向量的长度。如
〉〉ength(x)
ans =
2
size():计算矩阵或数组的维数。例
〉〉size(y)
ans =
3 6
温馨提示:这些命令和函数是大家学习MATLAB时用的最多的,因此需要大家审记。
4.基本运算
在MATLAB本身是为了进行数值计算而创出的,因此其数值计算功能非常强,且是其重要的功能之一.计算方法非常简单,其进行基本数学运算,只需将运算式直接打入提示号(>>)之后,并按入Enter键即可.例如计算(5*2+1。3—0。8)*10/25的值:
用键盘在MATLAB指令窗中输入以下内容
>> (5*2+1。3—0。8)*10/25
在上述表达式输入完成后,按【Enter】键,该就指令被执行。在指令执行后,MATLAB指令窗中将显示以下结果。
ans =
4.2000
MATLAB会将运算结果直接存入一变量ans,代表MATLAB运算后的答案 (Answer),并显示其数值于屏幕上。
由上例可知,MATLAB认识所有一般常用到的加(+)、减(-)、乘(*)、除(/)的数学运算符号,以及幂次运算 (^).
我们也可将上述运算式的结果设定给另一个变数x如下:
〉〉 x = (5*2+1.3-0。8)*10^2/25
x =
42
此时MATLAB会直接显示x的值。
MATLAB基本算术运算符
符号
符号用途说明
+
加 此符号与以下五行符号详细说明可使用help arith
-
减
。*
数组乘法
*
矩阵相乘
^
矩阵求幂
.^
点幂
\
左除 此符号与以下三行符号详细说明可使用help slash
/
右除
。\
点左除
./
点右除
温馨提示:由于MATLAB没有中文版,因此其自带的帮助均为英文,因此,希望大家不要有惧怕心理,应该当作帮助大家又提高了英语,一举两得!!
5.退出
在工具栏中点击File按钮,在下拉式菜单中单击Exit MATLAB项即可。
二、变量与函数、语句、矩阵及其运算
1.变量与函数
在MATLAB中变量由字母、数和下划线组成,第一个字符必须是字母。一个变量最多由63个字符组成,并区分大小写。下面是MATLAB中表示特殊量的字符:
特殊变量
取 值
ans
用于结果的缺省变量名
pi
圆周率
eps
计算机的最小数,当和1相加就产生一个比1大的数
flops
浮点运算数
inf
无穷大,如1/0
NaN
不定量,如0/0
i,j
虚数单位i=j=,在程序中可以用作其它用途。
nargin
所用函数的输入变量数目
nargout
所用函数的输出变量数目
realmin
最小可用正实数
realmax
最大可用正实数
MATLAB提供了大量的函数.可以通过help function查询。下面列出部分基本数学函数:
函数
名 称
函数
名 称
sin(x)
正弦函数
asin(x)
反正弦函数
cos(x)
余弦函数
acos(x)
反余弦函数
tan(x)
正切函数
atan(x)
反正切函数
abs(x)
绝对值或复数模
max(x)
最大值
min(x)
最小值
sum(x)
元素的总和
sqrt(x)
开平方
exp(x)
以e为底的指数
log(x)
自然对数
以10为底的对数
sign(x)
符号函数
fix(x)
取整
imag(x)
复数的虚部
real(x)
复数的实部
conj(x)
共轭复数
angle(x)
复数x的幅角
2.语句与M文件
MATLAB语句的一般形式为:变量=表达式。当某一语句的输入完成后,按回车键,计算机就执行该命令。如果该语句末没输入其它符号或输入了逗号,将显示结果;如果句末输入了分号,将不显示结果。如果语句中省略了变量和等号,那么计算机将结果赋值给变量ans(结果的缺省变量)。
MATLAB的内部函数是有限的,有时为了研究某一个函数的各种性态,需要为MATLAB定义新函数,为此必须编写函数文件。 函数文件是文件名后缀为M的文件,这类文件的第一行必须是一特殊字符function开始,格式为:
function [因变量名]=函数名(自变量名)
函数值的获得必须通过具体的运算实现,并赋给因变量.
M文件建立方法:
1). 在Matlab中,点:File->New-〉M-file;
2). 在编辑窗口中输入程序内容;
3)。 点:File-〉Save,存盘,M文件名必须与函数名一致,M文件的文件名首字不能为数字。
Matlab的应用程序也以M文件保存,称为脚本文件(直接使用MATLAB中语句编写的M文件)。即M文件包括脚本文件和函数两种。
4).在MATLAB中,为了说明语句的功能使用的注释句用%开头。
3.矩阵及其运算
MATLAB中矩阵A的输入方法如下:
A=[a11,…,a1n;…;am1,…,amn]。其中逗号(或用空格)是数之间的分隔符,‘;’分号(或Enter)是换行符,输入矩阵时严格要求所有行有相同列,即符合矩阵的形式。
①、a=0:0.1:1可产生个向量,即元素为0,0。1,0。2…1.B=[2,2,2;3,5,6]或b=[2 2 2;3 5 6]是一样的。
②、一些特殊矩阵的产生方法:linspace(x,y,n),魔方矩阵magic(x),单位矩阵eye(x),随机函数rand(x),零矩阵zeros(x,y),1矩阵ones(x,y)等等。
温馨提示:冒号在MATLAB中的用法很灵活,一定要多试,多用。例如有一个矩阵X为3行3列的魔方矩阵,通过观看粗体来体会其用法。
>>X=magic(3)
X =
8 1 6
3 5 7
4 9 2
>> X(2,:)
ans =
3 5 7
>> X(2,:)=[1 2 3]
X =
8 1 6
1 2 3
4 9 2
1) 关于矩阵的运算的一些基本指令:
运算命令
功能
共轭转置
矩阵相加减
数乘矩阵,是一个数值
求逆运算
矩阵的次幂
矩阵的行列式值
矩阵的分解
矩阵的解
矩阵的秩
为的特征向量,为特征值
求的特征多项式
返回的大小
2) 矩阵中元素或块的常用操作,其中表示一个矩阵。
表达式
功能
中第行第列元素
中第行构成的行向量
中第列构成的列向量
对按列看作一个列向量
表示列向量中第个元素
3)MATLAB中的数学函数有一个共同的特点:若自变量X为一个矩阵,则函数值也为X的同阶矩阵,即对每一个元素分别求函数值。
即对于
经过函数f作用后得:
比如
>〉 K=[0,0.25,0.5,0。75]
K =
0 0。2500 0。5000 0。7500
>〉 sin(2*pi*K)
ans =
0 1。0000 0。0000 —1。0000
相信同学们已经明白,这也是我们经常使用的产生各种抽样信号的方法。
三、MATLAB 支持的数据结构
(1) 矩阵:略
(2) 多维数组
多维数组是 MATLAB 在其 5。0 版本开始提供的.假设有 2 个 3x3 矩阵 A1, A2,则可以由下面的命令建立起一个 3x3x2 的数组:A=cat(3,A1,A2)。试验 A1=cat(2,A1,A2) 和 A2=cat(1,A1A2) 将得到什么结果。
对矩阵或多维数组 A 可以使用 size(A) 来测其大小,也可以使用 reshape() 函数重新按列排列.对向量来说,还可以用 length(A) 来测其长度。
不论原数组 A 是多少维的,A(:) 将返回列向量.
(3) 字符串与字符串矩阵
MATLAB 的字符串是由单引号括起来的。如可以使用下面的命令赋值
>〉 strA='This is a string。'
(4) 单元数据结构
用类似矩阵的记号将给复杂的数据结构纳入一个变量之下.和矩阵中的圆括号表示下标类似,单元数组由大括号表示下标.
>〉 B={1,'Alan Shearer’,180,[100, 80, 75; 77, 60, 92; 67, 28, 90; 100, 89, 78]}
B =
[1] ’Alan Shearer' [180] [4x3 double]
访问单元数组应该由大括号进行,如第 4 单元中的元素可以由下面的语句得出
>> B{4}
四、MATLAB绘图
1、绘制二维图形
(1)、曲线图
绘制二维图形的基本命令是plot(X,Y,S)。其中X,Y是向量,分别表示点集的横坐标和纵坐标,S指线型、颜色。 plot(X,Y)— 画实线,plot(X,Y1,S1,X,Y2,S2,……,X,Yn,Sn)—将多条线画在一起. 以上三种格式中的x、y都可以是表达式,但表达式的运算结果必须符合上述格式要求.MATLAB的图形功能还提供了颜色和线型的控制符,如下表:
控制符
线型或标记
控制符
颜色
控制符
标记
—
实 线
g
绿 色
.
点
:
点 线
m
品红色
o
圆 圈
—.
点画 线
b
蓝 色
x
叉 号
— —
虚 线
c
青 色
+
加 号
h
六角形
w
白 色
*
星 号
v
倒三角
r
红 色
s
正方形
^
正三角
k
黑 色
d
菱 形
〉
左三角
y
黄 色
p
五角星
<
右三角
MATLAB提供的特殊二维图形函数如下表
(2)、符号函数(显函数、隐函数和参数方程)画图
符号函数画图可以通过函数ezplot或fplot来实现.
函数ezplot调用格式:
ezplot(‘f(x)’,[a,b]) 表示在a〈x〈b绘制显函数f=f(x)的函数图;
ezplot(‘f(X,Y)’,[Xmin,Xmax,Ymin,Ymax])表示在区间Xmin<X<Xmax和 Ymin〈Y<Ymax绘制隐函数f(x,y)=0的函数图;
ezplot(‘x(T)’,’y(T)’,[Tmin,Tmax]) 表示在区间Tmin<T〈Tmax绘制参数方程x=x(T),y=y(T)的函数图。
函数fplot调用格式:
fplot(‘fun',lims) 表示绘制字符串fun指定的函数在lims=[Xmin,Xmax]的图形。
注意:
[1] fun必须是M文件的函数名或是独立变量为x的字符串。
[2] fplot函数不能画参数方程和隐函数图形,但在一个图上可以画多个图形。
(3). 对数坐标图
在很多工程问题中,通过对数据进行对数转换可以更清晰地看出数据的某些特征,在对数坐标系中描绘数据点的曲线,可以直接地表现对数转换.对数转换有双对数坐标转换和单轴对数坐标转换两种。用loglog函数可以实现双对数坐标转换,用semilogx和semilogy函数可以实现单轴对数坐标转换.
loglog(Y) 表示 x、y坐标都是对数坐标系;
semilogx(Y) 表示 x坐标轴是对数坐标系;
semilogy(…) 表示y坐标轴是对数坐标系;
plotyy 有两个y坐标轴,一个在左边,一个在右边。
2、绘制三维图形
(1)、空间曲线的绘制
绘制空间曲线的基本命令为:
plot3(x,y,z);plot3(x,y,z,'s’)或plot3(x1,y1,z1,’s1’,x2,y2,z2,’s2',…)
其中x,y,z是同维的向量或矩阵.当它们是矩阵时,以它们的列对应元素为空间曲线上点的坐标.s指线型、颜色,这一点与二维曲线时的情形相同.
(2)、空间曲面的绘制
绘制空间曲面的基本命令为mesh(x,y,z)。
如果x、y是向量,则要求x的长度=矩阵z的列维;y的长度=矩阵z的行维。以zij为竖坐标,x的第i个分量为横坐标,y的第j个分量为纵坐标绘网格图。如果是同维矩阵,则数据点的坐标分别取自这三个矩阵。
meshc(x,y,z) 带等高线的网格图, waterfall(x,y,z) 瀑布水线图,
surf(x,y,z,’c’) 可着色的曲面图, surfc(x,y,z) 带等高线的可着色的曲面图.
以上这些命令都可用来绘制曲面图,用法与mesh完全一样.
例、x=cos(t), y=sin(t) 和 z=t 的数学关系可以由下面语句绘制出来:
t=0: pi/50: 2*pi;
x=sin(t); y=cos(t); z=t;
h=plot3(x, y, z, ’g-')
set(h,'LineWidth',4*get(h,’LineWidth'))
(3).多幅图形的创建
有时同一曲面或曲线需要从不同的角度去观察,或用不同的表现方式去表现,这时,为了便于比较,往往在一个窗口内画多幅图形.MATLAB用subplot命令实现这一目的.具体格式为:subplot(m,n,p)。使用此命令后,把窗口分为m×n个图形区域,p表示当前区域号。
五、MATLAB编程
1、关系运算和逻辑运算
(1).关系运算符
〈 小于 〈= 小于等于 〉 大于
〉= 大于等于 = = 等于 ~= 不等于
运算法则:如果两个比较量a、b是标量,那么,当a、b之间的关系成立时输出值为1;否则输出值为0。
如果两个比较量a、b是相同维数的数组,那么就按标量的运算法则,对a、b的对应元素进行运算,最后的输出结果为一个与a(或b)同维的0—1数组。
如果a是标量,b是数组,那么按标量的运算法则将a与b的每个元素逐一比较,最后的输出结果为一个与b同维的0-1数组。
在算术运算、关系运算中,算术运算优先.
(2).逻辑运算符
& 与 | 或 ~ 非
运算法则:参与逻辑运算的量称为逻辑量,非零逻辑量为“真",用1表示;零逻辑量为“假",用0表示。
如果参与逻辑运算的两个量a、b都是标量,那么:
a&b 当a与b全为非零时,运算结果为“1";否则为“0”
a|b a与b中只要有一个非零,运算结果为“1"
~a 当a是零时,运算结果为“1”;否则为“0”
如果参与逻辑运算的两个量a、b是相同维数的数组,那么就按标量的运算法则,对a、b的对应元素进行运算,最后的输出结果为一个与a(或b)同维的0—1数组。
如果参与逻辑运算的a是标量、b是数组,那么就按标量的运算法则,将a与b的每个元素进行运算,最后的输出结果为一个与b同维的0—1数组。
逻辑“非”是一个一元运算符,也服从数组运算规则。
在算术、关系、逻辑运算中,算术运算的最优先,其次是关系运算,再其次是逻辑运算.
2、控制语句
作为一种常用的编程语言,MATLAB 支持各种流程控制结构:循环结构、条件转移结构、客观结构、试探结构。
(1)、循环结构
循环语句有两种结构: for 。。。 end 结构和 while ..。 end 结构。 这两种语句结构不完全相同,各有各的特色。
for 。。。 end 语句通常的调用格式为:
for 循环变量=s1:s3:s2
循环体语句组
end
while循环语句用来控制一个或一组语句在某逻辑条件下重复预先确定或不确定的次数。while循环语句的一般表达形式为:
while 表达式
循环体语句
End
例 如果用户想由 MATLAB 求出 1+2+。。.+100 的值,可以作下列的循环:
mysum=0; for i=1:1:100,mysum=mysum+i; end;
在上面的式子中,可以看到 for 循环语句中 s3 的值为 1.在 MATLAB 实际编程中,如果 s3 的值为 1,则可以在该语句中省略,故该语句可以简化成 for i=1:100。在实际编程中,在 MATLAB 下采用循环语句会降低其执行速度,所以前面的程序可以由下面的命令来代替: i=1:100; mysum=sum(i).在这一语句中,首先生成了一个向量 i, 然后用内部函数 sum() 求出 i 向量的各个元素之和,或更简单地,该语句还可以写成 sum(1:100).如果前面的 100 改成 10000, 再运行这一程序,则可以明显地看出,后一种方法编写的程序比前一种方法快得多.
MATLAB 并不要求循环点等间距,假设 V 为任意一个向量,则可以用 for i=V 来表示循环。 同样的问题在 while 循环结构下可以表示为
mysum = 0; i=1; while (i<=100), mysum=mysum+i; i=i+1; end
(2)、条件转移结构:
条件转移语句:
if 条件式1
条件块语句组1
elseif 条件式2
条件块语句组2
。。。
else
条件块语句组n+1
end
(3)、开关结构:
MATLAB 从 5.0 版开始提供了开关语句结构,其基本语句结构为:
switch 开关表达式
case 表达式1
语句段1
case {表达式2,表达式3,.。., 表达式m}
语句段2
。.。
otherwise
语句段n
end
MATLAB 开关语句与 C 有区别:
当开关表达式的值等于表达式 1 时,将执行语句段 1,执行完语句段 1 后将转出开关体,无需像 C 语言那样在下一个 case 语句前加 break 语句,所以本结构在这点上和 C 语言是不同的.
在 case 语句引导的各个表达式中,不要用重复的表达式,否则列在后面的开关通路将永远也不能执行。
程序的执行结果和各个 case 语句的次序是无关的.
(4)、试探结构:
MATLAB 从 5。2 版本开始提供了一种新的试探式语句结构,其一般的形式为:
try
语句段1
catch
语句段2
end
本语句结构首先试探性地执行语句段 1,如果在此段语句执行过程中出现错误,则将错误信息赋给保留的 lasterr 变量,并放弃这段语句,转而执行语句段 2 中的语句。这种新的语句结构是 C 等语言中所没有的。
3、函数编写方法与应用
所谓 MATLAB 程序,大致分为两类:M 脚本文件 (M—Script) 和 M 函数 (M-function), 它们均是普通的 ASCII 码构成的文件。M 脚本文件中包含一族由 MATLAB 语言所支持的语句,它类似于 DOS 下的批处理文件,它的执行方式很简单,用户只需在 MATLAB 的提示符 〉〉 下键入该 M 文件的文件名,这样 MATLAB 就会自动执行该 M 文件中的各条语句,并将结果直接返回到 MATLAB 的工作空间。M 函数格式是 MATLAB 程序设计的主流,一般情况下, 不建议您使用 M 脚本文件格式编程.
MATLAB 的 M 函数是由 function 语句引导的,其基本格式如下:
function [返回变量列表] = 函数名 (输入变量列表)
注释说明语句段, 由 % 引导
输入、返回变量格式的检测
函数体语句
这里输入和返回变量的实际个数分别由 nargin 和 nargout 两个 MATLAB 保留变量来给出,只要进入该函数,MATLAB 就将自动生成这两个变量,不论您是否直接使用这两个变量。返回变量如果多于 1 个,则应该用方括号将它们括起来,否则可以省去方括号。输入变量和返回变量之间用逗号来分割.注释语句段的每行语句都应该由百分号 % 引导,百分号后面的内容不执行,只起注释作用。用户采用 help 命令则可以显示出来注释语句段的内容。此外,正规的变量个数检测也是必要的。如果输入或返回变量格式不正确,则应该给出相应的提示。我们将通过下面的例子来演示函数编程的格式与方法.
例 假设我们想生成一个 nxm 阶的 Hilbert 矩阵, 它的第 i 行第 j 列的元素值为 1/(i+j-1).我们想在编写的函数中实现下面几点:
如果只给出一个输入参数,则会自动生成一个方阵,即令 m=n .在函数中给出合适的帮助信息,包括基本功能、调用方式和参数说明检测输入和返回变量的个数,如果有错误则给出错误信息 。
《数字信号处理》的MATLAB实验
MATLAB强大的扩展功能为各个领域的应用提供了有力的工具,信号处理工具箱就是其中之一。在信号处理工具箱中,MATLAB提供了滤波器分析、滤波器实现、FIR数字滤波器设计、IIR数字滤波器设计、IIR滤波器阶次的估计、模拟低通滤波器的原理设计、模拟滤波器的设计、线性变换等方面的函数命令,这些函数命令放在signal/signal目录中,可通过help signal/signal来获取。本实验将利用MALTAB软件对数字信号处理中的基本理论和方法进行初步实验,以帮助同学们更好掌握数字信号处理的方法和了解MATLAB的实际应用.
[实验要求]
1.预习实验指导书和教材,并根据实验内容编好程序,在实验课上调试,分析。
2.将源程序、结果、分析和思考题写在实验报告里(请按实验报告摸板填写).在下一个实验前将前一个实验报告以班级为单位打包发送到指导教师的E-MAIL(zfy_72@163。com)中。
实验一 MATLAB基础入门练习
[实验目的]
1、熟悉MATLAB的启动,命令窗口,编辑窗口和SIMULINK等窗口的打开和使用方法。
2、熟悉常用的MATLAB变量命令的使用方法。
3、掌握MATLAB各种变量及赋值方法和运算符的使用。
4、掌握MATLAB的各种绘图函数和使用方法。
5、掌握MATLAB的M文件(包括脚本文件和M函数的使用方法)
[实验仪器]
计算机、Matlab6。5软件
[实验参考书] :自编参考书
[实验内容]
1.向量和矩阵的产生方法实验,用矩阵输入的一般方法输入,或用:号来进行矩阵和向量的输入。练习下列矩阵输入方法
>〉A=0:0.1:1
〉〉B=[2,2,2;3,5,6]
〉〉b=[2 2 2;3 5 6]
〉〉X=eye(3,4),
>〉Y=rand(3,4)
>>Z=zeros(3,4)
〉〉I=ones(3,4)
观察上述方法产生的矩阵特点,总结MATLAB输入矩阵的方法。
2、运算符的使用:对于矩阵的运算有加+,减—,乘*,除:\,/,乘方^,点乘。*、点除。/、点乘方.^(其中点乘、点除和点乘方表示各对应元的运算),求逆inv,求特征值eig,矩阵行列式值det等。
(1)、实验对两个矩阵进行非点运算和点运算观察区别。
〉〉c=magic(3)
〉>z=a*c
〉>z=a.c
(2)、求下面的线性方程组的解
MATLAB语句
>>a=[2,3,-1;8,2,3;45,3,9];
>>b=[2;4;23];
>>x=inv(a)*b
>>det(a)
观察上述运算产生的结果,加深MATLAB进行矩阵运算的高效性,实际上,MATLAB起初就是为数值计算设计的,因此,其数值计算功能很强,如微积分运算都很方便地在MATLAB中实现。
3.MATLAB函数的使用方法
常用的DSP序列见下表,以单位采样为例,请给出单位阶跃序列的MATLAB函数。
例:单位采样序列的产生.
function [x,n]=impseq(n0,n1,n2);
%generate x(n)=delta(n—n0);
n0=input(’please input n0:');
n1=input(’please input n1:');
n2=input('please input n2:’);
if (n1<=n0)& (n0〈n2)
n=[n1:n2];
x=[(n-n0)==0];
else
error('n0 must betwen n1 and n2');
end
运行该function,在MATLAB命令窗口依次输入三个数,则可得输出的单位采样序列。
please input n0:2
please input n1:1
please input n2:3
ans =
0 1 0
试根据此例编写产生单位阶跃序列的函数,分析其与单位抽样序列的不同。
4.绘图命令的使用,例请输入以下语句观察输出图形
MATLAB的M文件:选择file—new-M—file,输入以下语句,保存文件后运行。
t=0: pi/50: 2*pi;
x=sin(t); y=cos(t); z=t;
h=plot3(x, y, z, 'g-’)
set(h,'LineWidth’,4*get(h,'LineWidth’))
其中,前面两句比较容易理解,第三句的意思是画出一个三维图形,同时获得此图形的句柄;第四句对此句柄图形的宽度用4倍默认宽度来画。
5.其它MATLAB常用功能练习.
请同学自己根据第一部分的介绍选择性练习。
[思考题]
1、总结MATLAB输入矩阵的方法。
2、总结MATLAB中数组运算与矩阵运算的区别。
3、总结MATLAB中函数和脚本文件的区别。
实验二 离散时间信号分析
[实验目的]
1、掌握连续信号的抽样方法,加深对时域采样定理的理解.
2、熟悉时域离散系统的时域特性。
3、掌握常用序列的产生方法。
4、掌握自相关函数的性质和使用方法.
[实验仪器]
计算机、Matlab6。5软件
[实验参考书] :自编参考书
[实验内容]
1、序列的表示
数字信号处理的对象是离散(时间),序列在MATLAB中以向量形式来表示,比如对于个序列x(-1)=2, x(0)=4, x(1)=20, x(2)=7,则
>〉xn=[2 4 20 7]
xn =
2 4 20 7
>>n=—1:2
n =
—1 0 1 2
需要注意的问题是,在MATLAB中取矩阵或向量的元素的索引号均为正整数,因此,如果需要获得xn=4的值,该怎么取呢?是用xn(0)还是xn(2)呢?请大家试一试.当然如果画此图形当然可以用
>〉stem(n,xn)
来实现。体会两者的区别。
2、序列的加减乘运算
请输入两个长度为5的实序列x=[1 2 3 4 5
展开阅读全文