《数 字 信 号 处 理》
实 验指 导 书
数字信号处理实验室 编写
适用专业:电子信息工程
电子信息科学与技术
通信工程等
电工电子实验中心
2007 年 7月
前 言
《数字信号处理》是一门理论与实践并重的课程。它主要研究数字序列信号的表示方法,并对信号进行运算,以提取包含在其中的特殊信息。近年来,由于在研究及应用两方面均取得了进展,数字信号处理领域已经日趋成熟,如今,几乎所有大学在本科高年级及研究生一年级都开设了本主题至少一门或更多的课程。
本实验指导书是教科书的教学内容的很好补充。首先是通过实验加深理解在课堂上获得的理论知识,将理论知识形象化;同时学习MATLAB在信号处理领域的使用,加强动手能力,积累实践经验;另外通过一些综合性实验达到综合分析、运用已学课程知识点的效果。
本课程实验包含四个必修实验:实验一《离散系统时域分析》为验证性实验,使学生掌握计算离散卷积方法和MATLAB语言实现;实验二《FIR数字滤波器的设计》为综合性,使学生掌握用窗函数法和频率采样法设计FIR数字滤波器的原理和方法,了解不同窗函数对滤波器性能的影响;实验三《IIR数字滤波器的设计》为综合性,可使学生掌握脉冲响应不变法和双线性变换法设计IIR数字滤波器的原理和方法,了解双线性变换法和脉冲响应不变法的特点和区别。实验四《FFT频谱分析及应用》为验证性,可进一步加深对FFT的理解,熟悉应用FFT对典型信号进行频谱分析的方法。
本指导书适合电子信息工程专业、电子信息科学与技术专业使用,同时也可供开设了《数字信号处理》课程的其他相关专业使用。
目 录
实验一 离散系统时域分析. 4
实验二 FIR数字滤波器的设计. 7
实验三 IIR数字滤波器的设计. 11
实验四 FFT频谱分析及应用. 15
附录: MATLAB基本操作及常用命令. 18
实验一:离散系统时域分析
实验学时:2学时
实验类型:验证
实验要求:必修
一、实验目的
1、学习MATLAB语言的编程和调试技巧;
2、掌握笔算离散卷积方法和MATLAB语言实现。
二、 实验内容
时域中,离散时间系统对输入信号或延迟信号进行运算处理,生成具有所需特性的输出信号。本实验通过MATLAB仿真一些简单的离散时间信号和系统,并研究其时域特性。涉及到离散时间信号、离散时间系统、系统性质及线性卷积等知识点。
三、实验原理与方法和手段
一个离散时间系统,输入信号为x(n),输出信号为y(n),运算关系用T[﹒]表示,则输入与输出的关系可表示为y(n)=T[x(n)]。
(1)线性时不变系统的输入输出关系可通过单位脉冲响应h(n)表示:
y(n)=x(n)*h(n)=
式中*表示卷积运算。
(2)线性时不变系统的实现
可物理实现的线性时不变系统是稳定的、因果的。这种系统的单位脉冲响应是因果的(单边)且绝对可和的,即: , ;。在MATLAB语言中采用conv实现卷积运算即:y=conv(x,h),它默认从n=0开始。
四、实验组织运行要求
1、学生在进行实验前必须进行充分的预习,熟悉实验内容;
2、学生根据实验要求,读懂并理解相应的程序;
3、学生严格遵守实验室的各项规章制度,注意人身和设备安全,配合和服从实验室人员管理;
4、教师在学生实验过程中予以必要的辅导,独立完成实验;
5、采用集中授课形式。
五、实验条件
1、具有WINDOWS 98/2000/NT/XP操作系统的计算机一台;
2.、MATLAB编程软件。
六、实验步骤
在“开始--程序”菜单中,找到MATLAB程序,运行启动;
进入MATLAB后 ,首先熟悉界面;
在Command Window中输入参考程序,并执行;
记录运行结果图形,并与笔算结果对照。
(MATLAB的使用请参考附录)
具体步骤如下:
1、设某LTI的单位脉冲响应
(1)判断此系统是否可实现;
(2)当输入为矩形脉冲 时,求此LTI的输出 ;
(3)用MATLAB实现,并画出图形。
2、 , ; , ,计算卷积 。
七、思考题
结合《信号与系统》课程所学,思考离散时间系统的线性卷积公式与连续时间系统的卷积公式的异同?
八、实验报告要求
1、报告中要给出实验的MATLAB程序,并对每个语句给出注释,说明语句作用;
2、简述实验目的和原理;
3、给出用笔算时卷积和conv计算线性卷积对照图;
4、给出收获和体会。
九、参考程序
程序1
x=[ones(1,10)];
x1=[ones(1,10),zeros(1,40)];
N1=length(x);
n1=0:N1-1;
N2=50; n2=0:N2-1;
h=0.8.^n2;
y=conv(x,h);
N=N1+N2-1;n=0:N-1;
subplot(3,1,1);
stem(n2,x1);subplot(312);
stem(n2,h);subplot(313);
stem(n,y);
程序2
如果 、 的起点不为0,则采用conv_m计算卷积;
编写conv_m函数:
function[y,ny]=conv_m(x,nx,h,nh)
%改进卷积程序
nyb=nx(1)+nh(1);
nye=nx(length(x))+nh(length(h));
ny=[nyb,nye];
y=conv(x,h);
在命令窗口输入:
x=[3,11,7,0,-1,4,2];nx=[-3:3];
h=[2,3,0,-5,2,1];nh=[-1:4];
[y,ny]=conv_m(x,nx,y,ny)
可得到结果:y(n)=[6,31,47,6,-51,-5,41,18,-22,-3,8,2],
实验二:FIR数字滤波器的设计
实验学时:2学时
实验类型:综合
实验要求:必修
知识点:FIR数字滤波器,窗函数法,频率采样法,
一、实验目的
1、掌握用窗函数法和频率采样法设计FIR数字滤波器的原理和方法;
2、熟悉线性相位FIR滤波器的幅频特性和相频特性;
3、了解不同窗函数对滤波器性能的影响。
二、实验内容
使用MATLAB编写程序,实现FIR数字滤波器的设计。涉及窗函数法和频率采样法设计FIR数字滤波器的方法、线性相位FIR滤波器的幅频特性和相频特性的特点、窗函数选择及其对滤波器性能的影响等知识点。
三、实验原理与方法和手段
1、窗函数法设计线性相位FIR滤波器的一般步骤为:
(1)确定理想滤波器 的特性;
(2)由 求出 ;
(3)选择适当的窗函数,并根据线性相位条件确定窗函数的长度N;在MATLAB中,可由w=boxcar(N)(矩形窗)、w=hanning(N)(汉宁窗)、w=hamming(N)(汉明窗)、w=Blackman(N)(布莱克曼窗)、w=Kaiser(N,beta)(凯塞窗)等函数来实现窗函数设计法中所需的窗函数。
(4)由h(n)= (n).w(n), 0≤n≤ N-1,得出单位脉冲响应h(n);
2、对h(n)作离散时间傅立叶变换,得到H( )。
3、频率采样法设计线性相位FIR滤波器的一般步骤为:
频率采样法是从频域出发,把给定的理想频率响 加以等间隔采样, ,然后以此 作为实际FIR滤波器频率特性的采样值 ,即令:,
由于有限长序列h(n)和它的DFT是一一对应的,应此可以由频域的这N个采样值通过IDFT来确定有限长h(n),同时根据H(z)的内插公式,也可由这N个频域采样值内插恢复出FIR滤波器的H(z)及。
用频率采样法设计线性相位FIR滤波器的一般步骤为:
(1)设计要求选择滤波器的种类;
(2)根据线性相位的约束条件确定 ,进而得到H(k);
4、将H(k)代入H( )内插公式得到所设计滤波器的频率响应。
关于第(3)步,在MATLAB中可由函数h=real(ifft(H,N))和[db,mag,pha,w]=freqz_m(h,1)实现。
5、本实验用到的特殊函数:
,计算截止频率为Wc理想低通滤波器的单位脉冲响应hd(n)。
[db,mag,pha,w]=freqz_m(b,a),计算幅频和相频响应
[Hr,w,a,L]=Hr_Type1(h); [Hr,w,b,L]=Hr_Type2(h)
%计算1型和2型低通滤波器的振幅响应Hr(w)。
四、实验组织运行要求
1、学生在进行实验前必须进行充分的预习,熟悉实验内容;
2、学生根据实验要求,编写相应的程序;
3、学生严格遵守实验室的各项规章制度,注意人身和设备安全,配合和服从实验室人员管理;
4、教师在学生实验过程中予以必要的辅导,独立完成实验;
5、采用集中授课形式。
五、实验条件
具有WINDOWS 2000/XP操作系统的计算机一台,安装MATLAB软件
六、实验步骤
在“开始--程序”菜单中,找到MATLAB程序,运行启动;
进入MATLAB后 ,在Command Window中输入自己编写的主程序,并执行;
记录运行结果图形,作分析对比。
具体步骤如下:
1、用窗函数法设计一线性相位FIR低通滤波器,设计指标为:
, , ,
(1)选择一个合适的窗函数,取N=15,观察所设计滤波器的幅频特性,分析是否满足设计要求;
(2)取N=45,重复上述设计,观察幅频和相频特性的变化,分析长度N变化的影响;
(3)保持N=45不变,改变窗函数(如hamming窗变为blackman窗),观察并记录窗函数对滤波器幅频特性的影响,比较两种窗的特点。
2、用凯塞窗设计一个数字带通滤波器,设计指标为: , , , , ,
3、用频率采样法设计一个低通滤波器,设计指标为:
, , ,
(1)采样点数N=33,过渡带设置一个采样点,H(k)=0.5,最小阻带衰减为多少,是否满足设计要求?
(2)采样点数N=34,过渡带设置2个采样点, , ,最小阻带衰减为多少,是否满足设计要求?
七、实验报告要求
1、报告中要给出实验的MATLAB程序,并对每个语句给出注释,说明语句作用;
2、简述实验目的和原理;
3、按实验步骤附上所设计滤波器的h(n)及相应的幅频和相频特性曲线,比较它们的性能,说明不同的窗函数对滤波器性能的影响;
4、总结窗函数法和频率采样法的特点,归纳设计中的主要公式;
5、收获和建议。
八、部分参考程序
函数 :
function hd=ideal_lp(wc,N);
alpha=(N-1)/2;
n=0:1:N-1;
m=n-alpha+eps;
hd=sin(wc*m)./(pi*m);
函数freqz_m:
function[db,mag,pha,w]=freqz_m(b,a);
[H,w]=freqz(b,a,1000,'whole');
H=(H(1:1:501))';
w=(w(1:1:501))';
mag=abs(H);
db=20*log10((mag+eps)/max(mag));
pha=angle(H);
函数Hr_Type1:
function [Hr,w,a,L]=Hr_Type1(h);
M=length(h);L=(M-1)/2;
a=[h(L+1) 2*h(L:-1:1)];
n=[0:1:L];
w=[0:1:500]'*2*pi/500;
Hr=cos(w*n)*a';
函数Hr_Type2:
function [Hr,w,b,L]=Hr_Type2(h);
M=length(h);
L=M/2;b=2*[h(L:-1:1)];
n=[1:1:L];n=n-0.5;
w=[0:1:500]'*2*pi/500;
Hr=cos(w*n)*b';
实验三:IIR数字滤波器的设计
实验学时:2学时
实验类型:综合
实验要求:必修
知识点:IIR数字滤波器,脉冲响应不变法,双线性变换法
一、实验目的
1、掌握脉冲响应不变法和双线性变换法设计IIR数字滤波器的原理和方法;
2、观察双线性变换法和脉冲响应不变法设计的滤波器的频域特性,了解双线性变换法和脉冲响应不变法的特点和区别。
二、实验内容
使用MATLAB编写程序,实现IIR数字滤波器的设计。涉及脉冲响应不变法和双线性变换法设计IIR数字滤波器的方法、不同设计方法得到的IIR滤波器频域特性异同等知识点。
三、实验原理与方法和手段
1、脉冲响应不变法
所谓脉冲响应不变法就是使数字滤波器的单位脉冲响应序列h(n)等于模拟滤波器的单位冲激响应和 (t)的采样值,即:,其中,T为采样周期。
在MATLAB中,可用函数impinvar实现从模拟滤波器到数字滤波器的脉冲响应不变映射,调用格式为:
[b,a]=impinvar(c,d,fs)
[b,a]=impinvar(c,d)
其中,c、d分别为模拟滤波器的分子和分母多项式系数向量;fs为采样频率(Hz),缺省值fs=1Hz;b、a分别为数字滤波器分子和分母多项式系数向量。
2、双线性变换法:
由于s平面和z平面的单值双线性映射关系为s= ,其中T为采样周期。
因此,若已知模拟滤波器的传递函数,将上式代入即可得到数字滤波器的系统函数H(z)。
在双线性变换中,模拟角频率和数字角频率的变换关系为:
可见,Ω和w之间的变换关系为非线性的。
在MATLAB中,可用函数bilinear实现从模拟滤波器到数字滤波器的双线性变换映射,调用格式为:[b,a]=bilinear(c,d,fs)
3、设计步骤:
(1)定技术指标转换为模拟低通原型设计性能指标。
(2)估计满足性能指标的模拟低通性能阶数和截止频率。
利用MATLAB中buttord、cheb1ord、cheb2ord、ellipord等函数,调用格式如:
其中,Wp为带通边界频率,rad/s;Ws为阻带边界频率,rad/s;Rp为带通波动,dB;Rs为阻带衰减,dB;‘s’表示为模拟滤波器;函数返回值n为模拟滤波器的最小阶数;Wn为模拟滤波器的截止频率(-3dB频率),rad/s。函数适用低通、高通、带通、带阻滤波器。
(3)设计模拟低通原型。利用MATLAB中buttap、cheb1ap、cheb2ap、elliap等函数,调用格式如[z,p,k]=buttap(n)。
采用上述函数所得到原型滤波器的传递函数为零点、极点、增益表达式,需要和函数[c,d]=zp2tf(z,p,k)配合使用,以转化为多项式形式。
(4)由模拟低通原型经频率变换获得模拟低通、高通、带通或带阻滤波器。
利用MATLAB中lp2lp、lp2hp、lp2bp、lp2bs等函数,调用格式如[c1,d1]lp2lp(c,d,Wn)。
(5)利用脉冲响应不变法或双线性不变法,实现模拟滤波器到数字滤波器的映射。
【说明】
MATLAB信号处理工具箱还提供了模拟滤波器设计的完全工具函数:butter、cheby1,cheby2、ellip、besself。用户只需一次调用就可自动完成以上步骤中的3~4步,调用格式如:[c,d]=butter(n,Wn,’ftype’,‘s’),其中,’ftype’为滤波器类型:
‘high’表示高通滤波器,截止频率为Wn;
‘stop’表示带阻滤波器,Wn=[W1,W2] (W1<W2);
‘ftype’缺省时表示为低通或带通滤波器。
4、本实验用到的特殊函数:[db,mag,pha,w]=freqz_m(b,a),计算幅频和相频响应。
四、实验组织运行要求
1、学生在进行实验前必须进行充分的预习,熟悉实验内容;
2、学生根据实验要求,编写相应的程序;
3、学生严格遵守实验室的各项规章制度,注意人身和设备安全,配合和服从实验室人员管理;
4、教师在学生实验过程中予以必要的辅导,独立完成实验;
5、采用集中授课形式。
五、实验条件
1、具有WINDOWS 98/2000/NT/XP操作系统的计算机一台;
2、MATLAB编程软件。
六、实验步骤
在“开始--程序”菜单中,找到MATLAB程序,运行启动;
进入MATLAB后 ,在Command Window中输入自己编写的主程序,并执行;记录运行结果图形,作分析对比。
具体步骤如下:
1、查看帮助文件,了解相关函数的调用格式。
2、用双线性变换法设计一个Chebyshev1型数字带通滤波器,设计指标为:
, , , , ,
3、 , , , , ;分别用脉冲响应不变法和双线性变换法设计一个Butterworth数字低通滤波器
(1)观察所设计数字滤波器的幅频特性曲线,记录带宽和衰减量;
(2)比较两种方法的优缺点;
(3)利用y=filter(b,a,x)函数观察对实际心电图信号的滤波效果。
人体心电图信号在测量过程中往往受到工业高频干扰,所以必须经过低通滤波器处理。已知某一实际心电图信号的采样序列如下:
x(n)=[-4,-2,0,-4,-6,-4,-2,-4,-6,-6,-4,-4,-6,-6,-2,6,12,8,0,-16,-38,-60,-84,-90,-66,-32,-4,2,…-4,8,12,12,10,6,6,6,4,0,0,0,0,0,-2,-4,0,0,0,-2,-2,0,0,-2,-2,-2,-2,0],共56点
七、实验报告要求
1、报告中要给出实验的MATLAB程序,并对每个语句给出注释,说明语句作用;
2、简述实验目的和原理;
3、按实验步骤附上所设计滤波器的H(z)及相应的幅频特性曲线定性分析得到的图形,判断设计是否满足要求;
4、总结双线性变换法和脉冲不变法的特点和区别;
5、收获与建议。
八、部分参考程序
心电图信号的滤波
%Filter
clc;%clear;
x=[-4,-2,0,-4,-6,-4,-2,-4,-6,-6,-4,-4,-6,-6,...
-2,6,12,8,0,-16,-38,-60,-84,-90,-66,-32,-4,2,...
-4,8,12,12,10,6,6,6,4,0,0,0,0,0,...
-2,-4,0,0,0,-2,-2,0,0,-2,-2,-2,-2,0];
Y=filter(b,a,x);
N=56;n=0:N-1;
subplot(2,1,1);plot(n,x);subplot(2,1,2);plot(n,Y);
实验四FFT频谱分析及应用
实验学时:2学时
实验类型:验证
实验要求:必修
一、实验目的:
1、通过实验加深对FFT的理解;
2、熟悉应用FFT对典型信号进行频谱分析的方法。
二、实验内容
使用MATLAB程序实现信号频域特性的分析。涉及到离散傅立叶变换(DFT)、快速傅立叶变换(FFT)及信号频率分辨率等知识点。
三、实验原理与方法和手段
在各种信号序列中,有限长序列占重要地位。对有限长序列可以利用离散傅立叶变换(DFT)进行分析。DFT不但可以很好的反映序列的频谱特性,而且易于用快速算法(FFT)在计算机上进行分析。
有限长序列的DFT是其z变换在单位圆上的等距离采样,或者说是序列傅立叶的等距离采样,因此可以用于序列的谱分析。FFT是DFT的一种快速算法,它是对变换式进行一次次分解,使其成为若干小数据点的组合,从而减少运算量。
在MATLAB信号处理工具箱中的函数fft(x,n),可以用来实现序列的N点快速傅立叶变换。
经函数fft求得的序列一般是复序列,通常要求出其幅值和相位。MATLAB中提供了求复数的幅值和相位的函数:abs、angle,这些函数一般和fft同时使用。
四、实验组织运行要求
1、学生在进行实验前必须进行充分的预习,熟悉实验内容;
2、学生根据实验要求,读懂并理解相应的程序;
3、学生严格遵守实验室的各项规章制度,注意人身和设备安全,配合和服从实验室人员管理;
4、教师在学生实验过程中予以必要的辅导,独立完成实验;
5、采用集中授课形式。
五、实验条件
1、具有WINDOWS 98/2000/NT/XP操作系统的计算机一台;
2.、MATLAB编程软件。
六、实验步骤
在“开始--程序”菜单中,找到MATLAB程序,运行启动;
进入MATLAB后 ,在Command Window中输入实验程序,并执行;
记录运行结果图形,作分析。
具体步骤如下:
1、模拟信号 ,以 进行采样,求:
(1)N=40点FFT的幅度频谱,从图中能否观察出信号的2个频谱分量?
(2)提高采样点数,如N=128,再求该信号的幅度频谱,此时幅度频谱发生了什么变化?信号的2个模拟频率和数字频率各为多少?FFT频谱分析结果与理论上是否一致?
2、一个连续信号含三个频谱分量,经采样得以下序列:
(1)N=64,df分别为 、1/64,观察其频谱;
(2)N=64、128,df为1/64,做128点得FFT,其结果有何不同?
3、被噪声污染得信号,比较难看出所包含得频率分量,如一个由50Hz和120Hz正弦信号构成的信号,受零均值随机噪声的干扰,数据采样率为1000Hz,试用FFT函数来分析其信号频率成分,要求:(1)画出时域波形;(2)分析信号功率谱密度。
注:在MATLAB中,可用函数rand(1,N)产生均值为0,方差为1,长度为N的高斯随机序列。
七、思考题
FFT对信号进行频谱分析时,信号的频率的分辨率与什么有关?能否给出其数学关系?
八、实验报告要求
1、报告中要给出实验的MATLAB程序,并对每个语句给出注释,说明语句作用;
2、简述实验目的和原理;
3、按实验步骤附上实验信号序列和幅频特性曲线,分析所得到的图形,说明参数改变时对时域和频域的影响;
4、总结实验中的主要结论;
5、收获和建议。
九、参考程序
程序1:
N=40;n=0:N-1;
t=0.01*n;
x=2*sin(4*pi*t)+5*cos(8*pi*t);
k=0:N/2;w=2*pi/N*k;
X=fft(x,N);
magX=abs(X(1:N/2+1));
subplot(2,1,1);stem(n,x,'.');title('signal x(n)');
subplot(2,1,2);plot(w/pi,magX);title('FFT N=40');
xlabel('f (unit :pi)');ylabel('|X|');grid
程序3:
t=0:0.001:0.8;x=sin(2*pi*50*t)+cos(2*pi*120*t);
y=x+1.5*randn(1,length(t));
subplot(3,1,1);plot(t,x);
subplot(3,1,2);plot(t,y);
%title('press any key,continue...');
%pause;
Y=fft(y,512);
P=Y.*conj(Y)/512;
f=1000*(0:255)/512;
subplot(3,1,3);plot(f,P(1:256));
附录:MATLAB基本操作及常用命令
1、 MATLAB的启动
启动MATLAB有多种方式,最常用的方法就是双击系统桌面的MATLAB图标,
也可以在开始菜单的程序选项中选择MATLAB快捷方式。
初次启动MATLAB后,将进入MATLAB默认设置的桌面平台。
2、桌面平台
默认设置情况下的桌面平台包括6个窗口,分别是MATLAB主窗口、命令窗口、历史窗口、当前目录窗口、发行说明书窗口和工作间管理窗口。下面分别对各窗口做简单介绍。
(1)MATLAB主窗口,与MATLAB的早期版本不同的是,MATLAB 6.1增加
了一个主窗口,其他的几个窗口都包含在这个大的主窗口中。
(2)命令窗口, 在主窗口的“View”菜单下选择“Command Window”命
令,可以打开或关闭MATLAB的命令窗口。其中“>>”为运算提示符,表示MATLAB正处在准备状态。当在提示符后输入一段运算式并按Enter键后,MATLAB将给出计算结果,然后再次进入准备状态。
(3)历史窗口
在主窗口的“View”菜单下选择“Command History”命令可以打开或关闭MATLAB的历史窗口。
(4)当前目录窗口
在主窗口的“View”菜单下选择“Current Directory”命令,可以打开或关闭MATLAB的当前目录窗口。
(5)发行说明书窗口
发行说明书窗口是MATLAB6.x版本所特有的,用来说明用户所拥有的Mathworks公司产品的工具包、演示以及帮助信息。在主窗口的“View”菜单下选择“LaunchPad”命令,可以打开或关闭该窗口。
(6)工作间窗口
在主窗口的“View”菜单下选择“Workspace”命令,可以打开或关闭MATLAB的工作间窗口,工作间窗口是MATLAB的重要组成部分。
2、MATLAB程序编辑/调试器 (编写算法程序的地方)
在MATLAB的命令窗口中有三种方式可进入程序编辑/调试器:
¡(1)选择菜单栏的“File”项中的“New”或“Open”项。
¡(2)选择工具栏的“New”或“Open”项。
¡(3)在命令窗口中输入edit命令。
在程序编辑/调试器里,不同的文本内容分别用不同颜色的字体显示。其中MATLAB的关键字如for、if、end等为蓝色,注释语句为绿色,字符串为红色,其他文本为黑色,颜色的设置非常醒目,便于调试。
在运行程序之前,必须设置好MATLAB的工作路径,使得所要运行的程序及运行程序所需要的其他文件处在当前目录之下,只有这样,才可以使程序得以正常运行。否则可能导致无法读取某些系统文件或数据,从而程序无法执行。
主窗口
程序编辑/调试器
MATLAB的程序类型有三种
1)脚本M文件
在命令窗口中输入并执行,它所用的变量都要在工作空间中获取,不需要输入输出参数的调用,退出MATLAB后就释放了。
2)程序M文件
以.m格式进行存取,包含一连串的MATLAB指令和必要的注解。需要在工作空间中创建并获取变量,也就是说处理的数据为命令窗口中的数据,没有输入参数,也不会返回参数。
¡程序运行时只需在命令窗口中键入其名称即可(不需要后缀名)。
3)函数M文件(常称为M函数)
与在命令窗口中输入命令一样,函数接受输入参数,然后执行并输出结果。用help命令可以显示它的注释说明。
¡具有标准的基本结构:
(1)函数定义行(关键字function)
function[out1,out2,..]=filename(in1,in2,..)
输入和输出(返回)的参数个数分别由nargin和nargout两个MATLAB保的变量来给出。
(2)第一行帮助行
以(%)开头,作为lookfor指令搜索的行
(3)函数体说明及有关注解
以(%)开头,用以说明函数的作用及有关内容
(4)函数体语句
函数体内使用的除返回和输入变量这些在function语句中直接引用的变量以外的所有变量都是局部变量,即在该函数返回之后,这些变量会自动在MATLAB的工作空间中清除掉。如果希望这些中间变量成为在整个程序中都起作用的变量,则可以将它们设置为全局变量。
例如,实现加减法运算的M函数调用方法如下:
¡首先编写一个M函数 :(打开一个程序编辑器“Untitled”)
Function[outl,out2]=addec(inl,in2)
outl=inl+in2;
out2=inl-in2;
保存的文件名为addec(默认后缀名为.m)
然后,在MATLAB的命令窗口调用这个函数文件:
>>[a,b]=addec(10,20)
>>disp([a,b])% 在命令窗口输出a、b的值
显示结果为:30 10
4、MATLAB帮助系统
1)单击MATLAB主窗口菜单的“Help”|“Demos”选项,或在命令窗口输入demo,将进入MATLAB的演示界面。
2)命令窗口查询帮助
help+关键词,显示所有帮助说明;lookfor+关键字,查讯相关函数,等等。
5、变量
(1)变量的命名:变量的名字必须以字母开头(不能超过19个字符),之后可以是任意字母、数字或下划线;变量名称区分字母的大小写;变量中不能包含有标点符号。
(2)一些特殊的变量
ans:用于结果的缺省变量名,i、j:虚数单位,pi:圆周率nargin:函数的输入变量个数
eps:计算机的最小数, nargout:函数的输出变量个数,inf:无穷大,nan:不定量
6、向量的生成
由冒号运算符生成: A=初值:增值:终值
如:A=0:1:9----A=[0 1 2 3 4 5 6 7 8 9 ]
7、矩阵的生成
1)在命令窗口中直接输入
》y=[2,4, 5;3 6 8]
y=
2 4 5
3 6 8
2)由多个向量生成矩阵如: z=[x;y],x、y为向量。
3)一些常用的特殊矩阵
单位矩阵:eye(m,n); eye(m),零矩阵:zeros(m,n); zeros(m),一矩阵:ones(m,n);ones(m)
对角矩阵:对角元素向量V=[a1,a2,…,an]A=diag(V)
随机矩阵:rand(m,n)产生一个m×n的均匀分布的随机矩阵
Y =randn(m,n)%生成m×n正态分布随机矩阵
8、矩阵运算
1) 加、减运算
运算符:“+”和“-”分别为加、减运算符。
运算规则:对应元素相加、减,即按线性代数中矩阵的“十”,“一”运算进行。
2) 乘法运算
运算符:*
运算规则:按线性代数中矩阵乘法运算进行,即放在前面的矩阵的各行元素,分别与放在后面的矩阵的各列元素对应相乘并相加。
向量的点乘(内积):维数相同的两个向量的点乘。 A.*B表示A与B对应元素相乘。
矩阵的卷积和多项式乘法,函数 conv实现:格式w = conv(u,v)%u、v为向量,其长度可不相同。
3) 除法运算
MATLAB提供了两种除法运算:左除()和右除(/)。一般情况下,x=ab是方程a*x=b的解,而x=b/a是方程x*a=b的解。
元素除:A./B表示A中元素与B中元素对应相除
4) 矩阵乘方运算符:^
数组乘方:A.^P:表示A的每个元素的P次乘方。
5) 矩阵转置,运算符:′
总之,矩阵的四则运算,运算符:+-*.*././^.^’ .’
9、基本平面图形绘制命令 plot的调用格式
1)plot(X,Y)%当X,Y均为实数向量,且为同维向量,则以x的元素为横坐标,y的元素为纵坐标,绘制曲线。若X,Y均为同维同型实数矩阵,X= [X(i)],Y =[Y(i)],其中X(i),Y(i)为列向量,则plot(X,Y)依次画出plot(X(i),Y(i)),矩阵有几列就有几条线;若X,Y中一个为向量,另一个为矩阵,且向量的维数等于矩阵的行数或者列数,则矩阵按向量的方向分解成几个向量,再与向量配对分别画出,矩阵可分解成几个向量就有几条线;
2)plot(Y)%若Y为实数向量,Y的维数为m,则plot(Y)等价于plot(X,Y),
3)plot(X1,Y1,X2,Y2,…),其中Xi与Yi成对出现,plot(X1,Y1,X2,Y2,…)将分别按顺序取两数据Xi与Yi进行画图。
4)plot(X1,Y1,LineSpec1,X2,Y2,LineSpec2…)将按顺序分别画出由三参数定义Xi,Yi,LineSpeci的线条。其中参数LineSpeci指明了线条的类型,标记符号,和画线用的颜色。
例>>t= 0:pi/20:2*pi;
>>plot(t,t.*cos(t),'-.r*'),绘制一条红色点划线
10、二维图形注释命令
1)axis(V)%v=[x1,x2,y1,y2]或[x1,x2,y1,y2,z1,z2],人工设定坐标范围。
2)grid on 给当前的坐标轴增加分隔线。grid off 从当前的坐标轴中去掉分隔线。
3)title(‘string’) 在当前坐标轴上方正中央放置字符串string作为标题
4)text(x,y,'string')在图形中指定的位置(x,y)上显示字符串string
5)xlabel('string')、 ylabel(‘string’)给当前轴对象中的x、y轴贴标签
6)[x,y]=ginput(n) %用鼠标从二维图中获取几个点的坐标值。
7)gtext l('string') ,在当前二维图形中用鼠标放置文字
8)多次叠绘,hold on/off,保持当前图形窗口中的图形。该命令是决定是否在当前坐标轴中只能增加新的图形对象还是覆盖原有图形对象。
9) plotyy(x1,y1,x2,y2) %左纵轴绘制x1-y1曲线,右纵轴画x2-y2曲线。
10) 多子图,subplot
¡功能生成与控制多个坐标轴。把当前图形窗口分隔成几个矩形部分,不同的部分是按行方向以数字进行标号的。每一部分有一坐标轴,后面的图形输出于当前的部分中。
¡用法:
subplot(m,n,p)将一图形窗口分成m*n个小窗口,在第p个小窗口中创建一新坐标轴,并将新的坐标轴成为当前坐标轴。
11)stem
¡功能画二维离散数据的柄形图。该图用线条显示数据点与x轴的距离,一小圆圈(缺省标记)或用指定的其他标记符号与线条相连,在y轴上标记数据点的值。