基于MATlab GUI信号与系统-声音信号频谱分析_第1页
基于MATlab GUI信号与系统-声音信号频谱分析_第2页
基于MATlab GUI信号与系统-声音信号频谱分析_第3页
基于MATlab GUI信号与系统-声音信号频谱分析_第4页
基于MATlab GUI信号与系统-声音信号频谱分析_第5页
已阅读5页,还剩23页未读 继续免费阅读

下载本文档

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

文档简介

1、目 录第1章 绪论11.1声音信号频谱分析仪概述11.2声音信号频谱分析仪功能11.3声音信号频谱分析仪的发展1第2章 MATLAB相关知识32.1 MATLAB软件知识32.1.1 MATLAB 语言简介32.1.2 Matlab的优势和特点32.2 图形用户界面(GUI)知识62.2.1 GUI简介62.2.2 GUI的特点62.2.3 GUI的组成部分7第3章 设计原理93.1波形分析原理93.1.1 信号频率、幅值和相位估计93.1.2 数字信号统计量估计93.2频谱分析原理113.2.1 DFT与FFT113.2.2 频率、周期的估计123.2.3 频谱图123.3. 模块划分12第

2、4章 系统程序设计144.1界面设计144.2输入模块的实现164.3分析模块19第5章 软件运行及结果分析22第6章 总结24参 考 文 献25致 谢26第1章 绪论1.1声音信号频谱分析仪概述信号处理几乎涉及到所有的工程技术领域,而频谱分析又是信号分析仪处理中一个非常重要的分析手段。一般的频谱分析都依靠传统频谱分析仪来完成,价格昂贵,体积庞大,不便于工程技术人员的携带。声音信号频谱分析仪改变了原有频谱分析仪的整体设计思路,用软件代替了硬件,使工程技术人员可以用一部笔记本电脑到现场就可轻松完成信号的采集、处理及频谱分析。在工程领域中, MATLAB是一种倍受程序开发人员青睐的语言,对于一些需

3、要做大量数据运算处理的复杂应用以及某些复杂的频谱分析算法MATLAB显得游刃有余。本文将重点介绍基于MATLAB的声音信号频谱分析仪的设计。1.2声音信号频谱分析仪功能(1) 音频信号输入,输入的途径包括从声卡输入、从WAV文件输入、从信号发生器输入;(2) 信号波形分析,包括幅值、频率、周期、相位的估计,并计算统计量的峰值、均值、均方值和方差等信息;(3) 信号频谱分析,频率、周期的估计,图形显示幅值谱、相位谱等信息的曲线。1.3声音信号频谱分析仪的发展基于快速傅里叶变换(FFT)的现代声音信号频谱分析仪,通过傅里叶运算将声音信号分解成分立的频率分量,达到与传统

4、频谱分析仪同样的结果,。这种新型的频谱分析仪采用数字方法直接由模拟/数字转换器(ADC)对输入信号取样,再经FFT处理后获得频谱分布图。在这种频谱分析仪中,为获得良好的仪器线性度和高分辨率,对信号进行数据采集时 ADC的取样率最少等于输入信号最高频率的两倍,亦即频率上限是100MHz的实时频谱分析仪需要ADC有200MS/S的取样率。目前半导体工艺水平可制成分辨率8位和取样率4GS/S的ADC或者分辨率12位和取样率800MS/S的ADC,亦即,原理上仪器可达到2GHz的带宽,为了扩展频率上限,可在ADC前端增加下变频器,本振采用数字调谐振荡器。这种混合式的频谱分析仪可扩展到几GHz以下的频段

5、使用。FFT的性能用取样点数和取样率来表征,例如用100KS/S的取样率对输入信号取样1024点,则最高输入频率是50KHz和分辨率是50Hz。如果取样点数为2048点,则分辨率提高到25Hz。由此可知,最高输人频率取决于取样率,分辨率取决于取样点数。FFT运算时间与取样,点数成对数关系,频谱分析仪需要高频率、高分辨率和高速运算时,要选用高速的FFT硬件,或者相应的数字信号处理器(DSP)芯片。例如,10MHz输入频率的1024点的运算时间80s,而10KHz的1024点的运算时间变为64ms,1KHz的1024点的运算时间增加至640ms。当运算时间超过200ms时,屏幕的反应变慢,不适于眼

