1、用matlab研究声学现象摘要: matlab是一种用于算法开发、数据可视化、数据分析以及数值计算的高级技术计算语言和交互式环境。本文利用matlab的强大计算功能和信号数据处理功能,对声音信号进行研究。以音叉为切入点,用傅立叶变换(FFT)对音叉振动的图像展开分析,测算音叉频率等性质。与传统物理方法不同的是并没有利用声学和振动的物理性质,只是利用录制的声音文件和matlab的计算机实测功能。本文还用matlab设计的数字滤波器对声音信号进行滤波降噪处理,并对实验方法的改进展开了讨论。关键词:语音信号 matlab 音叉 傅立叶变换 数字滤波器 一、引言4二、音叉的振动5 2.1 音叉介绍5
2、2.2 音叉基本性质5三、傅立叶变换63.1 简介 63.2 离散傅立叶变换(DFT)63.3 快速傅立叶变换(FFT)73.4 用FFT变换处理声音信号73.5 音叉频率93.6分析与结论143.7 改进方法163.8 FFT变换的其它应用17四、数字滤波器194.1 滤波器简介194.2 数字滤波器原理194.3 理想滤波器分类204.4 滤波器的设计214.5 对音频文件进行滤波处理214.6 结论24五、结束语25谢致26参考文献27一、引言 在我们生活的世界中,声音是最常见的信息传递方式之一。声音的振动在连续介质中传播。振动的物体称为声源,声源引起周围空气分子加速,并向周围波状扩散,
3、这就是空气中的声音。人耳对声音的感觉决定于声音的频率,它使我们能区别不同人讲话以及不同物体发出的声音。一般的自然界的各种声音中含有许多不同频率的声波,人耳通过接受到的声音的振动频率来区分不同的声音。matlab是一种用于算法开发、数据可视化、数据分析以及数值计算的高级技术计算语言和交互式环境。matlab的应用范围非常广,包括信号和图像处理、通讯、控制系统设计、测试和测量、财务建模和分析以及计算生物学等众多应用领域。附加的工具箱(单独提供的专用matlab 函数集)扩展了matlab环境,以解决这些应用领域内特定类型的问题。 主要功能此高级语言可用于技术计算 此开发环境可对代码、文件和数据进行
4、管理 交互式工具可以按迭代的方式探查、设计及求解问题 数学函数可用于线性代数、统计、傅立叶分析、筛选、优化以及数值积分等 二维和三维图形函数可用于可视化数据 各种工具可用于构建自定义的图形用户界面 各种函数可将基于matlab的算法与外部应用程序和语言(如C、C+、Fortran、Java、COM以及Microsoft Excel)集成 matlab在计算科学,自然科学,社会科学等多方面都有很多应用,本文以matlab为工具,主要研究它在处理语音信号方面的应用。二、音叉的振动:2.1 音叉介绍:音叉(tuning fork)是呈“Y”形的钢质或铝合金发声器,各种音叉可因其质量和叉臂长短、粗细不
5、同而在振动时发出不同频率的纯音。音叉可用于钢琴的调音,用音叉取标准音是钢琴调律过程中十分重要的环节之一,它关系到一台钢琴各键音处在什么音高位置上。2.2 音叉基本性质:音叉系统在周期性外力()作用下发生振动,其振动系统满足下列运动微分方程:式中:阻尼常数;音叉系统的固有圆频率;振动系统的质量;强迫力的振幅;强迫力的圆频率;在阻尼较小的情况下,上述方程的解式中第一项是一个减幅振动;第二项是一个等幅振动。 当达到稳定状态后其振动表达式为:式中;当=时,振幅A出现极大值,此时达到共振。三、傅立叶变换: 3.1 简介:傅立叶变换是信号分析和处理的重要工具。有限长序列作为离散信号的一种,在数字信号处理中
6、占有极其重要的位置。对于有限长序列,离散傅立叶变换不仅在理论上有着重要的意义,而且有快速计算的方法快速傅立叶变换。所以在各种数字信号处理的运算方法中越来越起到核心的作用。所谓傅立叶变换就是以时间为自变量的“信号”与频率为自变量的“频谱”函数之间的某种变换关系。这种变换同样可以应用到其他各种有关物理或数学的问题中,并可以采用其他形式的变量。当自变量“时间”或“频率”需连续形式和离散形式的不同组合时,就可以形成各种不同的傅立叶变换对。3.2 离散傅立叶变换(DFT) 离散傅立叶级数变换是周期序列,有N个独立的数值,所以他的许多特性可以通过有限长序列沿拓来得到。对于一个长度为N的有限长序列x(n),
7、也即小(n)只在0(N-1)各点上有非零值,即把序列x(n)以N为周期进行周期沿拓得到周期序列,则有所以,有限长序列x(n)的离散傅立叶变换(DFT)为逆变换为3.3 快速傅立叶变换(FFT)快速傅立叶变换(FFT)并不是与DFT不同的另外一种变换,而是减少DFT计算次数的一种快速有效的算法。这种快速有效的算法,主要是利用了下面两个特性使长序列的DFT分解为更小点数的DFT所实现的。(1)利用的对称性使DFT运算中有些项合并(2)利用的周期性和对称性使长序列的DFT分解为更小点数的DFT快速傅立叶变换(The Fast Fourier Transform,FFT)是离散傅立叶变换(Discre
8、te Fourier Transform,DFT)的一种快速算法,它是库利(Cooley)和图基(Tukey)于1965年提出的。FFT使DFT的次数由N2减少到Nlog2(N)次,使DFT应用于实际变为现实,使DFT进一步得到完善。对FFT作下面三点说明: 1.FFT是通过DFT运算中存在对称性和周期性而做的化简。 2.FFT可以通过对时间参量或者频率参量不断分解为奇偶表达式,再做进一步改进,分别称为时间抽取法和频率抽取法。 3.matlab给出的FFT介绍实际是DFT的表达式,未作DFT向FFT的简化过程说明,但计算过程内核是FFT。3.4 用FFT变换处理声音信号由于matlab是以矩阵
9、的形式组织数据的,对于单声道的语音数据在MATLAB中是一维数组。Matlab中有2个处理wav格式语音的函数,一个是将wav语音流文件转换为数组格式数据的函数wavread(),另一个是将数组格式数据转换为wav语音流文件的函数wavwrite()。windows自带的录音机软件可以录制较短的音频文件,文件后缀名为wav,也可以用mp3录制。对于其它后缀的音频文件可以利用音频格式转换软件,将文件转换为wav。利用matlab对该类文件的FFT变换,获得音频信号在时域上的图像,从而作进一步的分析。首先对两个不同音叉,音叉A和音叉B的声音信号进行分析:在matlab中输入如下程序:y,Fs,bi
10、ts=wavread(); y=y(:,2); sigLength=length(y); Y = fft(y,sigLength); Pyy = Y.* conj(Y) / sigLength; halflength=floor(sigLength/2); f=Fs*(0:halflength)/sigLength; figure;plot(f,Pyy(1:halflength+1);xlabel(Frequency(Hz); t=(0:sigLength-1)/Fs; figure;plot(t,y);xlabel(Time(s);3.5 音叉频率用matlab得到音叉的波形图后,就可以利用
11、波形图来测量音叉的固有频率。分别截取时间段(2.000s2.050s),(4.000s4.050s),(6.000s6.050s),(8.000s8.050s),(10.000s10.050s), (12.000s12.050s) (14.000s14.050s) (16.000s16.050s)用matlab绘制波形图,图形如下: 2.000s2.050s时域波形图 4.000s4.050s时域波形图 6.0006.050时域波形图 8.000s8.050s时域波形图 10.000s10.050s时域波形图 12.000s12.050s时域波形图 14.000s14.050s时域波形图 16
12、.000s16.050s时域波形图 获得不同时间段的频率:时间段(s)2.000 2.0504.000 4.0506.000 6.0508.000 8.05010.00010.05012.00012.05014.00014.05016.00016.050通过平衡位置的次数4446444543444333频率(Hz)440460440450430430430330最后一个数据与其它数据偏差较大,故舍去。得出音叉固有频率为=(44+46+44+45+43+43+44)/0.05/2=441(Hz)3.6 分析与结论: 这种方法是利用matlab的数据图像处理能力来测量音叉频率,与传统的物理方法不同
13、,没有涉及音叉的物理性质,只是从音叉振动的波形图入手。由音叉在各个时段的波形图可以看出,音叉从1.2s开始振动,到10s之前,振幅和频率都很稳定,很便于研究音叉的性质。12s14s时,音叉的固有频率稳定,但振幅不稳定。16s时,音叉的振动很不规律。再将14s到16s时间段提取出来,图像如下: 14.00016.000时域波形图因为信号时域跨越了2s,从波形图中无法直接看出信号的变化规律,但是可以将波形图横向拉伸,与4s6s之间的波形图相比较,就不难看出信号变化无规则(可以使用photoshop等软件对图像进行拉伸和局部放大)。 4.000s6.000s时域波形图可以得出结论,在音叉振动过程中,
14、在开始的2s中振幅迅速减小,2s10s阶段,可以将音叉振动视为无阻尼简谐振动,10s之后变为无规则振动。声音采样频率为44kHz,远远大于音叉的固有频率,所以声音的采集方式不会对实验造成很大影响。但录制声音时的外界杂音对声音信号有一定干扰,录制的声音不够纯正,后面对于降噪处理还有详细介绍,这里不再赘述。而造成误差的最主要因素是空气阻力和音叉附近气流的变化。音叉振动后期的无规则是因为音叉振幅减小,气流将对他造成更大影响。3.7 改进方法: 因为实验的误差主要来自空气分子的振动,所以,可以将实验放入密闭容器中进行。然后降低容器内气体的温度,使气体分子动能减少,分子间碰撞几率减少。保证实验在一个稳定
15、,“均匀”的环境下进行。一个固定频率音叉一旦起振后,它将以基频振动而无谐频振动,音叉的双臂是对称的,以至双臂的振动是完全反向的,对中心杆始终都有等值反向的作用力,中心杆的净受力为零而不振动,因而紧紧握住中心杆是不会引起振动衰减的。从音叉振动的波形图中,我们可以很直观的看到音叉的振动规律,两个音叉的振动几乎是完全一样的,所以两个音叉叉可能发生共振。当音叉发生共振时,其能量衰减明显变快。3.8 FFT变换的其它应用:傅立叶分析是信号处理很重要的一个基本工具,在快速傅立叶变换出现后,傅立叶分析被广泛用于滤波、频谱分析和功率分析上。进行声谱分析时,使用一维离散快速傅立叶变换函数FFT, matlab具
16、有结果可视化功能,提供原始信号,声图和功率谱.再经过统计分析,找出发声规律。字母a的波形图,频谱图,倒谱图字母b的波形图,频谱图,倒谱图四、数字滤波器:4.1 滤波器简介:滤波器是指用来对输入信号进行滤波的硬件和软件.所谓数字滤波器,是指输入、输出均为数字信号,通过一定运算关系改变输入信号所含频率成分的相对比例或者滤除某些频率成分的器件,在数字信号处理中占有及其重要的地位。数字滤波器根据其冲激响应函数的时域特性,可分为两种,即无限长冲激响应(IIR)滤波器和有限长冲激响应 (FIR)滤波器,我们通常用的数宇滤波器属于选频滤波器.数宇滤波器的传输函数由幅频和相频组成。选频滤波器的技术要求由幅频特
17、性给出,相频一般不作要求,如果对输出波形有要求,则要考虑相频的技术指标,如语音合成等。一般情况下,研究幅频特性用IIR滤波器即可,如果研究相频特性,则需要用线性相位数字滤波器,一般情况下FIR滤波器即可。4.2 数字滤波器原理:对于数字滤波器, 设滤波器的单位脉冲为, 输入信号为, 则对的滤波计算为或用差分方程描述所以滤波器的特性是由或决定的.以后将看到, 滤波器设计过程为, 由滤波器的要求, 去决定或(即).从滤波器设计的历史变化过程来看, 是先有模拟的,然后才有数字滤波器.4.3 理想滤波器分类 (1)低通滤波器 (2)高通滤波器 (3)带通滤波器 (4)带阻滤波器4.4 滤波器的设计:
18、经典设计法只限于几种标准的低通、高通、带通和带阻滤波器,对于具有任意形状或者多频带滤波器设计则无能为力.针对这一问题,MATLAB提供yulewalk函数,使用最小二乘法拟合给定的频率,使设计的滤波器达到期望的频率特性,这就是直接设计法. IIR滤波器的设计步骤:(1)将给定的数字滤波器的性能指标,按某一变换(映射)规则转换成相应的模拟滤波器性能指标。(2)如果要设计的不是数字滤波器,则还需要将步骤(l)中变换所得到相应的(高通,带通,带阻)模拟滤波器性能指标变换成模拟低通滤波器的性能指标。这是因为模拟低通滤波器才有图形和表格可以利用。(3)用所得到的模拟低通滤波器的性能指标,利用某种模拟滤波
19、器逼近方法,设计并查表求得此模拟低通滤波器的系统函数,以它作为设计数字滤波器的“样本”。(4)利用与步骤(1),(2)中的同一变换规则,将此作为“样本”的模拟原型,低通滤波器的系统函数最终变换成所需的数字各型滤波器的系统函数H(z). FIR滤波器单位脉冲响应是有限长的,系统必定稳定,且可以做成严格的线性相位。FIR滤波器的设计方法有许多种,如窗函数设计法、频率取样法和最优化设计法等4.5 对音频文件进行滤波处理: 以音叉A的振动声音为原始信号,对音频文件进行滤波。 首先录制一段周围环境噪声的声音文件,用求音叉频率同样的方法求出环境噪音的频率。得到环境噪音频率约为200Hz。利用matlab设
20、计一个IIR型高通滤波器,程序如下: k,Fs,bits=wavread(); k=k(:,1); y_temp=k(1:90000); dfactor=3; y=decimate(y_temp,dfactor); b,a = butter(10,200/(Fs/(dfactor*2),high); y=filter(b,a,y); y=interp(y,dfactor); sigLength=length(y); Y = fft(y,sigLength); Pyy = Y.* conj(Y) / sigLength; halflength=floor(sigLength/2); f=Fs*(
21、0:halflength)/sigLength; figure;plot(f,Pyy(1:halflength+1);xlabel(Frequency(Hz); sigLength=length(y_temp); Y = fft(y_temp,sigLength); Pyy = Y.* conj(Y) / sigLength; halflength=floor(sigLength/2); f=Fs*(0:halflength)/sigLength; figure;plot(f,Pyy(1:halflength+1);xlabel(Frequency(Hz); t=(0:sigLength-1)
22、/Fs; figure;plot(t,y,t,y_temp);xlabel(Time(s); wavplay(y,Fs);把14s16s的音叉振动声音提取出来,进行滤波,滤掉200Hz的环境噪音,得到图像如下: 14.000s16.000s时域波形图(滤波处理后)再观察短时波形图: 14.000s14.050s时域波形图(滤波处理后)经过滤波处理后,和原来的波形图相比较可以看出它的频率,振幅都比较稳定,频率为440Hz,与固有频率很接近。4.6 结论 IIR型滤波器有效的过滤了环境噪声对原声的干扰,经过滤波后的声音更为清晰,波形图光滑,稳定。音叉在振幅很小时,环境噪声的影响尤为明显,造成了振动
23、的无规则。经过滤波后,除掉了环境噪声,由图像可以看出音叉依然以固有频率,稳定的振动,可以近似视为无阻尼的简谐振动。五、结束语 本文以matlab为工具,围绕音叉的振动,作了简单的研究。和传统的物理实验方法相比,利用计算机可以有效地减小实验中的误差,提高实验的准确性,操作也更为方便迅捷。Matlab作为一种计算机语言式软件,可以有效地将实验与计算机联系起来。除了数字信号变换和滤波的功能外,matlab还具有很强大的图像处理功能,数学计算功能等。而且不光是在物理学方面,在数学,化学,生物学,经济学,甚至是社会学也有很多应用。谢致 能够完成这次的毕业论文设计,离不开众多同学和老师的帮助与鼓励。首先我
24、最应该感谢的是我的导师俞熹老师。俞熹老师无论是教学还是科研,都有大量的工作急需解决,同时,他还要带领我们多名本科生完成毕业论文,负担的确很大。即使这样,他仍然在百忙中抽出时间,定时开组会,对我们的实验情况进行分析讲解,并给出合理的建议。而且,在实验方面,他给与我们更自由的发挥空间,让我们自己完成自己设计的实验内容,而不过多地进行约束,还提供了资金和实验设备上的支持。我在此对俞熹老师认真负责的工作态度表示敬意。 然后,我还应给感谢谷雨同学。他在matlab方面有过深入的研究,并取得了一定的成果。在我向他请教的时候,他把许多实验技巧和经验无私的分享给我,还牺牲自己的时间为我耐心讲解,我对于他这种奉
25、献精神表示感谢。 我还要感谢系里对我们毕业论文的帮助和支持,为我们提供的必要的实验设备,以及多年来对我们学习生活上的关心。 最后,对我在参考资料中提到的各位作者表示感谢,他们为我的毕业论文提供了大量的参考资料和理论基础,给与我许多启发,在此祝贺他们在学术上取得的成就。参考文献:黄文梅等编 信号分析与处理matlab语言及应用 国防科技大学出版社 2000年薛年喜编 matlab在数字信号处理中的应用 清华大学出版社 2008年李南南等编matlab7简明教程 清华大学出版社 2006年陈桂明等编应用matlab语言处理数字信号与数字图像 科学出版社 2000年漆安慎力学 高等教育出版社 1997年 马大猷现代声学理论基础科学出版社 2005年
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1