MATLAB音频信号的分析与合成程序_第1页
MATLAB音频信号的分析与合成程序_第2页
MATLAB音频信号的分析与合成程序_第3页
MATLAB音频信号的分析与合成程序_第4页
MATLAB音频信号的分析与合成程序_第5页
已阅读5页,还剩31页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、 21 脚本文件和函数文件脚本文件和函数文件22 函数调用和参数传递函数调用和参数传递23 MATLAB的程序结构和控制流的程序结构和控制流24 M文件的调试文件的调试25 程序设计实例程序设计实例 251 音频信号的分析与合成音频信号的分析与合成 252 音频频谱分析仪音频频谱分析仪 253 幅度调制幅度调制21 脚本文件和函数文件脚本文件和函数文件211 M脚本文件脚本文件 对于一些比较简单的问题对于一些比较简单的问题 ,在指令窗中直接输入指令计算,在指令窗中直接输入指令计算 。 对于复杂计算,采用脚本文件(对于复杂计算,采用脚本文件(Script file)最为合适最为合适 。 MATL

2、AB只是按文件所写的指令执行只是按文件所写的指令执行 。 M脚本文件的特点是:脚本文件的特点是: 脚本文件的构成比较简单,只是一串按用户意图排列而成脚本文件的构成比较简单,只是一串按用户意图排列而成的(包括控制流向指令在内的)的(包括控制流向指令在内的)MATLAB指令集合。指令集合。 脚本文件运行后脚本文件运行后 ,所产生的所有变量都驻留在,所产生的所有变量都驻留在 MATLAB基本工作空间基本工作空间(Base workspace)中中。只要用户不使用清除只要用户不使用清除指令(指令(clear),), MATLAB指令窗不关闭,这些变量将一直指令窗不关闭,这些变量将一直保存在保存在基本工

3、作空间基本工作空间中中。M文件有两种形式文件有两种形式 :脚本文件(脚本文件(Script File)和函数文件和函数文件(Function File )。)。这两种文件的扩展名,均为这两种文件的扩展名,均为“ . m” 。21 脚本文件和函数文件(脚本文件和函数文件(212 M函数文件函数文件 与脚本文件不同与脚本文件不同 ,函数文件犹如一个,函数文件犹如一个“黑箱黑箱”,把一些数据,把一些数据送进并经加工处理,再把结果送出来。送进并经加工处理,再把结果送出来。 MATLAB提供的函数指令大部分都是由函数文件定义的。提供的函数指令大部分都是由函数文件定义的。 M函数文件的特点是:函数文件的特

4、点是: 从形式上看从形式上看 ,与脚本文件不同,与脚本文件不同 ,函数文件的笫一行总是,函数文件的笫一行总是以以 “function”引导的引导的“函数申明行函数申明行”。从运行上看从运行上看 ,与脚本文件运行不同,与脚本文件运行不同 ,每当函数文件运行,每当函数文件运行, MATLAB就会专门为它开辟一个临时工作空间,称为就会专门为它开辟一个临时工作空间,称为函数函数工作空间工作空间( Function workspace) 。当执行文件最后一条。当执行文件最后一条指令时指令时 ,就结束该函数文件的运行,同时该临时函数空间,就结束该函数文件的运行,同时该临时函数空间及其所有的中间变量就立即被

5、清除。及其所有的中间变量就立即被清除。 MATLAB允许使用比允许使用比 “标称数目标称数目 ”较少的输入输出宗量,较少的输入输出宗量,实现对函数的调用实现对函数的调用 。21 脚本文件和函数文件(脚本文件和函数文件(213 M文件的一般结构文件的一般结构 由于从结构上看由于从结构上看 ,脚本文件只是比函数文件少一个,脚本文件只是比函数文件少一个“函数申函数申明行明行”,所以只须描述清楚函数文件的结构,所以只须描述清楚函数文件的结构 。 典型典型 M函数文件的结构如下函数文件的结构如下 : 函数申明行:位于函数文件的首行,以关键字函数申明行:位于函数文件的首行,以关键字 functio 开头,

6、开头,函数名以及函数的输入输出宗量都在这一行被定义。函数名以及函数的输入输出宗量都在这一行被定义。 笫一注释行:紧随函数申明行之后以笫一注释行:紧随函数申明行之后以%开头笫一注释行。开头笫一注释行。该行供该行供lookfor关键词查询和关键词查询和 help在线帮助使用在线帮助使用 。 在线帮助文本区在线帮助文本区 :笫一注释行及其之后的连续以:笫一注释行及其之后的连续以%开头的开头的所有注释行构成整个在线帮助文本。所有注释行构成整个在线帮助文本。 编写和修改记录:与在线帮助文本区相隔一个编写和修改记录:与在线帮助文本区相隔一个“空空”行,行,也以也以%开头,标志编写及修改该开头,标志编写及修

7、改该M文件的作者和日期等文件的作者和日期等 。 函数体:为清晰起见,它与前面的注释以函数体:为清晰起见,它与前面的注释以“空空”行相隔。行相隔。例例 2_2_1:M函数文件示例。函数文件示例。22 函数调用和参数传递函数调用和参数传递221 局部变量和全局变量局部变量和全局变量 局部(局部(Local)变量:它存在于函数空间内部的中间变量,变量:它存在于函数空间内部的中间变量,产生于该函数的运行过程中,其影响范围也仅限于该函数本产生于该函数的运行过程中,其影响范围也仅限于该函数本身身 。 全局(全局(Global)变量:通过变量:通过 global 指令,指令,MATLAB也允许几也允许几个不

8、同的函数空间以及基本工作空间共享同一个变量,这种被个不同的函数空间以及基本工作空间共享同一个变量,这种被共享的变量称为全局变量。共享的变量称为全局变量。222 函数调用函数调用 在在MATLAB中,调用函数的常用形式是:中,调用函数的常用形式是:输出参数输出参数1,输出参数输出参数2, = 函数名函数名(输入参数输入参数1,输入参数输入参数2, ) 函数调用可以嵌套,一个函数可以调用别的函数,甚至调函数调用可以嵌套,一个函数可以调用别的函数,甚至调用它自己用它自己 (递归调用)。(递归调用)。22 函数调用和参数传递(函数调用和参数传递(223 参数传递参数传递 MATLAB在函数调用上有一个

9、与众不同之处在函数调用上有一个与众不同之处 :函数所传递的:函数所传递的参数具有可调性参数具有可调性 。 传递参数数目的可调性来源于如下两个传递参数数目的可调性来源于如下两个MATLAB永久变量:永久变量: 函数体内的函数体内的 nargin 给出调用该函数时的输入参数数目。给出调用该函数时的输入参数数目。 函数体内的函数体内的 nargout 给出调用该函数时的输出参数数目。给出调用该函数时的输出参数数目。 只要在函数文件中包括这两个变量,就可以知道该函数文件只要在函数文件中包括这两个变量,就可以知道该函数文件调用时的输入参数和输出参数数目。调用时的输入参数和输出参数数目。 值得注意:值得注

10、意:nargin、 nargout 本身都是函数本身都是函数,不是变量,所不是变量,所以用户不能赋值,也不能显示。以用户不能赋值,也不能显示。 “变长度变长度”输入输出宗量:输入输出宗量:varargin 、 varrgout。具有接受具有接受 “任意多输入任意多输入” 、返回、返回“任意多输出任意多输出”的能力的能力 。 跨空间变量传递:跨空间变量传递:evalin。(参考(参考 : circle .m,am1.m)23 MATLAB的程序结构和控制流的程序结构和控制流231 程序结构程序结构 循环结构:循环结构: MATLAB提供两种循环方式。提供两种循环方式。 顺序结构顺序结构 分支结构

11、:分支结构: ifelseend 。forend 循环和循环和while-end循环。循环。232 程序流控制程序流控制 常用指令:常用指令:return,echo,input,pause,keyboard,break。 switch-case 结构。结构。 try-catch 结构。结构。 警示指令:警示指令:error, warning 。23 MATLAB的程序结构和控制流(的程序结构和控制流(233 图形用户界面(图形用户界面(GUI)编程编程 现代的主流应用程序已经从命令行的交互方式转变为以图现代的主流应用程序已经从命令行的交互方式转变为以图形界面为主的交互方式,这主要是由于它给用户

12、带来了操作形界面为主的交互方式,这主要是由于它给用户带来了操作和控制的方便与灵活性。和控制的方便与灵活性。(面向对象编程)(面向对象编程) MATLAB能够以比较简单的方式实现一系列的图形界面功能够以比较简单的方式实现一系列的图形界面功能。通过对控件、菜单属性的设置和能。通过对控件、菜单属性的设置和 Callback 的编写,就能的编写,就能够满足大多数用户的需求。够满足大多数用户的需求。 控件的控件的 Callback 属性属性: Callback 属性的取值是字符串,可属性的取值是字符串,可以是某个以是某个M文件名或一小段文件名或一小段MATLAB语句语句。当用户激活控件当用户激活控件对象

13、(例如对象(例如 :在控件对象图标上单击鼠标左键:在控件对象图标上单击鼠标左键 )时,应用程)时,应用程序就运行序就运行 Callback 属性定义的子程序。属性定义的子程序。 菜单的菜单的 Callback 属性属性: Callback 属性的取值是字符串,可属性的取值是字符串,可以是某个以是某个M文件名或一小段文件名或一小段MATLAB语句语句。当用户激活菜单当用户激活菜单对象时,若没有子菜单就运行对象时,若没有子菜单就运行 Callback 属性定义的子程序。属性定义的子程序。若有,先运行若有,先运行 Callback 属性定义的子程序,再显示子菜单。属性定义的子程序,再显示子菜单。24

14、 M文件的调试文件的调试 编写编写 M文件时,错误(文件时,错误(Bug)在所难免。错误有两种:语法在所难免。错误有两种:语法(Syntax)错误和运行(错误和运行(Run-time)错误。错误。 语法错误是指变量名、函数名的误写,标点符号的缺、漏等。语法错误是指变量名、函数名的误写,标点符号的缺、漏等。对于这类错误,通常能在运行时发现,终止执行,并给出相应对于这类错误,通常能在运行时发现,终止执行,并给出相应的错误原因以及所在行号。的错误原因以及所在行号。 运行错误是算法本身引起的,发生在运行过程中。相对语法运行错误是算法本身引起的,发生在运行过程中。相对语法错误而言,运行错误较难处理错误而

15、言,运行错误较难处理 。尤其是。尤其是M函数文件,它一旦运函数文件,它一旦运行停止,其中间变量被删除一空,错误很难查找。行停止,其中间变量被删除一空,错误很难查找。 有两种调试方法:直接调试法和工具调试法。有两种调试方法:直接调试法和工具调试法。24 M文件的调试(文件的调试( 直接调试法:可以用下面方法发现某些运行错误。直接调试法:可以用下面方法发现某些运行错误。 在在M文件中,将某些语句后面的分号去掉,文件中,将某些语句后面的分号去掉, 迫使迫使M文件输文件输出一些中间计算结果,以便发现可能的错误。出一些中间计算结果,以便发现可能的错误。 在适当的位置,添加显示某些关键变量值的语句(包括使

16、在适当的位置,添加显示某些关键变量值的语句(包括使用用 disp 在内)。在内)。 利用利用 echo 指令,使运行时在屏幕上逐行显示文件内容。指令,使运行时在屏幕上逐行显示文件内容。echo on 能显示能显示M脚本文件;脚本文件;echo FunNsme on 能显示名为能显示名为FunNsme 的的M函数文件。函数文件。 在原在原M脚本或函数文件的适当位置,增添指令脚本或函数文件的适当位置,增添指令 keyboard 。 keyboard 语句可以设置程序的断点语句可以设置程序的断点 。 通过将原通过将原M函数文件的函数申明行注释掉,可使一个中间函数文件的函数申明行注释掉,可使一个中间变

17、量难于观察的变量难于观察的M函数文件变为一个所有变量都保留在基函数文件变为一个所有变量都保留在基本工作空间中的本工作空间中的M脚本文件。脚本文件。24 M文件的调试(文件的调试( GUI 界面调试法:界面调试法:MATLAB 5.x 版提供了一个基于版提供了一个基于GUI界面的调试。使用它,界面的调试。使用它,可以对函数进行调试。可以对函数进行调试。 Debug菜单的使用:菜单的使用:Continue:恢复程序运行至结束或另一个断点恢复程序运行至结束或另一个断点 。Single Step:单步执行函数。单步执行函数。Step In:深入下层局部工作区深入下层局部工作区 。Quit Debugg

18、ing:退出调试状态。退出调试状态。Set/Clear Breakpoint:设置设置/清除光标处的断点清除光标处的断点 。Clear All Breakpoints:清除程序中的所有断点清除程序中的所有断点 。Stop if Error:运行至出错或结束。运行至出错或结束。Stop if Warning:运行至警告消息或结束。运行至警告消息或结束。Stop if NaN of Inf:运行至运算结果出现运行至运算结果出现 NaN 或或 Inf。 25 程序设计实例程序设计实例251 音频信号的分析与合成音频信号的分析与合成(韩利竹(韩利竹P262-sigspec.m,stereospec.m

19、) 采用采用MATLAB分析分析WAV文件。文件。 步骤一:选择一个步骤一:选择一个WAV文件作为分析的对象文件作为分析的对象 。(。(ding.wav) 步骤二:读步骤二:读WAV文件数据并画时域图形文件数据并画时域图形 。 步骤三:进行步骤三:进行 FFT变换变换并画频域图形并画频域图形 。 步骤四:进行该声波主要频谱的分析步骤四:进行该声波主要频谱的分析。 步骤五:根据该声音的频谱,反演时域图形步骤五:根据该声音的频谱,反演时域图形 。(有。(有失真失真) 常用函数:常用函数: x,fs,bits=waveread(filename) d= FFT (w,l) sound(w,fs,bi

20、ts) 步骤六:进行步骤六:进行付立叶逆变换付立叶逆变换IFFT并画频域图形并画频域图形 。252 音频频谱分析仪音频频谱分析仪(车晴车晴P199-audspec.m M函数文件函数文件 audspec.m 用于对音频频谱分析仪进行仿真,它用于对音频频谱分析仪进行仿真,它通过鼠标来选择一个通过鼠标来选择一个WAV文件,它可以播放该声音文件、显文件,它可以播放该声音文件、显示音频输入信号的波形和频谱。示音频输入信号的波形和频谱。 WAV文件的输入方式采用文件的输入方式采用 uigetfile 函数,该函数打开一个标函数,该函数打开一个标准的对话框,然后可以选择声音文件的路径和文件的名称。准的对话

21、框,然后可以选择声音文件的路径和文件的名称。 信号波形生成使用绘图函数就可以完成,而信号的频谱是通信号波形生成使用绘图函数就可以完成,而信号的频谱是通过快速过快速付立叶变换付立叶变换而得到的。而得到的。 常用函数:常用函数:strcmp(action,initialized);strcmp(action,Play);strcmp(action,Zoom);strcmp(action,Spectrum); 253 幅度调制幅度调制 车晴车晴P203- 幅度调制,幅度调制,即载波幅度随调制信号变化的调制(即载波幅度随调制信号变化的调制(AM)。)。幅度调制有多种实现方式,包括:标准幅度调制(幅度调

22、制有多种实现方式,包括:标准幅度调制(SAM),),双边带幅度调制(双边带幅度调制(DSB-AM),),单边带幅度调制(单边带幅度调制(SSB),),残留边带调制(残留边带调制(VSB)和平衡正交幅度调制(和平衡正交幅度调制(QAM)等。等。 假定调制信号为假定调制信号为m(t),其幅度为其幅度为1v ,载波信号为载波信号为 ,各种调幅方式的已调波的表达式如下各种调幅方式的已调波的表达式如下 :tsin SAM:ttmmtsAsin)(1 )(是调制度。是调制度。Am DSB-AM:ttmtssin)()( SSB:是调制信号是调制信号 的希尔伯特的希尔伯特变换变换。 QAM:ttmttmts

23、cos)( 2sin)( 1)(ttmttmtssin)(5 . 0cos)(5 . 0)(ttmttmtssin)(5 . 0cos)(5 . 0)()(tm)(tmM脚本文件入门脚本文件入门返回返回通过通过M脚本文件,画出下列分段函数所表示的曲面。脚本文件,画出下列分段函数所表示的曲面。15457. 0117575. 015457. 0),(215 . 175. 375. 0216215 . 175. 375. 02112122212212122xxexxexxexxpxxxxxxxxM脚本文件入门(续)脚本文件入门(续)返回返回%s_file.m This is my first exa

24、mple.a=2;b=2;clf;x=-a:0.2:a;y=-b:0.2:b;for i=1:length(y) for j=1:length(x) if x(j)+y(i)1 z(i,j)=0.5457*exp(-0.75*y(i)2-3.75*x(j)2-1.5*x(j); elseif x(j)+y(i)=-1 z(i,j)=0.5457*exp(-0.75*y(i)2-3.75*x(j)2+1.5*x(j); else z(i,j)=0.7575*exp(-y(i)2-6.*x(j)2); end endendaxis(-a,a,-b,b,min(min(z),max(max(z);c

25、olormap(flipud(winter);surf(x,y,z);返回返回 sa = circle(r,s)% CIRCLE plot a circle of radii r in the line specified by s.% r 指定半径的数值% s 指定线色的字符串% sa 圆面积% circle(r) 利用蓝实线画半径为 r 的圆周线.% circle(r,s) 利用串 s 指定的线色画半径为 r 的圆周线.% sa=circle(r) 计算圆面积,并画半径为 r 的蓝色圆面.% sa=circle(r,s) 计算圆面积,并画半径为 r 的 s 色圆面.% 编写于1999年4月

26、7日,修改于1999年8月27日。张志涌EX8.4.4.-1(P299)程序文本。程序文本。控件的控件的 CALLBACK 属性属性返回返回M2_ex2_3_1.m(张志涌(张志涌P426) 对于传递函数为对于传递函数为 的归一化二阶系统,制作一的归一化二阶系统,制作一个能绘制该系统单位阶跃响应的图形用户界面。个能绘制该系统单位阶跃响应的图形用户界面。1212ssG 在编辑框输入在编辑框输入可以看到可以看到 一根曲线一根曲线 。 在编辑框输入在编辑框输入可以看到十根曲线可以看到十根曲线 。 本例设置断点演示:(本例设置断点演示:(A)图形界面的大致生成图形界面的大致生成过程;(B)静态文本和编

27、辑框的生成;静态文本和编辑框的生成;(C)坐标方格控制键的形成;坐标方格控制键的形成;(D)如何使用该界面。如何使用该界面。 运行程序运行程序 sub_of_M2_ex2_3_1.m, 验证验证 Callback 属性定义属性定义的子程序。的子程序。菜单的菜单的 CALLBACK 属性属性返回返回本例的目标是:在图形窗上自制一个名为【本例的目标是:在图形窗上自制一个名为【Test】的的“顶层菜单顶层菜单项项”;当用鼠标点动该菜单项时,将产生一个带分格的封闭坐标;当用鼠标点动该菜单项时,将产生一个带分格的封闭坐标轴。通过本例说明:轴。通过本例说明:(A)回调属性的运作机理;回调属性的运作机理;(

28、B)用户顶层菜单项的制作;用户顶层菜单项的制作;(C)uimenu属性的设置方法;属性的设置方法;(D)复杂字符串的构成方法和注意事项。复杂字符串的构成方法和注意事项。M2_ex2_3_2.m (张志涌张志涌P432) 音频信号的分析与合成程序音频信号的分析与合成程序 (韩利竹(韩利竹P262-sigspec.m,stereospec.m) 返回返回y=sigspec(action);% SIGNAL SPECTRUM ANALYSER THEE 2001/10% y=sigspec(action);% Usage:y=sigspec;%=clear;if nargin1;action=ini

29、tialized;end;fname,pname=uigetfile(*.wav,Open Wave File);file=pname,fname;x,fs,bits=wavread(file); % 读入声音文件(读入声音文件(*.wav) sound(x,fs,bits); % 数据通过声卡转换为声音数据通过声卡转换为声音%=选择声道选择声道=%y=x(:); % 双声道信号波形数据双声道信号波形数据y=x(:,1); % 左声道信号波形数据左声道信号波形数据%y=x(:,2); % 右声道信号波形数据右声道信号波形数据%=音频信号的分析与合成程序(续音频信号的分析与合成程序(续1)%=d

30、isp(按任意键显示左声道声音波形!按任意键显示左声道声音波形!);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(按任意键显示左声道声音频域的幅值!按

31、任意键显示左声道声音频域的幅值!);disp(-);音频信号的分析与合成程序(续音频信号的分析与合成程序(续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=(4

32、000+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);%=音频信号的分析与合成程序(续音频信号的分析与合成程序(续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(按

33、任意键显示左声道简单合成声音波形!按任意键显示左声道简单合成声音波形!);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(按任意键显示左声

34、道简单合成声音的频域幅值!按任意键显示左声道简单合成声音的频域幅值!);disp(-);音频信号的分析与合成程序(续音频信号的分析与合成程序(续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,F

35、1_rt);m2_r,i2_r=max(abs(k1(10000:12000);F2_r=(10000+i2_r)/32768*10000; % 找出简单合成声音频域次大值找出简单合成声音频域次大值F2_rt=num2str(F2_r) Hz;text(9000,60,F2_rt);end;%=音频频谱分析仪程序音频频谱分析仪程序(车晴车晴P199-audspec.m返回返回 y=audspec(action);% AUDIO SPECTRUM ANALYSER THEE 2001/10%=global x t dt fs c1 c2 H_osc H2 fn y ystr Ktypeif na

36、rgin1;action=initialized;end;if strcmp(action,initialized); % 示波器示波器 clc; % 清除工作区清除工作区 v=version; % MATLAB版本版本 fname,pname=uigetfile(*.wav,Open Wave File);% 打开对话框输入文件打开对话框输入文件 file=pname,fname; % 文件名称和路径文件名称和路径 if strcmp(v(1),5); % 读入声音文件(读入声音文件(*.wav) x,fs,nbits=wavread(file); % x是采样数据,是采样数据,fs是采样速

37、率(是采样速率(Hz) m,n=size(x); % nbits是每次采样比特数是每次采样比特数 file=file fs= int2str(fs) Hz, int2str(nbits) bits; if n=2;file=file ,stero; x=x(:); % 若是双声道,将数据合并为一列若是双声道,将数据合并为一列 %x=x(:,1); % 取左声道数据取左声道数据 %x=x(:,2); % 取右声道数据取右声道数据 end; elseif strcmp(v(1),4); x,fs=wavread(file); file=file fs= int2str(fs) Hz,; end;音

38、频频谱分析仪程序(续音频频谱分析仪程序(续1)% 增加菜单项(增加菜单项(Zoom,Play,Spectrum),),生成信号波形,回应(生成信号波形,回应(Callback)分别调用分别调用% 函数函数audspec(Zoom),audspec(Play)和和 audspec(Spectrum)。 H_osc=figure(Name,OSCILLOSCOPE THEE 2001/8 blanks(6) file,. NumberTitle,off,Position,10 78 640 480); uimenu(Label,&Zoom,Callback,audspec(Zoom););

39、 uimenu(Label,&Play,Callback,audspec(Play);); uimenu(Label,&Spectrum,Callback,audspec(Spectrum);); if strcmp(v(1),4); whitebg(k);c1=y;c2=g; elseif strcmp(v(1),5); c1=r;c2=b; end; dt=1/fs;N=length(x);t=(0:N-1)*dt;T=N*dt;ss=s; % dt=1/fs,fs是采样速率(是采样速率(Hz) if T1e-03;t=t*1e+06;ss=us; elseif T1;t=

40、t*1000;ss=ms; end; plot(t,x,c1); % 画左右声道信号波形画左右声道信号波形 set(gca,FontName,Arial,FontSize,10); % gca是返回当前轴的句柄并设置是返回当前轴的句柄并设置 title(画左右声道声音波形画左右声道声音波形);xlabel(T ( ss ); n1=1;n2=N;H2=-1;音频频谱分析仪程序(续音频频谱分析仪程序(续2)elseif strcmp(action,Play); % 播放声音文件播放声音文件 v=axis; % 返回当前轴坐标的设置返回当前轴坐标的设置 del=t(2)-t(1);del=del*

41、.5; % v(1)和和v(2)是是X轴坐标的设置轴坐标的设置 n1=find(abs(t-v(1)del);n2=find(abs(t-v(2)del); if isempty(n2);n2=length(x);end; xx=x(n1:n2);sound(xx,fs); % 以采样速率以采样速率fs输出声音文件数据输出声音文件数据 elseif strcmp(action,Zoom); % 放大放大 zoom(H_osc,xon); % 只能只能X轴放大轴放大 elseif strcmp(action,Spectrum); % 频谱分析仪频谱分析仪 v=axis; % 返回当前轴坐标的设置

42、返回当前轴坐标的设置 del=t(2)-t(1);del=del*.5; % v(1)和和v(2)是是X轴坐标的设置轴坐标的设置 n1=find(abs(t-v(1)del);n2=find(abs(t-v(2)0;delete(H2);end; H2=figure(Name,SPECTRUM ANALYZER THEE 2001/8,. NumberTitle,off,Position,155 32 640 480); uimenu(Label,&Linear/Log,Callback,audspec(Log);); xx=x(n1:n2);N=length(xx); % N是离散傅

43、氏变换用的点数是离散傅氏变换用的点数 % N应该选择应该选择2的乘方的数(如:的乘方的数(如:16,128.) f1=1/(dt*N); % 相邻两变换点之间的距离相邻两变换点之间的距离 % fs=1/dt,fs是采样速率(是采样速率(Hz)。)。变换点的实际频率是:(变换点的位置序号变换点的实际频率是:(变换点的位置序号/N)*fs y=fft(xx/N,32768); % 快速傅立叶变换(快速傅立叶变换(DFT:32768=215) y=abs(y)*2; N2=fix(N/2);y=y(1:N2);y=y/max(y); I=find(y20);fn=fn(I);y=y(I); plot

44、(fn,y,c2); % 画信号频谱分析图形画信号频谱分析图形 ystr=(dB);Ktype=-1; set(gca,Ygrid,on,YLim,-60 0,. % gca是返回当前轴的句柄并设置是返回当前轴的句柄并设置 FontName,Arial,FontSize,10); xlabel(frequency ( Hz);ylabel(ystr);zoom xon; elseif strcmp(action,Log); % 线性线性/对数坐标(频率)对数坐标(频率) if Ktype=-1; semilogx(fn,y,c2); % 半对数坐标(半对数坐标(X轴)画频谱分析图形轴)画频谱分

45、析图形 elseif Ktype=1; plot(fn,y,c2); end; Ktype=-Ktype; set(gca,Ygrid,on,YLim,-60 0,. FontName,Arial,FontSize,10); xlabel(frequency ( Hz);ylabel(ystr);zoom xon; end;%=幅度调制程序幅度调制程序车晴车晴P203-返回返回function =am(action)% AM Modulate THEE 2001/10 % =am(action);%=global y x t fc fs f tstr Kw Kmod m H1 H2 H3 H4

46、2 H52v=version;if nargin1;set(H3,value,1);end;elseif strcmp(action,wave); Kw=get(gco,Value); y,x,t,fc,fs,tstr=am1(f,fc,m,Kmod,Kw,1);elseif strcmp(action,mr); k=get(gco,Value);mt=1 .9 .875 .7 .6 .5;m=mt(k); if Kmod=1; y,x,t,fc,fs,tstr=am1(f,fc,m,Kmod,Kw,1); else; set(H3,value,1); end;elseif strcmp(action,f); f=get(gco,string);f=str2num(f); y,x,t,fc,fs,tstr=am1(f,fc,m,Kmod,Kw,1);幅度调制程序(续幅度调制程序(续3)elseif strcmp(action,fc); fc=g

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论