6、睛的观察,补救办法是减少取样点数,使运算时间降低至200ms以下。第2章 MATLAB相关知识2.1 MATLAB软件知识2.1.1 MATLAB 语言简介 MATLAB是美国Math Works公司推出的用于数值计算和信号处理的数学计算软件包,与其他高级语言相比,不仅语法规则更为简单,而且在解决工程问题和科研教学的辅助方面更加直观、简洁和高效。MATLAB的基本数据单位是矩阵,它的指令表达式与数学,工程中常用的形式十分相似,故用MATLAB来解算问题要比用C语言完相同的事情简捷得多。目前,MATLAB 已经成为国际上最流行的科学与工程计算的软件工具,现在的 MATLAB 已经不仅仅是一个“矩

7、阵实验室”了,它已经成为了一种具有广泛应用前景的全新的计算机高级编程语言了,有人称它为“第四代”计算机语言,它在国内外高校和研究部门正扮演着重要的角色。2.1.2 Matlab的优势和特点Matlab的特点:1) 高效的数值计算及符号计算功能,能使用户从繁杂的数学运算分析中解脱出来; 2)具有完备的图形处理功能,实现计算结果和编程的可视化; 3) 友好的用户界面及接近数学表达式的自然化语言,使学者易于学习和掌握; 4)功能丰富的应用工具箱(如信号处理工具箱、通信工具箱等) ,为用户提供了大量方便实用的处理工具. Matlab的优势:1)友好的工作平台和编程环境MATLAB由一系列工具组成。这些

8、工具方便用户使用MATLAB的函数和文件,其中许多工具采用的是图形用户界面。包括MATLAB桌面和命令窗口、历史命令窗口、编辑器和调试器、路径搜索和用于用户浏览帮助、工作空间、文件的浏览器。随着MATLAB的商业化以及软件本身的不断升级,MATLAB的用户界面也越来越精致,更加接近Windows的标准界面,人机交互性更强,操作更简单。而且新版本的MATLAB提供了完整的联机查询、帮助系统,极大的方便了用户的使用。简单的编程环境提供了比较完备的调试系统,程序不必经过编译就可以直接运行,而且能够及时地报告出现的错误及进行出错原因分析。 2)简单易用的程序语言Matlab是一个高级的矩阵/阵列语言,

9、它包含控制语句、函数、数据结构、输入和输出和面向对象编程特点。用户可以在命令窗口中将输入语句与执行命令同步,也可以先编写好一个较大的复杂的应用程序(M文件)后再一起运行。新版本的MATLAB语言是基于最为流行的C语言基础上的,因此语法特征与C语言极为相似,而且更加简单,更加符合科技人员对数学表达式的书写格式。使之更利于非计算机专业的科技人员使用。而且这种语言可移植性好、可拓展性极强,这也是MATLAB能够深入到科学研究及工程计算各个领域的重要原因。 3)强大的科学计算机数据处理能力MATLAB是一个包含大量计算算法的集合。其拥有600多个工程中要用到的数学运算函数,可以方便的实现用户所需的各种

10、计算功能。函数中所使用的算法都是科研和工程计算中的最新研究成果,而且经过了各种优化和容错处理。在通常情况下,可以用它来代替底层编程语言,如C和C+ 。在计算要求相同的情况下,使用MATLAB的编程工作量会大大减少。MATLAB的这些函数集包括从最简单最基本的函数到诸如矩阵,特征向量、快速傅立叶变换的复杂函数。函数所能解决的问题其大致包括矩阵运算和线性方程组的求解、微分方程及偏微分方程的组的求解、符号运算、傅立叶变换和数据的统计分析、工程中的优化问题、稀疏矩阵运算、复数的各种运算、三角函数和其他初等数学运算、多维数组操作以及建模动态仿真等。 4)出色的图形处理功能MATLAB自产生之日起就具有方

