MATLAB音频信号的分析与合成程序.ppt
- 文档编号:18913573
- 上传时间:2024-02-11
- 格式:PPT
- 页数:36
- 大小:224KB
MATLAB音频信号的分析与合成程序.ppt
《MATLAB音频信号的分析与合成程序.ppt》由会员分享,可在线阅读,更多相关《MATLAB音频信号的分析与合成程序.ppt(36页珍藏版)》请在冰点文库上搜索。
第二讲第二讲MATLAB的的21脚本文件和函数文件脚本文件和函数文件22函数调用和参数传递函数调用和参数传递23MATLAB的程序结构和控制流的程序结构和控制流24M文件的调试文件的调试25程序设计实例程序设计实例251音频信号的分析与合成音频信号的分析与合成252音频频谱分析仪音频频谱分析仪253幅度调制幅度调制程序设计程序设计121脚本文件和函数文件脚本文件和函数文件211M脚本文件脚本文件对于一些比较简单的问题对于一些比较简单的问题,在指令窗中直接输入指令计算,在指令窗中直接输入指令计算。
对于复杂计算,采用脚本文件(对于复杂计算,采用脚本文件(Scriptfile)最为合适最为合适。
MATLAB只是按文件所写的指令执行只是按文件所写的指令执行。
M脚本文件的特点是:
脚本文件的特点是:
脚本文件的构成比较简单,只是一串按用户意图排列而成的脚本文件的构成比较简单,只是一串按用户意图排列而成的(包括控制流向指令在内的)(包括控制流向指令在内的)MATLAB指令集合。
指令集合。
脚本文件运行后脚本文件运行后,所产生的所有变量都驻留在,所产生的所有变量都驻留在MATLAB基基本工作空间本工作空间(Baseworkspace)中中。
只要用户不使用清除指只要用户不使用清除指令(令(clear),),MATLAB指令窗不关闭,这些变量将一直保指令窗不关闭,这些变量将一直保存在存在基本工作空间基本工作空间中中。
M文件有两种形式文件有两种形式:
脚本文件(脚本文件(ScriptFile)和函数文件和函数文件(FunctionFile)。
)。
这两种文件的扩展名,均为这两种文件的扩展名,均为“.m”。
221脚本文件和函数文件(脚本文件和函数文件(续续续续11)212M函数文件函数文件与脚本文件不同与脚本文件不同,函数文件犹如一个,函数文件犹如一个“黑箱黑箱”,把一些数据,把一些数据送进并经加工处理,再把结果送出来。
送进并经加工处理,再把结果送出来。
MATLAB提供的函数指令大部分都是由函数文件定义的。
提供的函数指令大部分都是由函数文件定义的。
M函数文件的特点是:
函数文件的特点是:
从形式上看从形式上看,与脚本文件不同,与脚本文件不同,函数文件的笫一行总是以,函数文件的笫一行总是以“function”引导的引导的“函数申明行函数申明行”。
从运行上看从运行上看,与脚本文件运行不同,与脚本文件运行不同,每当函数文件运行,每当函数文件运行,MATLAB就会专门为它开辟一个临时工作空间,称为就会专门为它开辟一个临时工作空间,称为函数函数工作空间工作空间(Functionworkspace)。
当执行文件最后一条。
当执行文件最后一条指令时指令时,就结束该函数文件的运行,同时该临时函数空间,就结束该函数文件的运行,同时该临时函数空间及其所有的中间变量就立即被清除。
及其所有的中间变量就立即被清除。
MATLAB允许使用比允许使用比“标称数目标称数目”较少的输入输出宗量,较少的输入输出宗量,实现对函数的调用实现对函数的调用。
321脚本文件和函数文件(脚本文件和函数文件(续续续续22)213M文件的一般结构文件的一般结构由于从结构上看由于从结构上看,脚本文件只是比函数文件少一个,脚本文件只是比函数文件少一个“函数申函数申明行明行”,所以只须描述清楚函数文件的结构,所以只须描述清楚函数文件的结构。
典型典型M函数文件的结构如下函数文件的结构如下:
函数申明行:
位于函数文件的首行,以关键字函数申明行:
位于函数文件的首行,以关键字functio开头,开头,函数名以及函数的输入输出宗量都在这一行被定义。
函数名以及函数的输入输出宗量都在这一行被定义。
笫一注释行:
紧随函数申明行之后以笫一注释行:
紧随函数申明行之后以%开头笫一注释行。
该开头笫一注释行。
该行供行供lookfor关键词查询和关键词查询和help在线帮助使用在线帮助使用。
在线帮助文本区在线帮助文本区:
笫一注释行及其之后的连续以:
笫一注释行及其之后的连续以%开头的所开头的所有注释行构成整个在线帮助文本。
有注释行构成整个在线帮助文本。
编写和修改记录:
与在线帮助文本区相隔一个编写和修改记录:
与在线帮助文本区相隔一个“空空”行,也行,也以以%开头,标志编写及修改该开头,标志编写及修改该M文件的作者和日期等文件的作者和日期等。
函数体:
为清晰起见,它与前面的注释以函数体:
为清晰起见,它与前面的注释以“空空”行相隔。
行相隔。
例例2_2_1:
M函数文件示函数文件示例例。
422函数调用和参数传递函数调用和参数传递221局部变量和全局变量局部变量和全局变量局部(局部(Local)变量:
它存在于函数空间内部的中间变量,变量:
它存在于函数空间内部的中间变量,产生于该函数的运行过程中,其影响范围也仅限于该函数本产生于该函数的运行过程中,其影响范围也仅限于该函数本身身。
全局(全局(Global)变量:
通过变量:
通过global指令,指令,MATLAB也允许几也允许几个不同的函数空间以及基本工作空间共享同一个变量,这种被个不同的函数空间以及基本工作空间共享同一个变量,这种被共享的变量称为全局变量。
共享的变量称为全局变量。
222函数调用函数调用在在MATLAB中,调用函数的常用形式是:
中,调用函数的常用形式是:
输出参数输出参数1,输出参数输出参数2,=函数名函数名(输入参数输入参数1,输入参数输入参数2,)函数调用可以嵌套,一个函数可以调用别的函数,甚至调函数调用可以嵌套,一个函数可以调用别的函数,甚至调用它自己用它自己(递归调用)。
(递归调用)。
522函数调用和参数传递(函数调用和参数传递(续)续)续)续)223参数传递参数传递MATLAB在函数调用上有一个与众不同之处在函数调用上有一个与众不同之处:
函数所传递的:
函数所传递的参数具有可调性参数具有可调性。
传递参数数目的可调性来源于如下两个传递参数数目的可调性来源于如下两个MATLAB永久变量:
永久变量:
函数体内的函数体内的nargin给出调用该函数时的输入参数数目。
给出调用该函数时的输入参数数目。
函数体内的函数体内的nargout给出调用该函数时的输出参数数目。
给出调用该函数时的输出参数数目。
只要在函数文件中包括这两个变量,就可以知道该函数文件只要在函数文件中包括这两个变量,就可以知道该函数文件调用时的输入参数和输出参数数目。
调用时的输入参数和输出参数数目。
值得注意:
值得注意:
nargin、nargout本身都是函数本身都是函数,不是变量,所不是变量,所以用户不能赋值,也不能显示。
以用户不能赋值,也不能显示。
“变长度变长度”输入输出宗量:
输入输出宗量:
varargin、varrgout。
具有接受具有接受“任意多输入任意多输入”、返回、返回“任意多输出任意多输出”的能力的能力。
跨空间变量传递:
跨空间变量传递:
evalin。
(参考(参考:
circle.m,am1.m)623MATLAB的程序结构和控制流的程序结构和控制流231程序结构程序结构循环结构:
循环结构:
MATLAB提供两种循环方式。
提供两种循环方式。
顺序结构顺序结构分支结构:
分支结构:
ifelseend。
forend循环和循环和while-end循环。
循环。
232程序流控制程序流控制常用指令:
常用指令:
return,echo,input,pause,keyboard,break。
switch-case结构。
结构。
try-catch结构。
结构。
警示指令:
警示指令:
error,warning。
723MATLAB的程序结构和控制流(的程序结构和控制流(续)续)续)续)233图形用户界面(图形用户界面(GUI)编程编程现代的主流应用程序已经从命令行的交互方式转变为以图现代的主流应用程序已经从命令行的交互方式转变为以图形界面为主的交互方式,这主要是由于它给用户带来了操作形界面为主的交互方式,这主要是由于它给用户带来了操作和控制的方便与灵活性。
和控制的方便与灵活性。
(面向对象编程)(面向对象编程)MATLAB能够以比较简单的方式实现一系列的图形界面功能够以比较简单的方式实现一系列的图形界面功能。
通过对控件、菜单属性的设置和能。
通过对控件、菜单属性的设置和Callback的编写,就能的编写,就能够满足大多数用户的需求。
够满足大多数用户的需求。
控件的控件的Callback属性属性:
Callback属性的取值是字符串,可属性的取值是字符串,可以是某个以是某个M文件名或一小段文件名或一小段MATLAB语句语句。
当用户激活控件当用户激活控件对象(对象(例例如如:
在控件对象图标上单击鼠标左键:
在控件对象图标上单击鼠标左键)时,应用程)时,应用程序就运行序就运行Callback属性定义的子程序。
属性定义的子程序。
菜单的菜单的Callback属性属性:
Callback属性的取值是字符串,可属性的取值是字符串,可以是某个以是某个M文件名或一小段文件名或一小段MATLAB语句语句。
当用户激活菜单当用户激活菜单对象时,若没有子菜单就运行对象时,若没有子菜单就运行Callback属性定义的子程序。
属性定义的子程序。
若有,先运行若有,先运行Callback属性定义的子程序,再显示子菜单。
属性定义的子程序,再显示子菜单。
824M文件的调试文件的调试编写编写M文件时,错误(文件时,错误(Bug)在所难免。
错误有两种:
语法在所难免。
错误有两种:
语法(Syntax)错误和运行(错误和运行(Run-time)错误。
错误。
语法错误是指变量名、函数名的误写,标点符号的缺、漏等。
语法错误是指变量名、函数名的误写,标点符号的缺、漏等。
对于这类错误,通常能在运行时发现,终止执行,并给出相应对于这类错误,通常能在运行时发现,终止执行,并给出相应的错误原因以及所在行号。
的错误原因以及所在行号。
运行错误是算法本身引起的,发生在运行过程中。
相对语法运行错误是算法本身引起的,发生在运行过程中。
相对语法错误而言,运行错误较难处理错误而言,运行错误较难处理。
尤其是。
尤其是M函数文件,它一旦运函数文件,它一旦运行停止,其中间变量被删除一空,错误很难查找。
行停止,其中间变量被删除一空,错误很难查找。
有两种调试方法:
直接调试法和工具调试法。
有两种调试方法:
直接调试法和工具调试法。
924M文件的调试(文件的调试(续续续续11)直接调试法:
可以用下面方法发现某些运行错误。
直接调试法:
可以用下面方法发现某些运行错误。
在在M文件中,将某些语句后面的分号去掉,文件中,将某些语句后面的分号去掉,迫使迫使M文件输文件输出一些中间计算结果,以便发现可能的错误。
出一些中间计算结果,以便发现可能的错误。
在适当的位置,添加显示某些关键变量值的语句(包括使在适当的位置,添加显示某些关键变量值的语句(包括使用用disp在内)。
在内)。
利用利用echo指令,使运行时在屏幕上逐行显示文件内容。
指令,使运行时在屏幕上逐行显示文件内容。
echoon能显示能显示M脚本文件;脚本文件;echoFunNsmeon能显示名为能显示名为FunNsme的的M函数文件。
函数文件。
在原在原M脚本或函数文件的适当位置,增添指令脚本或函数文件的适当位置,增添指令keyboard。
keyboard语句可以设置程序的断点语句可以设置程序的断点。
通过将原通过将原M函数文件的函数申明行注释掉,可使一个中间函数文件的函数申明行注释掉,可使一个中间变量难于观察的变量难于观察的M函数文件变为一个所有变量都保留在基函数文件变为一个所有变量都保留在基本工作空间中的本工作空间中的M脚本文件。
脚本文件。
1024M文件的调试(文件的调试(续续续续22)GUI界面调试法:
界面调试法:
MATLAB5.x版提供了一个基于版提供了一个基于GUI界面的调试。
使用它,界面的调试。
使用它,可以对函数进行调试。
可以对函数进行调试。
Debug菜单的使用:
菜单的使用:
Continue:
恢复程序运行至结束或另一个断点恢复程序运行至结束或另一个断点。
SingleStep:
单步执行函数。
单步执行函数。
StepIn:
深入下层局部工作区深入下层局部工作区。
QuitDebugging:
退出调试状态。
退出调试状态。
Set/ClearBreakpoint:
设置设置/清除光标处的断点清除光标处的断点。
ClearAllBreakpoints:
清除程序中的所有断点清除程序中的所有断点。
StopifError:
运行至出错或结束。
运行至出错或结束。
StopifWarning:
运行至警告消息或结束。
运行至警告消息或结束。
StopifNaNofInf:
运行至运算结果出现运行至运算结果出现NaN或或Inf。
1125程序设计实例程序设计实例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并画频域图形并画频域图形。
12252音频频谱分析仪音频频谱分析仪(车晴车晴P199-audspec.m)M函数文件函数文件audspec.m用于对用于对音频频谱分析仪音频频谱分析仪进行仿真,它进行仿真,它通过鼠标来选择一个通过鼠标来选择一个WAV文件,它可以播放该声音文件、显文件,它可以播放该声音文件、显示示音频音频输入信号的波形和频谱。
输入信号的波形和频谱。
WAV文件的输入方式采用文件的输入方式采用uigetfile函数,该函数打开一个标函数,该函数打开一个标准的对话框,然后可以选择声音文件的路径和文件的名称。
准的对话框,然后可以选择声音文件的路径和文件的名称。
信号波形生成使用绘图函数就可以完成,而信号的信号波形生成使用绘图函数就可以完成,而信号的频谱频谱是通是通过快速过快速付立叶变换付立叶变换而得到的。
而得到的。
常用函数:
常用函数:
strcmp(action,initialized);strcmp(action,Play);strcmp(action,Zoom);strcmp(action,Spectrum);13253幅度调制幅度调制(车晴车晴P203-am.mam.m)幅度调制,幅度调制,即载波幅度随调制信号变化的调制(即载波幅度随调制信号变化的调制(AM)。
)。
幅幅度调制有多种实现方式,包括:
标准幅度调制(度调制有多种实现方式,包括:
标准幅度调制(SAM),),双双边带幅度调制(边带幅度调制(DSB-AM),),单边带幅度调制(单边带幅度调制(SSB),),残残留边带调制(留边带调制(VSB)和平衡正交幅度调制(和平衡正交幅度调制(QAM)等。
等。
假定调制信号为假定调制信号为m(t),其幅度为其幅度为1v,载波信号为载波信号为,各种调幅方式的已调波的表达式如下各种调幅方式的已调波的表达式如下:
SAM:
是调制度。
是调制度。
DSB-AM:
SSB:
是调制信号是调制信号的希尔伯特的希尔伯特变换变换。
QAM:
14M脚本文件入门脚本文件入门返回返回通过通过M脚本文件,画出下列分段函数所表示的曲面。
脚本文件,画出下列分段函数所表示的曲面。
(s_file.ms_file.m)15M脚本文件入门(续)脚本文件入门(续)返回返回%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例例例例2_2_12_2_1:
MM函数文件示函数文件示函数文件示函数文件示例例例例。
返回返回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控件的控件的Callback属性属性返回返回M2_ex2_3_1.m(张志涌(张志涌P426)对于传递函数为对于传递函数为的归一化二阶系统,制作一的归一化二阶系统,制作一个能绘制该系统单位阶跃响应的图形用户界面。
个能绘制该系统单位阶跃响应的图形用户界面。
在编辑框输入在编辑框输入0.30.3,可以看到可以看到一根曲线一根曲线。
在编辑框输入在编辑框输入0.1:
0.1:
10.1:
0.1:
1,可以看到十根曲线可以看到十根曲线。
本例设置断点演示:
(本例设置断点演示:
(A)图形界面的大致生成图形界面的大致生成过程;(B)静态文本和编辑框的生成;静态文本和编辑框的生成;(C)坐标方格控制键的形成;坐标方格控制键的形成;(D)如何使用该界面。
如何使用该界面。
运行程序运行程序sub_of_M2_ex2_3_1.m,验证验证Callback属性定义属性定义的子程序。
的子程序。
18菜单的菜单的Callback属性属性返回返回本例的目标是:
在图形窗上自制一个名为【本例的目标是:
在图形窗上自制一个名为【Test】的的“顶层菜单顶层菜单项项”;当用鼠标点动该菜单项时,将产生一个带分格的封闭坐标;当用鼠标点动该菜单项时,将产生一个带分格的封闭坐标轴。
通过本例说明:
轴。
通过本例说明:
(A)回调属性的运作机理;回调属性的运作机理;(B)用户顶层菜单项的制作;用户顶层菜单项的制作;(C)uimenu属性的设置方法;属性的设置方法;(D)复杂字符串的构成方法和注意事项。
复杂字符串的构成方法和注意事项。
M2_ex2_3_2.m(张志涌张志涌P432)19音频信号的分析与合成程序音频信号的分析与合成程序(韩利竹(韩利竹P262-sigspec.m,stereospec.m)返回返回y=sigspec(action);%SIGNALSPECTRUMANALYSERTHEE2001/10%y=sigspec(action);%Usage:
y=sigspec;%=clear;ifnargin1;action=initialized;end;fname,pname=uigetfile(*.wav,OpenWaveFile);file=pname,fname;x,fs,bits=wavread(file);%读入声音文件(读入声音文件(*.wav)sound(x,fs,bits);%数据通过声卡转换为声音数据通过声卡转换为声音%=选择声道选择声道=%y=x(:
);%双声道信号波形数据双声道信号波形数据y=x(:
1);%左声道信号波形数据左声道信号波形数据%y=x(:
2);%右声道信号波形数据右声道信号波形数据%=20音频信号的分析与合成程序(续音频信号的分析与合成程序(续1)%=disp(按任意键显示左声道声音波形!
按任意键显示左声道声音波形!
);disp(-);pauseplot(y);set(gca,FontName,Arial,FontSize,10);title(左声道声音波形左声道声音波形);xlabel(采样点数采样点数);disp(按任意键听左声道信号三次!
按任意键听左声道信号三次!
);disp(-);pausesound(y,fs,bits);%数据通过声卡转换为声音数据通过声卡转换为声音pausesound(y,fs,bits);pausesound(y,fs,bits);k=fft(y,32768);disp(按任意键显示左声道声音频域的幅值!
按任意键显示左声道声音频域的幅值!
);disp(-);21音频信号的分析与合成程序(续音频信号的分析与合成程序(续2)disp(-);pauseplot(abs(k);set(gca,FontName,Arial,FontSize,10);title(左声道声音频域的幅值左声道声音频域的幅值);xlabel(采样点数采样点数);m1,i1=max(abs(k);%找出频域最大值找出频域最大值F1=i1/32768*fs;F1t=num2str(F1)Hz;text(1500,450,F1t);m2,i2=max(abs(k(4000:
5000);%找出频域次大值找出频域次大值F2=(4000+i2)/32768*fs;F2t=num2str(F2)Hz;text(3000,40,F2t);m3,i3=max(abs(k(10000:
12000);%找出频域次次大值找出频域次次大值F3=(10000+i3)/32768*fs;F3t=num2str(F3)Hz;text(8000,20,F3t);%=22音频信号的分析与合成程序(续音频信号的分析与合成程序(续3)%=t=(0:
0.0001:
1);y1=(sin(2*pi*788*t)+sin(2*pi*3174*t)*(22.65/490)+sin(2*pi*6936*t)*(2.996/490)*0.18;disp(按任意键显示左声道简单合成声音波形!
按任意键显示左声道简单合成声音波形!
);disp(-);pauseplot(t,y1);set(gca,FontName,Arial,FontSize,10);title(左声道简单合成声音波形左声道简单合成声音波形);disp(按任意键听简单合成左声道信号三次!
按任意键听简单合成左声道信号三次!
);disp(-);pausesound(y1,fs,bits);%数据通过声卡转换为声音数据通过声卡转换为声音pausesound(y1,fs,bits);pausesound(y1,fs,bits);k1=fft(y1,32768);disp(按任意键显示左声道简单合成声音的频域幅值!
按任意键显示左声道简单合成声音的频域幅值!
);disp(-);23音频信号的分析与合成程序(续音频信号的分析与合成程序(续4)disp(-);pauseplot(abs(k1);set(gca,FontName,Arial,FontSize,10);title(左声道简单合成声音的频域幅值左声道简单合成声音的频域幅值);xlabel(采样点数采样点数);m1_r,i1_r=max(abs(k1);%找出简单合成声音频域最大值找出简单合成声音频域最大值F1_r=i1_r/32768*10000;F1_rt=num2str(F1_r)Hz;text(3000,850,F1_rt);m2_r,i2_r=max(abs(k1
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- MATLAB 音频 信号 分析 合成 程序