MATLAB音频信号的分析与合成程序.ppt
《MATLAB音频信号的分析与合成程序.ppt》由会员分享,可在线阅读,更多相关《MATLAB音频信号的分析与合成程序.ppt(36页珍藏版)》请在冰豆网上搜索。
1,第二讲MATLAB的,21脚本文件和函数文件22函数调用和参数传递23MATLAB的程序结构和控制流24M文件的调试25程序设计实例251音频信号的分析与合成252音频频谱分析仪253幅度调制,程序设计,1,2,21脚本文件和函数文件,211M脚本文件,对于一些比较简单的问题,在指令窗中直接输入指令计算。
对于复杂计算,采用脚本文件(Scriptfile)最为合适。
MATLAB只是按文件所写的指令执行。
M脚本文件的特点是:
脚本文件的构成比较简单,只是一串按用户意图排列而成的(包括控制流向指令在内的)MATLAB指令集合。
脚本文件运行后,所产生的所有变量都驻留在MATLAB基本工作空间(Baseworkspace)中。
只要用户不使用清除指令(clear),MATLAB指令窗不关闭,这些变量将一直保存在基本工作空间中。
M文件有两种形式:
脚本文件(ScriptFile)和函数文件(FunctionFile)。
这两种文件的扩展名,均为“.m”。
2,3,21脚本文件和函数文件(续1),212M函数文件,与脚本文件不同,函数文件犹如一个“黑箱”,把一些数据送进并经加工处理,再把结果送出来。
MATLAB提供的函数指令大部分都是由函数文件定义的。
M函数文件的特点是:
从形式上看,与脚本文件不同,函数文件的笫一行总是以“function”引导的“函数申明行”。
从运行上看,与脚本文件运行不同,每当函数文件运行,MATLAB就会专门为它开辟一个临时工作空间,称为函数工作空间(Functionworkspace)。
当执行文件最后一条指令时,就结束该函数文件的运行,同时该临时函数空间及其所有的中间变量就立即被清除。
MATLAB允许使用比“标称数目”较少的输入输出宗量,实现对函数的调用。
3,4,21脚本文件和函数文件(续2),213M文件的一般结构,由于从结构上看,脚本文件只是比函数文件少一个“函数申明行”,所以只须描述清楚函数文件的结构。
典型M函数文件的结构如下:
函数申明行:
位于函数文件的首行,以关键字functio开头,函数名以及函数的输入输出宗量都在这一行被定义。
笫一注释行:
紧随函数申明行之后以%开头笫一注释行。
该行供lookfor关键词查询和help在线帮助使用。
在线帮助文本区:
笫一注释行及其之后的连续以%开头的所有注释行构成整个在线帮助文本。
编写和修改记录:
与在线帮助文本区相隔一个“空”行,也以%开头,标志编写及修改该M文件的作者和日期等。
函数体:
为清晰起见,它与前面的注释以“空”行相隔。
例2_2_1:
M函数文件示例。
4,5,22函数调用和参数传递,221局部变量和全局变量,局部(Local)变量:
它存在于函数空间内部的中间变量,产生于该函数的运行过程中,其影响范围也仅限于该函数本身。
全局(Global)变量:
通过global指令,MATLAB也允许几个不同的函数空间以及基本工作空间共享同一个变量,这种被共享的变量称为全局变量。
222函数调用,在MATLAB中,调用函数的常用形式是:
输出参数1,输出参数2,=函数名(输入参数1,输入参数2,),函数调用可以嵌套,一个函数可以调用别的函数,甚至调用它自己(递归调用)。
5,6,22函数调用和参数传递(续),223参数传递,MATLAB在函数调用上有一个与众不同之处:
函数所传递的参数具有可调性。
传递参数数目的可调性来源于如下两个MATLAB永久变量:
函数体内的nargin给出调用该函数时的输入参数数目。
函数体内的nargout给出调用该函数时的输出参数数目。
只要在函数文件中包括这两个变量,就可以知道该函数文件调用时的输入参数和输出参数数目。
值得注意:
nargin、nargout本身都是函数,不是变量,所以用户不能赋值,也不能显示。
“变长度”输入输出宗量:
varargin、varrgout。
具有接受“任意多输入”、返回“任意多输出”的能力。
跨空间变量传递:
evalin。
(参考:
circle.m,am1.m),6,7,23MATLAB的程序结构和控制流,231程序结构,循环结构:
MATLAB提供两种循环方式。
顺序结构,分支结构:
ifelseend。
forend循环和while-end循环。
232程序流控制,常用指令:
return,echo,input,pause,keyboard,break。
switch-case结构。
try-catch结构。
警示指令:
error,warning。
7,8,23MATLAB的程序结构和控制流(续),233图形用户界面(GUI)编程,现代的主流应用程序已经从命令行的交互方式转变为以图形界面为主的交互方式,这主要是由于它给用户带来了操作和控制的方便与灵活性。
(面向对象编程),MATLAB能够以比较简单的方式实现一系列的图形界面功能。
通过对控件、菜单属性的设置和Callback的编写,就能够满足大多数用户的需求。
控件的Callback属性:
Callback属性的取值是字符串,可以是某个M文件名或一小段MATLAB语句。
当用户激活控件对象(例如:
在控件对象图标上单击鼠标左键)时,应用程序就运行Callback属性定义的子程序。
菜单的Callback属性:
Callback属性的取值是字符串,可以是某个M文件名或一小段MATLAB语句。
当用户激活菜单对象时,若没有子菜单就运行Callback属性定义的子程序。
若有,先运行Callback属性定义的子程序,再显示子菜单。
8,9,24M文件的调试,编写M文件时,错误(Bug)在所难免。
错误有两种:
语法(Syntax)错误和运行(Run-time)错误。
语法错误是指变量名、函数名的误写,标点符号的缺、漏等。
对于这类错误,通常能在运行时发现,终止执行,并给出相应的错误原因以及所在行号。
运行错误是算法本身引起的,发生在运行过程中。
相对语法错误而言,运行错误较难处理。
尤其是M函数文件,它一旦运行停止,其中间变量被删除一空,错误很难查找。
有两种调试方法:
直接调试法和工具调试法。
9,10,24M文件的调试(续1),直接调试法:
可以用下面方法发现某些运行错误。
在M文件中,将某些语句后面的分号去掉,迫使M文件输出一些中间计算结果,以便发现可能的错误。
在适当的位置,添加显示某些关键变量值的语句(包括使用disp在内)。
利用echo指令,使运行时在屏幕上逐行显示文件内容。
echoon能显示M脚本文件;echoFunNsmeon能显示名为FunNsme的M函数文件。
在原M脚本或函数文件的适当位置,增添指令keyboard。
keyboard语句可以设置程序的断点。
通过将原M函数文件的函数申明行注释掉,可使一个中间变量难于观察的M函数文件变为一个所有变量都保留在基本工作空间中的M脚本文件。
10,11,24M文件的调试(续2),GUI界面调试法:
MATLAB5.x版提供了一个基于GUI界面的调试。
使用它,可以对函数进行调试。
Debug菜单的使用:
Continue:
恢复程序运行至结束或另一个断点。
SingleStep:
单步执行函数。
StepIn:
深入下层局部工作区。
QuitDebugging:
退出调试状态。
Set/ClearBreakpoint:
设置/清除光标处的断点。
ClearAllBreakpoints:
清除程序中的所有断点。
StopifError:
运行至出错或结束。
StopifWarning:
运行至警告消息或结束。
StopifNaNofInf:
运行至运算结果出现NaN或Inf。
11,12,25程序设计实例,251音频信号的分析与合成,(韩利竹P262-sigspec.m,stereospec.m),采用MATLAB分析WAV文件。
步骤一:
选择一个WAV文件作为分析的对象。
(ding.wav),步骤二:
读WAV文件数据并画时域图形。
步骤三:
进行FFT变换并画频域图形。
步骤四:
进行该声波主要频谱的分析。
步骤五:
根据该声音的频谱,反演时域图形。
(有失真),常用函数:
x,fs,bits=waveread(filename),d=FFT(w,l),sound(w,fs,bits),步骤六:
进行付立叶逆变换IFFT并画频域图形。
12,13,252音频频谱分析仪,(车晴P199-audspec.m),M函数文件audspec.m用于对音频频谱分析仪进行仿真,它通过鼠标来选择一个WAV文件,它可以播放该声音文件、显示音频输入信号的波形和频谱。
WAV文件的输入方式采用uigetfile函数,该函数打开一个标准的对话框,然后可以选择声音文件的路径和文件的名称。
信号波形生成使用绘图函数就可以完成,而信号的频谱是通过快速付立叶变换而得到的。
常用函数:
strcmp(action,initialized);,strcmp(action,Play);,strcmp(action,Zoom);,strcmp(action,Spectrum);,13,14,253幅度调制,(车晴P203-am.m),幅度调制,即载波幅度随调制信号变化的调制(AM)。
幅度调制有多种实现方式,包括:
标准幅度调制(SAM),双边带幅度调制(DSB-AM),单边带幅度调制(SSB),残留边带调制(VSB)和平衡正交幅度调制(QAM)等。
假定调制信号为m(t),其幅度为1v,载波信号为,各种调幅方式的已调波的表达式如下:
SAM:
是调制度。
DSB-AM:
SSB:
是调制信号的希尔伯特变换。
QAM:
14,15,M脚本文件入门,返回,通过M脚本文件,画出下列分段函数所表示的曲面。
(s_file.m),15,16,M脚本文件入门(续),返回,%s_file.mThisismyfirstexample.a=2;b=2;clf;x=-a:
0.2:
a;y=-b:
0.2:
b;fori=1:
length(y)forj=1:
length(x)ifx(j)+y(i)1z(i,j)=0.5457*exp(-0.75*y(i)2-3.75*x(j)2-1.5*x(j);elseifx(j)+y(i)=-1z(i,j)=0.5457*exp(-0.75*y(i)2-3.75*x(j)2+1.5*x(j);elsez(i,j)=0.7575*exp(-y(i)2-6.*x(j)2);endendendaxis(-a,a,-b,b,min(min(z),max(max(z);colormap(flipud(winter);surf(x,y,z);,16,17,例2_2_1:
M函数文件示例。
返回,sa=circle(r,s)%CIRCLEplotacircleofradiirinthelinespecifiedbys.%r指定半径的数值%s指定线色的字符串%sa圆面积%circle(r)利用蓝实线画半径为r的圆周线.%circle(r,s)利用串s指定的线色画半径为r的圆周线.%sa=circle(r)计算圆面积,并画半径为r的蓝色圆面.%sa=circle(r,s)计算圆面积,并画半径为r的s色圆面.%编写于1999年4月7日,修改于1999年8月27日。
张志涌EX8.4.4.-1(P299)程序文本。
17,18,控件的Callback属性,返回,M2_ex2_3_1.m(张志涌P426),对于传递函数为的归一化二阶系统,制作一个能绘制该系统单位阶跃响应的图形用户界面。
在编辑框输入0.3,可以看到一根曲线。
在编辑框输入0.1:
0.1:
1,可以看到十根曲线。
本例设置断点演示:
(A)图形界面的大致生成过程;,(B)静态文本和编辑框的生成;,(C)坐标方格控制键的形