11、便的数据可视化功能,以将向量和矩阵用图形表现出来,并且可以对图形进行标注和打印。高层次的作图包括二维和三维的可视化、图象处理、动画和表达式作图。可用于科学计算和工程绘图。新版本的MATLAB对整个图形处理功能作了很大的改进和完善,使它不仅在一般数据可视化软件都具有的功能(例如二维曲线和三维曲面的绘制和处理等)方面更加完善,而且对于一些其他软件所没有的功能(例如图形的光照处理、色度处理以及四维数据的表现等),MATLAB同样表现了出色的处理能力。同时对一些特殊的可视化要求,例如图形对话等,MATLAB也有相应的功能函数,保证了用户不同层次的要求。另外新版本的MATLAB还着重在图形用户界面(GU

12、I)的制作上作了很大的改善,对这方面有特殊要求的用户也可以得到满足。 5)应用广泛的模块集合工具箱MATLAB对许多专门的领域都开发了功能强大的模块集和工具箱。一般来说,它们都是由特定领域的专家开发的,用户可以直接使用工具箱学习、应用和评估不同的方法而不需要自己编写代码。目前,MATLAB已经把工具箱延伸到了科学研究和工程应用的诸多领域,诸如数据采集、数据库接口、概率统计、样条拟合、优化算法、偏微分方程求解、神经网络、小波分析、信号处理、图像处理、系统辨识、控制系统设计、LMI控制、鲁棒控制、模型预测、模糊逻辑、金融分析、地图工具、非线性控制设计、实时快速原型及半物理仿真、嵌入式系统开发、定点

13、仿真、DSP与通讯、电力系统仿真等,都在工具箱(Toolbox)家族中有了自己的一席之地。 6)实用的程序接口和发布平台新版本的MATLAB可以利用MATLAB编译器和C/C+数学库和图形库,将自己的MATLAB程序自动转换为独立于MATLAB运行的C和C+代码。允许用户编写可以和MATLAB进行交互的C或C+语言程序。另外,MATLAB网页服务程序还容许在Web应用中使用自己的MATLAB数学和图形程序。MATLAB的一个重要特色就是具有一套程序扩展系统和一组称之为工具箱的特殊应用子程序。工具箱是MATLAB函数的子程序库,每一个工具箱都是为某一类学科专业和应用而定制的,主要包括信号处理、控

14、制系统、神经网络、模糊逻辑、小波分析和系统仿真等方面的应用。 7)应用软件开发(包括用户界面)在开发环境中,使用户更方便地控制多个文件和图形窗口;在编程方面支持了函数嵌套,有条件中断等;在图形化方面,有了更强大的图形标注和处理功能,包括对性对起连接注释等;在输入输出方面,可以直接向Excel和HDF5进行连接。专家开发的,用户可以直接使用工具箱学习、应用和评估不同的方法而不需要自己编写代码。2.2 图形用户界面(GUI)知识2.2.1 GUI简介图形用户界面(Graphical User Interface,简称 GUI,又称图形用户接口)是指采用图形方式显示的计算机操作用户介面。与早期计算机

15、使用的命令行界面相比,图形界面对于用户来说在视觉上更易于接受。如Windows是以图形界面方式操作的,因为你可以用鼠标来点击按钮来进行操作,很直观。而DOS就不具备GUI,所以他只能输入命令。DOS 的这种界面叫CUI (Command line User Interface ) 命令行模式的人机接口。通常人机交互图形化用户界面设计经常读做“goo-ee”,准确来说 GUI 就是屏幕产品的视觉体验和互动操作部分。 GUI即人机交互图形化用户界面设计。纵观国际相关产业在图形化用户界面设计方面的发展现状,许多国际知名公司早已意识到 GUI 在产品方面产生的强大增值功能,以及带动的巨大市场价值,因此

16、在公司内部设立了相关部门专门从事 GUI 的研究与设计,同业间也成立了若干机构,以互相交流 GUI 设计理论与经验为目的。随着中国 IT 产业,移动通讯产业,家电产业的迅猛发展,在产品的人机交互界面设计水平发展上日显滞后,这对于提高产业综合素质,提升与国际同等业者的竞争能力等等方面无疑起了制约的作用。2.2.2 GUI的特点GUI的广泛应用是当今计算机发展的重大成就之一,他极大地方便了非专业用户的使用,人们从此不再需要死记硬背大量的命令,取而代之的是可用通过窗口、菜单、按键等方式来方便地进行操作。而嵌入式GUI具有下面几个方面的基本要求:轻型、占用资源少、高性能、高可靠性、便于移植、可配置等特

