用dft对连续数字信号处理 dft进行谱分析的误差问题有哪些

数字信号处理实验指导书
数字信号处理实验指导书
广州大学机械与电气工程学院
实验一 求线性时不变系统的输出…………………………………………………1
实验二 信号与系统的傅立叶分析…………………………………………………4
实验三 极零点分布对系统频率响应的影相………………………………………6
实验四 时域采样定理………………………………………………………………8
实验五 用DFT(FFT)对时域离散信号的频谱分析………………………...…….10
实验六 用DFT(FFT)对连续信号进行频谱分析……………………………...….12
实验七 IIR滤波器的设计…………………………………………………………13
实验八 FIR滤波器的设计…………………………..…………………………….15
实验一 熟悉MATLAB环境
一、实验目的
1.熟悉MATLAB的主要操作命令。
2.学会用MATLAB创建时域离散信号。
3.学会创建MATLAB函数。
二、实验原理
参阅附录MATLAB基本操作及常用命令。
三、实验内容
完成以下操作。
1.数组的加、减、乘、除运算。
&& 输入A=[1 2 3 4];B=[3 4 5 6];计算:C=A+B;D=A-B;E=A.*B;F=A./B;G=A.^B;并用stem语句画出A、B、C、D、E、F、G。
2.用MATLAB实现以下序列
(1)单位抽样序列
(2)单位阶跃序列
(3)矩形序列
(4)正弦序列
X(n)=5sin(0.5πn+ π/4)
(5)指数序列
X(n)=exp(-0.5n)
3.用MATLAB生成以下两个序列:
并作以下运算,并绘制运算后序列的波形。
4.利用MATLAB读取一个WAV文件,并画出其波形图。将此WAV文件的信号幅度衰减一半后再存为另一个WAV文件。
四、实验报告要求
1. 按实验步骤附上实验程序。
附上运算结果。
实验二 求线性时不变系统的输出
一、实验目的:
1. 学习用递推法求解差分方程的方法。
2.& 学习用线性卷积法求网络输出的方法。
二、实验原理:
一般网络或系统用线性常系数差分方程描述,如果已知差分方程和输入信号,用递推法求解差分方程或者求网络输出,最适合用计算计求解。但要注意N阶差分方程要预先给定N个初始条件。下面用例子说明用递推法求解差分方程的方框图。例如一个二阶差分方程如下:
式中,系数、、 &、为已知系数,是输入序列。设是因果序列,,从开始递推。当时,
式中,和是两个初始条件,要预先给定。这样求解网络输出的计算框图如图1所示。
图2.1 用递推法求解差分方程的框图
图中,N表示递推了N步,即y(n)的长度。
如果用差分方程求系统的单位脉冲响应,也可以用上面的计算框图。因为是系统输入时的零状态响应,因此计算框图中全部的初始条件为0,且。这样递推得到。
已知和输入,求系统输出,可以用线性卷积法进行。线性卷积法的公式如下:
计算时,关键问题是根据和的特点,确定求和的上下限。例如,,,卷积公式为
根据上式中的,限制非零区间为:,由限制非零区间为:。由上面的不等式知道的取值和有关,可以分几种情况:
最后得到:
用计算机计算。更方便的是用MATLAB语言的数字信号工具箱函数conv计算两个从零开始的有限长序列的线性卷积。如果给定的和是一些离散数据,更适合用该语言进行计算。
三、实验用MATLAB函数介绍
功能:计算离散卷积、多项式相乘。
调用格式:yn=conv(hn,xn)
计算向量hn和xn的卷积,卷积结果向量为yn。如果用N和M分别表示hn和xn的长度,则yn的长度为N+M-1。如果hn和xn表示两个多项式的系数向量,则yn为两个多项式乘积的系数向量。
例如,程序:
hn=[1,1,1,1];& xn=[1,1,1,1]; yn=conv(hn,xn);
运行结果:
yn=[1 &2 &3 &4 &3 &2 &1]
功能:计算数字滤波器的单位脉冲响应。
调用格式:
[hn,n]=impz(B,A):计算出单位脉冲响应列向量hn,并返回时间列向量n。自动选择hn的样点数。调用参数B和A分别为数字滤波器系统函数的分子和分母多项式系数向量。
[hn,n]=impz(B,A,N):计算出单位脉冲响应N个样值。如果N是一个整数向量,则仅计算出这些整数点的单位脉冲响应样值。
如果调用时无输出参数,则完成响应的计算功能,并自动调用stem(n,hn)绘图。其他调用格式用help命令查看。
例如,本实验中,系统的差分方程对应的系统函数为
计算出单位脉冲响应50个样值,并给出绘图的程序如下:
A=[1,-0.9]; impz(B,A,50);
运行结果如图2.21所示。
图2.2 脉冲响应图
四、实验内容
1. 已知系统的差分方程如下式:
(1)输入信号=,初始条件,试用递推法求解输出;
(2)输入信号=,初始条件,试用递推法求解输出。
2. 已知系统差分方程为
用递推法求解系统的单位脉冲响应,要求写出的封闭公式,并打印曲线。
&3. 已知系统的单位脉冲响应,输入信号,试用卷积法求解系统输出,并打印~曲线。
五、实验报告要求
1.对实验内容进行理论分析,求出前三部分的理论推导结果。
2.对实验结果进行理论分析,并与理论结果进行对比。
实验三 时域采样定理
一、实验目的
熟悉并加深对采样定理的理解,了解采样信号的频谱和模拟信号频谱之间的关系。
二、实验原理
模拟信号经过理想采样,形成采样信号。采样信号的频谱和模拟信号频谱之间的关系如下:
此式告诉我们,采样信号的频谱是由模拟信号的频谱按照采样角频率周期性的延拓形成的,由此得到结论:采样频率必须大于等于模拟信号最高频率的两倍以上,才不会引起频率混叠。但用此式在计算机上进行计算不方便,下面我们将导出另外一个公式,以便在计算机上进行实验。
对模拟信号进行理想采样的公式如下式:
      (3.1)
