用matlab研究声学现象复旦大学物理教学试验中心FudanPhysicsWord文档下载推荐.docx
《用matlab研究声学现象复旦大学物理教学试验中心FudanPhysicsWord文档下载推荐.docx》由会员分享,可在线阅读,更多相关《用matlab研究声学现象复旦大学物理教学试验中心FudanPhysicsWord文档下载推荐.docx(21页珍藏版)》请在冰豆网上搜索。
5
2.2音叉基本性质·
三、傅立叶变换·
6
3.1简介·
3.2离散傅立叶变换(DFT)·
3.3快速傅立叶变换(FFT)·
7
3.4用FFT变换处理声音信号·
3.5音叉频率·
9
3.6分析与结论·
14
3.7改进方法·
16
3.8FFT变换的其它应用·
17
四、数字滤波器·
19
4.1滤波器简介·
4.2数字滤波器原理·
4.3理想滤波器分类·
20
4.4滤波器的设计·
21
4.5对音频文件进行滤波处理·
4.6结论·
24
五、结束语·
25
谢致·
26
参考文献·
27
一、引言
在我们生活的世界中,声音是最常见的信息传递方式之一。
声音的振动在连续介质中传播。
振动的物体称为声源,声源引起周围空气分子加速,并向周围波状扩散,这就是空气中的声音。
人耳对声音的感觉决定于声音的频率,它使我们能区别不同人讲话以及不同物体发出的声音。
一般的自然界的各种声音中含有许多不同频率的声波,人耳通过接受到的声音的振动频率来区分不同的声音。
matlab是一种用于算法开发、数据可视化、数据分析以及数值计算的高级技术计算语言和交互式环境。
matlab的应用范围非常广,包括信号和图像处理、通讯、控制系统设计、测试和测量、财务建模和分析以及计算生物学等众多应用领域。
附加的工具箱(单独提供的专用matlab函数集)扩展了matlab环境,以解决这些应用领域内特定类型的问题。
主要功能
●此高级语言可用于技术计算
●此开发环境可对代码、文件和数据进行管理
●交互式工具可以按迭代的方式探查、设计及求解问题
●数学函数可用于线性代数、统计、傅立叶分析、筛选、优化以及数值积分等
●二维和三维图形函数可用于可视化数据
●各种工具可用于构建自定义的图形用户界面
●各种函数可将基于matlab的算法与外部应用程序和语言(如C、C++、Fortran、Java、COM以及MicrosoftExcel)集成
matlab在计算科学,自然科学,社会科学等多方面都有很多应用,本文以matlab为工具,主要研究它在处理语音信号方面的应用。
二、音叉的振动:
2.1音叉介绍:
音叉(tuningfork)是呈“Y”形的钢质或铝合金发声器,各种音叉可因其质量和叉臂长短、粗细不同而在振动时发出不同频率的纯音。
音叉可用于钢琴的调音,用音叉取标准音是钢琴调律过程中十分重要的环节之一,它关系到一台钢琴各键音处在什么音高位置上。
2.2音叉基本性质:
音叉系统在周期性外力(
)作用下发生振动,其振动系统满足下列运动微分方程:
式中:
———阻尼常数;
———音叉系统的固有圆频率;
———振动系统的质量;
———强迫力的振幅;
———强迫力的圆频率;
在阻尼较小的情况下,上述方程的解
式中第一项是一个减幅振动;
第二项是一个等幅振动。
当达到稳定状态后其振动表达式为:
式中
;
当
=
时,振幅A出现极大值,此时达到共振。
三、傅立叶变换:
3.1简介:
傅立叶变换是信号分析和处理的重要工具。
有限长序列作为离散信号的一种,在数字信号处理中占有极其重要的位置。
对于有限长序列,离散傅立叶变换不仅在理论上有着重要的意义,而且有快速计算的方法——快速傅立叶变换。
所以在各种数字信号处理的运算方法中越来越起到核心的作用。
所谓傅立叶变换就是以时间为自变量的“信号”与频率为自变量的“频谱”函数之间的某种变换关系。
这种变换同样可以应用到其他各种有关物理或数学的问题中,并可以采用其他形式的变量。
当自变量“时间”或“频率”需连续形式和离散形式的不同组合时,就可以形成各种不同的傅立叶变换对。
3.2离散傅立叶变换(DFT)
离散傅立叶级数变换是周期序列,有N个独立的数值,所以他的许多特性可以通过有限长序列沿拓来得到。
对于一个长度为N的有限长序列x(n),也即小(n)只在0~(N-1)各点上有非零值,即
把序列x(n)以N为周期进行周期沿拓得到周期序列
,则有
所以,有限长序列x(n)的离散傅立叶变换(DFT)为
逆变换为
3.3快速傅立叶变换(FFT)
快速傅立叶变换(FFT)并不是与DFT不同的另外一种变换,而是减少DFT计算次数的一种快速有效的算法。
这种快速有效的算法,主要是利用了
下面两个特性使长序列的DFT分解为更小点数的DFT所实现的。
(1)利用
的对称性使DFT运算中有些项合并
(2)利用
的周期性和对称性使长序列的DFT分解为更小点数的DFT
快速傅立叶变换(TheFastFourierTransform,FFT)是离散傅立叶变换(DiscreteFourierTransform,DFT)的一种快速算法,它是库利(Cooley)和图基(Tukey)于1965年提出的。
FFT使DFT的次数由N^2减少到Nlog2(N)次,使DFT应用于实际变为现实,使DFT进一步得到完善。
对FFT作下面三点说明:
1.FFT是通过DFT运算中存在对称性和周期性而做的化简。
2.FFT可以通过对时间参量或者频率参量不断分解为奇偶表达式,再做进一步改进,分别称为时间抽取法和频率抽取法。
3.matlab给出的FFT介绍实际是DFT的表达式,未作DFT向FFT的简化过程说明,但计算过程内核是FFT。
3.4用FFT变换处理声音信号
由于matlab是以矩阵的形式组织数据的,对于单声道的语音数据在MATLAB中是一维数组。
Matlab中有2个处理wav格式语音的函数,一个是将wav语音流文件转换为数组格式数据的函数wavread(),另一个是将数组格式数据转换为wav语音流文件的函数wavwrite()。
windows自带的录音机软件可以录制较短的音频文件,文件后缀名为wav,也可以用mp3录制。
对于其它后缀的音频文件可以利用音频格式转换软件,将文件转换为wav。
利用matlab对该类文件的FFT变换,获得音频信号在时域上的图像,从而作进一步的分析。
首先对两个不同音叉,音叉A和音叉B的声音信号进行分析:
在matlab中输入如下程序:
[y,Fs,bits]=wavread('
filename'
);
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;
plot(t,y);
Time(s)'
3.5音叉频率
用matlab得到音叉的波形图后,就可以利用波形图来测量音叉的固有频率。
分别截取时间段(2.000s~2.050s),(4.000s~4.050s),(6.000s~6.050s),(8.000s~8.050s),(10.000s~10.050s),(12.000s~12.050s)(14.000s~14.050s)(16.000s~16.050s)用matlab绘制波形图,图形如下:
2.000s~2.050s时域波形图
4.000s~4.050s时域波形图
6.000~6.050时域波形图
8.000s~8.050s时域波形图
10.000s~10.050s时域波形图
12.000s~12.050s时域波形图
14.000s~14.050s时域波形图
16.000s~16.050s时域波形图
获得不同时间段的频率:
时间段(s)
2.000~
2.050
4.000~
4.050
6.000~
6.050
8.000~
8.050
10.000~10.050
12.000~12.050
14.000~14.050
16.000~16