17、点。2.2.3 GUI的组成部分(1)桌面在启动时显示,也是界面中最底层,有时也指代包括窗口、文件浏览器在内的“桌面环境”。在桌面上由于可以重叠显示窗口,因此可以实现多任务化。一般的界面中,桌面上放有各种应用程序和数据的图标,用户可以依此开始工作。桌面与既存的文件夹构成里面相违背,所以要以特殊位置的文件夹的参照形式来定义内容。比如在微软公司的Windows XP系统中,各种用户的桌面内容实际保存在系统盘(默认为C盘):Documents and Settings用户名桌面 文件夹里。墙纸,即桌面背景。可以设置为各种图片和各种附件,成为视觉美观的重要因素之一。(2)视窗应用程序为使用数据而在图形

18、用户界面中设置的基本单元。应用程序和数据在窗口内实现一体化。在窗口中,用户可以在窗口中操作应用程序,进行数据的管理、生成和编辑。通常在窗口四周设有菜单、图标,数据放在中央。在窗口中,根据各种数据/应用程序的内容设有标题栏,一般放在窗口的最上方,并在其中设有最大化、最小化(隐藏窗口,并非消除数据)、最前面、缩进(仅显示标题栏)等动作按钮,可以简单地对窗口进行操作。1)单一文件界面(Single Document Interface)在窗口中,一个数据在一个窗口内完成的方式。在这种情况下,数据和显示窗口的数量是一样的。若要在其他应用程序的窗口使用数据,将相应生成新的窗口,因此窗口数量多,管理复杂。

19、2)多文件界面(Multiple Document Interface)在一个窗口之内进行多个数据管理的方式。这种情况下,窗口的管理简单化,但是操作变为双重管理。(3)标签多文件界面是数据管理方式中使用的一种界面,将数据的标题在窗口中并排,通过选择标签标题显示必要的数据,这样使得接入数据方式变得更为便捷。上述中,多文件界面主要是微软视窗系统采用。而在其他环境中,通常多是单文件界面,所以无所谓单一/多文件界面的称呼问题。(4)菜单将系统可以执行的命令以阶层的方式显示出来的一个界面。一般置于画面的最上方或者最下方,应用程序能使用的所有命令几乎全部都能放入。重要程度一般是从左到右,越往右重要度越低。

20、命定的层次根据应用程序的不同而不同,一般重视文件的操作、编辑功能,因此放在最左边,然后往右有各种设置等操作,最右边往往设有帮助。一般使用鼠标的第一按钮进行操作。与应用程序准备好的层次菜单不同,在菜单栏以外的地方,通过鼠标的第二按钮调出的菜单称为“即时菜单”。根据调出位置的不同,菜单内容即时变化,列出所指示的对象目前可以进行的操作。(5)图标显示在管理数据的应用程序中的数据,或者显示应用程序本身。数据管理程序,即在文件夹中用户数据的管理、进行特定数据管理的程序的情况下,数据通过图标显示出来。通常情况下显示的是数据的内容或者与数据相关联的应用程序的图案。另外,点击数据的图标,一般可以舜间完成启动相

21、关应用程序以后再显示数据本身这两个步骤的工作。应用程序的图标只能用于启动应用程序。(6)按钮菜单中,利用程度高的命令用图形表示出来,配置在应用程序中,成为按钮。应用程序中的按钮,通常可以代替菜单。一些使用程度高的命令,不必通过菜单一层层翻动才能调出,极大提高了工作效率。但是,各种用户使用的命令频率是不一样的,因此这种配置一般都是可以由用户自定义编辑。(7)实现方法针对特定的图形设备输出接口,自行开发相关的功能函数。购买针对特定嵌入式系统的图形中间软件包。采用源码开放的嵌入式GUI系统。使用独立软件开发商提供的嵌入式GUI产品。第3章 设计原理3.1波形分析原理3.1.1 信号频率、幅值和相位估