对上式进行傅立叶变换,得到:
将上式的积分号和求和号交换次序,得到:
在上式的积分号内,只有当时,才有非零值,因此:
式中,在树值上等于由采样得到的时域离散信号,如果再将代入,得到:
         (3.2)
上式的右边就是序列的傅立叶变换,即:
         (3.3)
上式说明采样信号的傅立叶变换可用相应序列的傅立叶变换得到,只要将自变量用代替即可。
这里有一个问题要解释,采样信号的频谱是将模拟信号的频谱按照采样角频频率为周期,进行周期性延拓形成的,而序列的傅立叶变换是以为周期,这里是否一致?答案是肯定的。因为按照公式,当时,,因此序列的傅立叶变换以为周期,转换到模拟域就是以采样频率为周期。另外,是的折叠频率,如果产生频率混叠,就是在该处附近发生,在数字域中,就是在附近易产生频谱混叠。
有了以上的公式和概念,就可以用计算机研究对模拟信号的采样定理。
三、实验用MATLAB函数介绍
功能:一维快速傅立叶变换(FFT)。
Xk=fft(xn,N):采用FFT算法计算序列向量xn的N点DFT,缺省N时,fft函数自动按xn的长度计算xn的DFT。当N为2的整数次幂时,fft按基2算法计算,否则用混合基算法。
功能:一维快速逆傅立叶变换(IFFT)。
调用格式:与fft相同。
四、实验内容和步骤
1. 给定模拟信号如下:
假设式中A=444.128, , rad/s,将这些参数代入上式中,对进行傅立叶变换,得到,画出它的幅频特性,如图3.1所示。根据该曲线可以选择采样频率。
图3.1 的幅频特性曲线
2. 按照选定的采样频率对模拟信号进行采样,得到时域离散信号:
这里给定采样频率如下:,300Hz,200Hz。分别用这些采样频率形成时域离散信号,按顺序分别用、、表示。选择观测时间。
3. 计算的傅立叶变换:
  (3.4)
式中,,分别对应三种采样频率的情况。采样点数用下式计算:
         (3.5)
(4.4)式中,是连续变量。为用计算机进行数值计算,改用下式计算:
   (3.6)
式中,,,;。可以调用MATLAB函数fft计算4.6式。
4. 打印三种采样频率的幅度曲线,,;。
五、实验报告要求
1.简述实验原理
2.针对三种采样频率情况,进行分析讨论。
3.主要结论。
实验四 信号与系统的傅立叶分析
一、实验目的
用傅立叶变换对信号和系统进行频域分析。
二、实验原理
对信号进行频域分析就是信号进行傅立叶变换。对系统进行频域分析即对它的单位脉冲响应进行傅立叶变换,得到系统的传输函数。也可以由差分方程经过傅立叶变换直接求它的传输函数。传输函数代表的就是系统的频率响应特性。但传输函数是的连续函数,计算机只能计算出有限个离散频率点的传输函数值,因此得到传输函数以后,应该在之间取很多点,计算这些点的传输函数的值,并取它们的包络,该包络才是需要的频率特性。当然,点数取得多一些,该包络才能接近真正的频率特性。
注意,非周期信号的频率特性是的连续函数,而周期信号的频率特性是离散谱,它们的计算公式不一样,响应的波形也不一样。
三、实验内容
1. 已知系统用下面差分方程描述:
试在和两种情况下用傅立叶变换分析系统的频率特性。要求写出系统的传输函数,并打印曲线。
2. 已知两系统分别用下面差分方程描述:
试分别写出它们的传输函数,并分别打印曲线。
3. 已知信号,试分析它的频域特性,要求打印曲线。
4. 假设,将以2周期进行周期延拓,得到,试分析它的频率特性,并画出它的幅频特性。
四、实验用MATLAB函数介绍
功能:求绝对值(复数的模)。
y=abs(x):计算实数x的绝对值。当x为复数时得到x的模(幅度值)。
当x为向量时,计算其每个元素的模,返回模向量y。
功能:求相角
Ph=angle(x):计算复向量x的相角(red)。Ph值介于和+之间。
3. freqz:
计算数字滤波器的频率响应。
H=freqz(B,A,w):计算由向量w指定的数字频率点上数字滤波器的频率响应,结果存于H向量中。向量B和A分别为数字滤波器系统函数的分子和分母多项式系数。
[H,w]=freaz(B,A,M,’whole’):计算出M个频率点上的频率响应,存放在H向量中,M个频率存放在向量w中。Freqz函数自动将这M个频点均匀设置在频率范围[]上。缺省whole时,M个频点均匀设置在频率范围[ ]上。
调用参数B和A与系统函数的关系由下式给出:
    (4.1)