22、计(1)频率(周期)检测对周期信号来说,可以用时域波形分析来确定信号的周期,也就是计算相邻的两个信号波峰的时间差、或过零点的时间差。这里采用过零点(ti)的时间差T(周期)。频率即为f = 1/T,由于能够求得多个T值(ti有多个),故采用它们的平均值作为周期的估计值。(2)幅值检测在一个周期内,求出信号最大值ymax与最小值ymin的差的一半,即A = (ymax - ymin)/2,同样,也会求出多个A值,但第1个A值对应的ymax和ymin不是在一个周期内搜索得到的,故以除第1个以外的A值的平均作为幅值的估计值。(3)相位检测采用过零法,即通过判断与同频零相位信号过零点时刻,计算其时间差

23、,然后换成相应的相位差。=2(1-ti/T),同样,以的平均值作为相位的估计值。 针对对信号频率、幅值和相位检测的理论分析画出频率、幅值和相位估计的流程图如图 1所示。3.1.2 数字信号统计量估计(1) 峰值P的估计 在样本数据x中找出最大值与最小值,其差值为双峰值,双峰值的一半即为峰值。P=0.5max(yi)-min(yi) (式3-1)开始n=1,ymax =ymin=0i=3Yyi=1<0且yi=2<0且yi>=0且yi+1>0NNymax<yiYyi =0?Yymax =yi Ntin=i/FsNYtin =i-yi /(yi -yi-1)/FsAn=

24、(ymax -ymin)/2ymax =ymin=0i>N-1?i+NYT为(ti -ti-1)的平均值,i=1.2,f=1/Tn+ymin =yiA 为Ai的平均值,i=2,3,ymin>yi为2(1-ti /Ti)的平均值结束Y图 1频率,幅值和相位估计的流程图其中tin表示第n个过零点,yi为第i个采样点的值,Fs为采样频率。(2)均值估计 (式3-2)式中,N为样本容量,下同。(3) 均方值估计 (式3-3)(4) 方差估计 (式3-4)3.2频谱分析原理时域分析只能反映信号的幅值随时间的变化情况,除单频率分量的简单波形外,很难明确提示信号的频率组成和各频率分量大小,而频谱

25、分析能很好的解决此问题。由于从频域能获得的主要是频率信息,所以本节主要介绍频率(周期)的估计与频谱图的生成。3.2.1 DFT与FFT对于给定的时域信号y,可以通过Fourier变换得到频域信息Y,Y可按式3-5计算 (式3-5)式中,N为样本容量,t = 1/Fs为采样间隔。采样信号的频谱是一个连续的频谱,不可能计算出所有的点的值,故采用离散Fourier变换(DFT),即 (式3-6)式中,f = Fs/N。但上式的计算效率很低,因为有大量的指数(等价于三角函数)运算,故实际中多采用快速Fourier变换(FFT)。其原理即是将重复的三角函数算计的中间结果保存起来,以减少重复三角函数计算带

26、来的时间浪费。由于三角函数计算的重复量相当大,故FFT能极大地提高运算效率。3.2.2 频率、周期的估计对于Y(kf),如果当kf = f时,Y(kf)取最大值,则f为频率的估计值,由于采样间隔的误差,f也存在误差,其误差最大为f / 2,周期T=1/f。 从原理上可以看出,如果在标准信号中混有噪声,用上述方法仍能够精确地估计出原标准信号的频率和周期。3.2.3 频谱图为了直观地表示信号的频率特性,工程上常常将Fourier变换的结果用图形的方式表示,即频谱图。以频率f为横坐标,|Y(f)|为纵坐标,可以得到幅值谱;以频率f为横坐标,arg Y(f)为纵坐标,可以得到相位谱;以频率f

27、为横坐标,Re Y(f)为纵坐标,可以得到实频谱;以频率f为横坐标,Im Y(f)为纵坐标,可以得到虚频谱。 根据采样定理,只有频率不超过Fs/2的信号才能被正确采集,即Fourier变换的结果中频率大于Fs/2的部分是不正确的部分,故不在频谱图中显示。即横坐标f 0, Fs/23.3. 模块划分模块化就是把程序划分成独立命名且可独立访问的模块,每个模块完成一个子功能,把这些模块集成起来构成一个整体,可以完成指定的功能满足用户需求。根据人类解决一般问题的经验,如果一个问题由两个问题组合而成,那么它的复杂程度大于分别考虑每个问题时的复杂程度之和,也就是说把复杂的问题分解成许多

28、容易解决的小问题,原来的问题也就容易解决了。这就是模块化的根据。在模块划分时应遵循如下规则:1.改进软件结构提高模块独立性;2.模块规模应该适中;3.深度、宽度、扇出和扇入都应适当;4.模块的作用域应该在控制域之内;5.力争降低模块接口的复杂程度;6.设计单入口单出口的模块;7.模块功能应该可以预测。本着上述的启发式规则,对软件进行如图 2所示的模块划分。频谱分析仪输入模块分析模块图形显示模块方波锯齿波三角波正弦波白噪声基本参数估计FFT统计量计算频谱计算波形显 示频谱图录音音频文件信号发生器频域分析时域分析基本参数估计 图 2频谱分析仪的模块划分第4章 系统程序设计4.1界面设计 MATLA

29、B是Mathworks公司推出的数学软件,它将数值分析、矩阵计算、信号处理和图形显示结合在一起,为众多学科领域提供了一种简洁、高效的编程工具。它提供的GUIDE工具为可视化编程工具,使得软件的界面设计像VB一样方便。故本文采用MATLAB作为编程语言实现声音信号频谱分析仪,以下所讲的都是在MATLAB6.5环境中。为了实现预期的功能,设计如图 3所示的界面。图 3频谱分析仪的界面设计最上面的部分为标题区,用于显示软件标题等信息,不具人机交互功能。标题区下面是信号输入区,包含3种输入方式:声卡输入,WAV文件输入,信号发生器输入。考虑到WAV文件可能是多声道,故提供了声道选择的界面,因为每次只能