缺省w和M时,freqz自动选取512个频率点计算。不带输出向量的freqz函数将自动绘出幅频和相频曲线。其他几种调用格式可用命令help查阅。
freqz函数用于计算模拟滤波器的频率响应函数,详细功能及调用格式用help命令查看。
例如,八阶梳状滤波器系统函数为
用下面的简单程序绘出的幅频与相频特性曲线如图4.1所示。
%example for freqz
B=[1 0 0 0 0 0 0 0 -1];
Freqz(B,A)
图4.1 八阶梳状滤波器和相位曲线
五、实验报告要求
1. 对各实验内容进行理论分析和推导。
2. 分析各实验内容,并和理论分析推导结果进行对比。
实验五 极零点分布对系统频率响应的影响
一、实验目的
学习用分析零极点分布的几何方法分析研究信号和系统频率响应。
二、实验原理
如果知道信号的Z变换以及系统的系统函数,可以得到它们的零极点分布,由零极点分布可以很方便地对它们的频率响应进行定性分析。
按照教材分析结果,信号的幅度特性由零点矢量长度之积除以极点矢量的长度之积,当频率从0变化到时,观察零点矢量长度和极点矢量长度的变化,重点观察那些矢量长度较短的情况。另外,由分析知道,极点主要影响频率响应的峰值,极点愈靠近单位圆,峰值愈尖锐;零点主要影相频率特性的谷值,零点愈靠近单位圆,谷值愈深,如果零点在单位圆上,那么频率特性为零,根据这些规律可以定性画出频率响应的幅度特性。
峰值频率和谷值频率可以近似用响应的极点和零点的相角表示,例如极点,峰值频率近似为,极点愈靠近单位圆,估计法结果愈准确。
本实验借助计算机分析信号和系统的频率响应,目的是掌握用极、零点分布的几何分析法分析频率响应,实验时需要将代入信号的Z变换和系统函数中,再在之间,等间隔选择若干点,并计算它的频率响应。
[提示:本实验可以采取两种变成方法:①先求出系统函数,再调用MATLAB函数freqz计算比绘制幅频特性和相频特性曲线;②先求出系统的函数的封闭表达式,再编程序计算其在给定离散频率点上的值,最后调用函数abs,求出模值并打印曲线。]
三、实验内容
1. 假设系统用下面差分方程描述:
假设a=0.7,0.8,0.9,分别在三种情况下分析系统的频率特性,并打印幅度特性曲线。
2. 假设系统用下面差分方程描述:
假设a=0.7,0.8,0.9,分别在三种情况下分析系统的频率特性,并打印幅度特性曲线。
3. 假设系统函数用下式描述:
试分析它的频率特性,要求打印其幅度特性曲线,并求出峰值频率和谷值频率。
四、实验报告要求
1. 将以上三部分分别用零、极点分布进行理论分析,画出幅度特性曲线,求出峰值频率和谷值频率。
2. 将实验结果和理论分析结果进行比较。
3. 总结零、极点分布对频率响应的影相。
实验六 用DFT(FFT)对时域离散信号的频谱分析
一、实验目的
学习DFT的基本性质及对时域离散信号进行频谱分析的方法。
二、实验内容
给定参考实验信号如下:
:用以8为周期进行周期性延拓形成的周期序列。
(1) 分别以变换区间N=8,16,32,对进行DFT(FFT),画出相应的幅频特性曲线;
(2) 分别以变换区间N=8,16,对,分别进行DFT(FFT),画出相应的幅频特性曲线;
(3) 分别以变换区间N=4,8,16,分别进行DFT(FFT),画出相应的幅频特性曲线;
(4) 对进行频谱分析,并选择变换区间,画出幅频特性曲线。
以上各序列的DFT(FFT)均可调用MATLAB信号处理工具箱函数fft计算。
三、实验报告
1. 分析讨论
(1) 用实验内容中的(1)分析DFT的变换区间对频域分析的作用,并说明DFT的物理意义。
(2) 对于实验内容(2),分析当N=8时,两个信号的幅频特性为什么一样,而N=16时又不一样。
(3) 对于实验内容(3),是一个周期信号,画出它的理论幅度频谱特性。对照理论结果,分析该周期信号的变换区间应该如何选取。如果周期信号的周期预先不知道,如何用DFT分析它的频谱。
(4) 对于实验内容(4),对照理论结果,分析实验结果。
2. 根据以上的实验内容和分析讨论,写出自己认为重要的几点结论。
四、实验用MATLABA函数简洁
本实验要用到一维快速傅立叶变换函数fft、取模(实数取绝对值)函数abs和求相位角函数angle、绘图函数plot和stem。这些函数都属于MATLAB基本函数,fft和ifft已在实验三中介绍过。
下面的简单程序就可以实现计算矩形序列的32点FFT,并画出幅频特性和相频特性曲线。
%ex1.m:几个函数调用举例:
x1n=[1 1 1 1 ];     %计算32点fft
xlk=fft(xln,32);    %计算32点fft的模
ph1=angle(x1k);    %计算32点fft的相位
k=0:31;       %以下为绘图部分
subplot(2,1,1); stem(k,x1m,’.’);
Xlabel(‘k’); ylabel(‘幅度’)
suplot(2,1,2); stem(k,ph1,’.’); grid on
xlabel(‘k’); ylabel(‘相位’)
图6.1 矩形序列的32点DFT图
实验七 用DFT(FFT)对连续信号进行频谱分析
一、实验目的
学习用DFT(FFT)对模拟信号进行谱分析的原理,了解可能产生的各种误差。
二、实验原理
如果用FFT对模拟信号进行谱分析,首先要把模拟信号转换成数字信号,转换时要求知道模拟信号的最高截至频率,以便选择满足采样定理的采样频率。一般选择采样频率是模拟信号中最高频率的3~4倍。另外要选择对模拟信号的观测时间,如果采样频率和观测时间确定,则采样点数也确定了。这里观测时间和对模拟信号进行谱分析的分辨率有关,最小的观测时间和分辨率成倒数关系。最小的采样点数用教材相关公式确定。要求选择的采样点数和观测时间大于它的最小值。
用FFT做谱分析时,要求做FFT的点数服从2的整数幂,这一点在上面选择采样点数可以考虑满足,即使满足不了,可以通过在序列尾部加0完成。
如果要进行谱分析的模拟信号是周期信号,最好选择观测时间是信号周期的整数倍。如果不知道信号的周期,要尽量选择观测时间长一些,以减少阶段效应的影响。
用FFT对模拟信号作谱分析是一种近似的谱分析,首先一般模拟信号(除周期信号以外)的频谱是连续谱,而用FFT作谱分析得到的是数字谱,因此应该取FFT的点数多一些,用它的包络作为模拟信号的近似谱。另外,如果模拟信号不是严格的带限信号,会因为频谱混叠现象引起谱分析的误差,这种情况下可以预先将模拟信号进行滤波,或者尽量采样频率取高一些。
一般频率混叠发生在折叠频率附近,分析时要注意因频率混叠引起的误差。最后要注意一般模拟信号是无限长的,分析时要截断,截断的长度和分辨率有关,但也要尽量取长一些,取得太短会截断引起的误差会很大。举一个极端的例子,一个周期性正弦波,如果所取观察时间太短,例如取小于一个周期,它的波形和正弦波相差太大,肯定误差很大,但如果取得长一些,即使不是周期的倍数,这种截断效应也会小一些。
三、实验内容和步骤
1.实验信号:
选择,式中的波形以及幅度特性如图7.1所示。
式中频率自己选择。
2.分别对三种模拟信号选择采样频率和采样点数。
对,选择采样频率,8,16,采样点数用.计算。
对,周期,频率自己选择,采样频率,观测时间,,,采样点数用计算。
图7.1 R(t)的波形及其幅度特性
对,选择采用频率,采样点数频率为16,32,64。
3. 分别对它们转换成序列,按顺序用表示。
4. 分别对它们进行FFT。如果采样点数不满足2的整数幂,可以通过序列尾部加0满足。
5. 计算幅度特性并进行打印。
四、实验报告要求
1. 简述实验原理,重点放在采样频率、采样点数以及周期性信号的考虑上。
2. 针对三种不同信号和选取的不同参数进行分析讨论。
3. 主要结论。
实验八 IIR滤波器的设计
一、实验目的
设计IIR滤波器,实现对存在加性干扰的时域离散信号进行滤波。
二、实验内容
已知带加性干扰的信号表示,,式中是有用的信号,是一个rad的带限信号。是一个干扰信号,其频谱分布在rad以上。要求设计一个巴特沃斯IIR数字滤波器对信号进行滤波,将干扰滤除。要求在所在的通带内滤波器幅度平坦,在0.2rda处幅度衰减不大于1dB,在噪声所在的rad以上的频带内滤波器幅度衰减大于等于40dB。
三、实验步骤
1. 根据题目要求确定要设计的数字滤波器的技术指标;
2. 将上面的技术指标转换为巴特沃思模拟滤波器的技术指标;
3. 设计该模拟滤波器;
4. 用双线性变换法将设计的模拟滤波器转换为数字滤波器,要求求出该滤波器的系统函数;
5. 画出该滤波器的幅度特性曲线;
6. 根据该滤波器的系统函数画出它的直接型网络结构图;
7. 根据1所确定的技术指标,调用MATLAB函数buttord和butter,直接设计数字滤波器,观察设计结果与上面用双线性变换的设计结果是否相同。
8. 滤波仿真:调用MATLAB工具箱函数filter对下面给出的带加性干扰的信号进行滤波,观察滤波效果(绘制滤波信号前后的时域和频域波形)。
四、实验用MATLAB函数简介
功能:一维数字滤波器直接Ⅱ型实现函数。
yn=filter(B,A,xn):按直接Ⅱ型实现结构对输入信号向量xn滤波,返回滤波器输出信号向量yn,调用参数B和A分别为滤波器系统函数的分子和分母多项式系数向量,其实质是求解差分方程
如果不等于1时,则对系数关于归一后计算输出信号。当A=1时,对应FIRDF的直接Ⅱ型实现。
五、实验报告要求
1. 写出所设计的数字滤波器的主要技术指标,它的系统函数、网络结构。
2. 写出仿真滤波试验的结果。
实验九 FIR滤波器的设计
一、实验目的
复习巩固窗函数法设计FIR滤波器的概念和方法,观察用几种常用窗函数设计的FIR数字滤波器技术指标。
二、实验内容
要求用窗函数法设计一个线性相位FIR低通滤波器,用理想低通滤波器作为逼近滤波器,截至频率rad,用四中窗函数(矩形窗,汉宁窗(升余弦窗),哈明窗(改进的升余弦窗),布莱克曼窗)设计该滤波器,选择窗函数的长度N=15,33两种情况。
三、实验步骤
1. 写出理想低通滤波器的传输函数和单位脉冲相应。
2. 分别写出用四种窗函数设计的滤波器的单位脉冲相应。
3. 对于N=15,33两种情况,利用FFT分别求出四种窗函数设计的滤波器的幅度特性和相位特性,并画出它们的幅度特性和相位特性曲线。
4. 调用窗函数法设计函数fir1。
四、实验用MATLAB函数
可以调用MATLAB工具箱fir1实现本实验所要求的线性相位FIRDF的设计,调用一维快速傅立叶变换函数fft来计算滤波器的频率相应函数。工具箱函数fir1见帮助文件介绍。
五、实验报告要求
1. 总结用窗函数法设计FIR滤波器的步骤。
2. 比较四种窗函数设计的滤波器的技术指标,技术指标可以选择:阻带最小衰减和过渡带宽度。
3. 总结窗函数的形式和长度对设计滤波器的影相,及选择窗函数的依据。
附录: 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)发行说明书窗口
发行说明书窗口是MATLAB 6.x版本所特有的,用来说明用户所拥有的Mathworks公司产品的工具包、演示以及帮助信息。在主窗口的“View”菜单下选择“Launch Pad”命令,可以打开或关闭该窗口。
(6)工作间窗口
在主窗口的“View”菜单下选择“Workspace”命令,可以打开或关闭MATLAB的工作间窗口,工作间窗口是MATLAB的重要组成部分。
3、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+关键字,查讯相关函数,等等。
(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]
&&& 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]&&&
随机矩阵:rand(m,n)产生一个m×n的均匀分布的随机矩阵
randn(m,n)&&&& &&&%生成m×n正态分布随机矩阵
8、矩阵运算
1) 加、减运算
运算符:“+”和“-”分别为加、减运算符。
运算规则:对应元素相加、减,即按线性代数中矩阵的“十”,“一”运算进行。
2) &乘法运算
运算规则:按线性代数中矩阵乘法运算进行,即放在前面的矩阵的各行元素,分别与放在后面的矩阵的各列元素对应相乘并相加。
向量的点乘(内积):维数相同的两个向量的点乘。 A.*B表示A与B对应元素相乘。
矩阵的卷积和多项式乘法,函数& conv实现:格式& w = conv(u,v) &&%u、v为向量,其长度可不相同。
3) 除法运算
MATLAB提供了两种除法运算:左除(\)和右除(/)。一般情况下,x=a\b是方程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*
&&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个小窗口中创建一新坐标轴,并将新的坐标轴成为当前坐标轴。
&功能& 画二维离散数据的柄形图。该图用线条显示数据点与x轴的距离,一小圆圈(缺省标记)或用指定的其他标记符号与线条相连,在y轴上标记数据点的值。&
&11、输入输出语句
&&& &MATLAB可以用load语句输入磁盘中存储的数据。数据可以用ASCII码按行、列存放在文件中,执行load命令后,MATLAB用此文件名(不包括后缀)作为当前的变量名。MATLAB本身的存储格式——二进制的“.mat”文件也使用load命令装入。
save命令将工作空间中的变量以二进制格式或ASCII格式存入到磁盘文件中。
对于其它特定格式的数据文件,MATLAB提供了像C语言一样的输入、输出语句,例如:fopen、fread、fwrite等。一般的输入、输出应优先选择load和save命令来完成。
MATLAB还可以直接读写后缀为WAV的声音文件,格式如下:
fs, bits]=wavread(‘filename.wav’);
y是声音数据的数组, fs是声音信号的采样频率,单位Hz,
bits是采样样本的二进制位数。
下面语句可形成一个后缀为WAV的声音文件:
wavwrite(y,fs,bits,
‘filename.wav’);

我要回帖

更多关于 数字信号处理dft例题 的文章

 

随机推荐