30、对单个声道进行分析。在信号发生器中加入了混迭选项,从而可以将产生的信号与原有的信号进行混迭。输入方式界面应该具有:只有当每个单选框被选中时才允许使用对应的输入框、按钮等;其中采样点数输入框在声卡与WAV文件的输入方式下作为输出,在信号发生器的输入方式下作为输入。输入方式单选框程序代码为:(1)声卡单选框程序代码set(findobj('Tag','recordtime'),'enable','on');h=findobj('Tag','filename');set(h,'enable'

31、;,'off');h=findobj('Tag','freq');set(h,'enable','off');h=findobj('Tag','amp');set(h,'enable','off');h=findobj('Tag','phase');set(h,'enable','off');set(handles.channel,'enable','off'

32、;);set(handles.fileopen,'enable','off');set(handles.gensig,'enable','off');set(handles.wavetype,'enable','off');set(handles.add,'enable','off');set(handles.startrecord,'enable','on');(2)WAV文件单选框程序代码h=findobj('Tag'

33、;,'filename');set(h,'enable','on');h=findobj('Tag','freq');set(h,'enable','off');h=findobj('Tag','amp');set(h,'enable','off');h=findobj('Tag','phase');set(h,'enable','off');set(fin

34、dobj('Tag','recordtime'),'enable','off');set(handles.channel,'enable','on');set(handles.fileopen,'enable','on');set(handles.gensig,'enable','off');set(handles.wavetype,'enable','off');set(handles.add,'

35、;enable','off');set(handles.startrecord,'enable','off');(3)信号发生器单选框程序代码h=findobj('Tag','filename');set(h,'enable','off');h=findobj('Tag','freq');set(h,'enable','on');h=findobj('Tag','amp');set

36、(h,'enable','on');h=findobj('Tag','phase');set(h,'enable','on');set(findobj('Tag','recordtime'),'enable','off');set(handles.channel,'enable','off');set(handles.fileopen,'enable','off');set

37、(handles.gensig,'enable','on');set(handles.wavetype,'enable','on');set(handles.add,'enable','on');set(handles.startrecord,'enable','off'); 再往下是分析区,对于WAV文件及录音的信号,有时只对其中一部分信号进行分析,故提供了分析对象范围设定的界面。另外就是时域分析与频域分析的按钮,该软件的核心代码都在这两个按钮的回调函数中。分析区下

38、面是分析结果区,用于显示波形基本参数与统计量的计算结果。分析结果区的下面是波形显示区,用于显示时域波形,在录音结束、打开WAV文件成功或者信号发生器生成波形时会更新显示。右边为频谱图显示区,用于显示各种频谱的谱线,在点击频域分析后会更新显示。4.2输入模块的实现采样频率Fs与采样点数N是声音信号输入时共同需要作用的参数,故将其独立出来。下面分别介绍三种输入方式的实现。(1) 声卡输入这里声卡输入是指由麦克风录音得到的声音信号的输入,MATLAB提供了wavrecord函数,该函数能够实现读取麦克风录音信号。以下是“开始录音”按钮的回调函数的程序代码。Fs=str2double(get(find

39、obj('Tag','samplerate'),'String');handles.y=wavrecord(str2double(get(findobj('Tag','recordtime'),'String')*Fs, Fs,'int16');handles.inputtype=1;guidata(hObject,handles);plot(handles.time,handles.y);title('WAVE');ysize=size(handles.y)set(

40、handles.samplenum,'String',num2str(ysize(1);(2)WAV文件输入MATLAB提供了wavread函数,该函数能够方便的打开并读取WAV文件中的声音信息,并且同时读取所有声道。以下是“打开文件”按钮回调函数的程序代码。temp = wavread(get(findobj('Tag','filename'),'String');channel=str2double(get(handles.channel,'String');handles.y=temp(:,channel);

41、handles.inputtype=2;guidata(hObject,handles);plot(handles.time,handles.y);title('WAVE');ysize=size(handles.y)set(handles.samplenum,'String',num2str(ysize(1);(3)信号发生器MATLAB有产生标准信号的函数,如sawtooth能够产生三角波或钜齿波,利用get函数获得波形soundtype,频率frequency,幅值amp和相位phase,以下是“生成波形”按钮回调函数程序代码。Fs=str2double(

42、get(findobj('Tag','samplerate'),'String');N=str2double(get(findobj('Tag','samplenum'),'String');x=linspace(0,N/Fs,N);soundtype=get(handles.wavetype,'Value');frequency=str2double(get(handles.freq,'String');amp=str2double(get(handles.amp,

43、'String');phase=str2double(get(handles.phase,'String');switch soundtypecase 1 y=amp*sin(2*pi*x*frequency+phase);case 2 y=amp*sign(sin(2*pi*x*frequency+phase);case 3 y=amp*sawtooth(2*pi*x*frequency+phase,0.5);case 4 y=amp*sawtooth(2*pi*x*frequency+phase); case 5 y=amp*(2*rand(size(x)-

44、1); otherwise errordlg('Illegal wave type','Choose errer');endif get(handles.add,'Value')=0.0 handles.y=y;else handles.y=handles.y+y;endhandles.inputtype=3;guidata(hObject,handles);plot(handles.time,handles.y);title('WAVE');axis(0 N -str2double(get(handles.amp,'St

45、ring') str2double(get(handles.amp,'String');4.3分析模块由于MATLAB的绘图功能很强大,所以图形显示模块不用单独开发,可直接调用plot、axis等函数实现图形显示功能,故图形显示也将在分析模块中给出。(1) 时域分析MATLAB提供了mean,std函数,能够方便地计算均值、标准差。以下是“时域分析”按钮回调函数程序代码,其中T为过零检测得到的周期(向量),amp为过零检测得到的幅值(向量),n为过零点数。Fs=str2double(get(findobj('Tag','samplerate

46、9;),'String');N=str2double(get(findobj('Tag','samplenum'),'String');if handles.inputtype=0 msgbox('No wave exist! Please choose a input type!'); return;endn=1;ymax=max(handles.y(1) handles.y(2);ymin=min(handles.y(1) handles.y(2);from=str2double(get(handles.poi

47、ntfrom,'String');to=str2double(get(handles.pointto,'String');if from<1 | to-from<5; msgbox('Error range!'); return;endfor i=from+2:to-1; if handles.y(i-1)<0 & handles.y(i-2)<0 & handles.y(i)>=0 & handles.y(i+1)>0 if handles.y(i)=0 ti(n)=i; else t

48、i(n)=i-handles.y(i)/(handles.y(i)-handles.y(i-1); end amp(n)=(ymax-ymin)/2; ymax=0; ymin=0; n=n+1; else if ymax<handles.y(i) ymax=handles.y(i); end if ymin>handles.y(i) ymin=handles.y(i); end endendn=n-1;for i=1:n-1 T(i)=ti(i+1)-ti(i);endfreq=Fs/mean(T);set(handles.outt,'String',1/freq

49、);set(handles.outfreq,'String',num2str(freq);set(handles.outamp,'String',num2str(mean(amp(2:n-1);phase=2*pi*(1-(ti(1:n-1)-1)./T+floor(ti(1:n-1)-1)./T);set(handles.outphase,'String',num2str(mean(phase);set(handles.outpeak,'String',(max(handles.y(from:to)-min(handles.y(

50、from:to)/2);set(handles.outmean,'String',mean(handles.y(from:to);set(handles.outmeansquare,'String',mean(handles.y(from:to).2);set(handles.outs,'String',std(handles.y(from:to)2);(2) 频域分析频域分析需要作Fourier变换,MATLAB提供了fft函数,能够方便地实现快速Fourier变换算法。以下是“频域分析”按钮回调函数程序代码。Fs=str2double(get

51、(findobj('Tag','samplerate'),'String');N=str2double(get(findobj('Tag','samplenum'),'String');if handles.inputtype=0 msgbox('No wave exist! Please choose a input type!'); return;endfrom=str2double(get(handles.pointfrom,'String');to=str2d

52、ouble(get(handles.pointto,'String');sample=handles.y(from:to);f=linspace(0,Fs/2,(to-from+1)/2);Y=fft(sample,to-from+1);C,I=max(abs(Y);set(handles.foutt,'String',1/f(I);set(handles.foutfreq,'String',f(I);Y=Y(1:(to-from+1)/2);plot(handles.plot1,f,2*sqrt(Y.*conj(Y);plot(handles.

53、plot2,f,angle(Y);plot(handles.plot3,f,real(Y);plot(handles.plot4,f,imag(Y);plot(handles.plot5,f,abs(Y).2);xlabel(handles.plot1,'freqency(Hz)');xlabel(handles.plot2,'freqency(Hz)');xlabel(handles.plot3,'freqency(Hz)');xlabel(handles.plot4,'freqency(Hz)');xlabel(handles

54、.plot5,'freqency(Hz)');ylabel(handles.plot1,'amplitude');ylabel(handles.plot2,'phase(rad)');ylabel(handles.plot3,'real');ylabel(handles.plot4,'Imaginary');ylabel(handles.plot5,'power');第5章 软件运行及结果分析为了分析软件的性能并比较时域分析与频域分析各自的优势,本章给出了两种分析频率估计方法的比较,分析软件的性能在

55、时域和频域的计算精度问题。(1)标准正弦信号的频率估计用信号发生器生成标准正弦信号,然后分别进行时域分析与频域分析,得到的结果如图 4所示。从图中可以看出,时域分析的结果为f = 400.3702Hz,频域分析的结果为f = 417.959Hz,而标准信号的频率为400Hz,从而对于标准信号时域分析的精度远高于频域分析的精度。 图 4 标准正弦信号的频率估计(2) 带噪声的正弦信号的频率估计先生成幅值100的标准正弦信号,再将幅值50的白噪声信号与其混迭,对最终得到的信号进行时域分析与频域分析,结果如图 5所示,可以看出,时域分析的结果为f = 168.391Hz,频域分析的结果为f = 200.391Hz,而标准信号的频率为200Hz,从而对于带噪声的正弦信号频域分析的精度远高于时域分析的精度。图 5 带噪声的正弦信号的频率估计 在时域,频率估计是使用过零检测的方式计算出,从而对于带噪声的信号既容易造成“误判”,也容易造成“漏判”,且噪声信号越明显,“误判”与“漏判”的可能性越大。但在没有噪声

温馨提示

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

评论

0/150

提交评论