wav信号波形分析合成00001Word格式.docx
《wav信号波形分析合成00001Word格式.docx》由会员分享,可在线阅读,更多相关《wav信号波形分析合成00001Word格式.docx(22页珍藏版)》请在冰点文库上搜索。
音的频率决定,同时也与声音强度有关。
对一定强度的纯音,音调随频率的升降
而升降;
对一定频率的纯音、低频纯音的音调随声强增加而下降,高频纯音的音
调却随强度增加而上升。
2.谐波与音色
谐波是指周期函数或周期性的波形中不能用常数与原函数基频的正弦函数
和余弦函数的线性组合表达的部分。
nωO称为ωO的n次谐波分量,也称为(n-1>
次泛音。
音色是由混入基音的泛音所决定的,高次谐波越丰富,音色就越有明亮
感和穿透力。
不同的谐波具有不同的幅值An和相位偏移ψn,由此产生各种音
色效果。
3.幅度与音强
人耳对于声音细节的分辨只有在强度适中时才最灵敏。
人的听觉响应与强度
成对数关系。
常用音量来描述音强,以分贝<
dB=20log)为单位。
4.音宽与频带
音频信号的频带宽度简称为音宽,它是描述组成复合信号的频率范围。
借助傅里叶变换,信号可以时间函数或频率函数两种形式描述,特别是周期
信号和准周期信号<
前者由一个基频成分和若干谐波成分,后者虽可分解为几个
正弦分量,但它们的周期没有公倍数),从频率域可以很清楚地了解它们由哪些
正弦分量组成。
而对于非平稳信号,最典型的例子就是语音信号,它是非周期的,
频谱随时间连续变化,因此由傅里叶变换得到的频谱无法获知其在各个时刻的频
谱特性。
最直观的想法就是用中心在某一时刻的时间窗截取一段信号,对其做傅
里叶变换,得到这一时刻的频谱;
然后将窗在时间轴上移动,从而得到不同时刻
的频谱,这就是短时频谱的原理。
最简单的窗就是矩形窗,即直接从原信号中截
取一段。
三、涉及的MATLAB函数
1.wavread
功能:
读取Microsoft的WAVE文件。
基本调用格式:
[y,Fs,nbits]=wavread(filename>
载入以filename命名的WAVE文件。
y为采样数据,Fs为WAVE文件被采样时所用的采样频率,nbits为用于描述
每个采样点的编码数据位数<
常用的有8bits和16bits)。
其中filename
以单引号括起的字符串方式输入。
2.wavrecord
应用PC机上音频输入设备录制声音。
y=wavrecord(n,Fs>
对某音频信号以FsHz采样率连续录入n个采样点的
数据。
其中Fs默认值为11025Hz。
3.wavplay
应用PC机上音频输出设备播放已录制的声音。
Wavplay(y,Fs>
以Fs播放存入矢量y中的音频信号。
Fs默认值仍为11025Hz。
注:
亦可参看sound函数。
4.fft
离散傅立叶变换函数。
Y=fft(X,n>
对矢量X进行n点离散傅立叶变换,结果存入矢量Y。
计算时
所用算法为快速傅立叶变换<
FFT)。
如果X为普通矩阵,那么返回为对此矩
阵进行逐列的FFT的结果。
5.ifft
离散傅立叶反变换。
y=ifft(X,n>
返回对矢量X进行n点离散傅立叶反变换的结果。
同样利用
FFT算法进行具体计算,若X为矩阵,返回结果为逐列离散傅立叶反变换的
Y矩阵。
四、实验内容
本实验利用matlab提供的工具来采集和分析声音信号的频谱,由以下几个
部分组成:
1.声音的采集
Matlab提供了读入、录制和播放声音以及快速傅里叶变换的函数,分别是
wavread、wavrecord、wavplay和fft。
阅读这几个函数的帮助文档,熟练使用。
2.持续音的频谱分析
将Windows的系统目录下的ding.wav文件读入,这是一个双声道的声音,
选择任一声道的信号,使用fft求取其频谱,并用plot显示它的幅度谱,
观察主要的正弦分量;
参考代码:
%%
[y,fs]=wavread('
ding.wav'
>
fs
leng=length(y>
%取其中的一个声道,譬如说,右声道<
左声道的格式yr=y(:
1>
)
yr=y(:
2>
。
%截取前1024个点
yr=yr(1:
1024>
%求取幅度普并显示,首先是fs=2048
YR2048=fft(yr,2048>
figure('
numbertitle'
'
off'
name'
2048点FFT'
subplot(2,1,1>
plot(linspace(-pi,pi,2048>
abs(YR2048>
%FFT的幅频特性
title('
FFT的幅频特性'
subplot(2,1,2>
fftshift(abs(YR2048>
%FFT的幅频特性FFTSHIFT
FFT后幅频特性的fftshift'
%fs=1024
YR1024=fft(yr,1024>
1024点FFT'
plot(linspace(-pi,pi,1024>
abs(YR1024>
fftshift(abs(YR1024>
%FFT的幅频特性的FFTSHIFT
图形如下:
1.1024点FFT
2.1024点FFT
用ifft函数求取频谱的反傅里叶反变换,比较反变换后的信号波形与原
始信号的波形;
%反变换,结果应与原始信号相同
yr1024=real(ifft(YR1024>
1024点fft的反变换'
plot(yr1024>
plot(yr>
原信号'
从频谱中找到幅度最大的正弦分量,构造一个同样幅度的正弦信号,将
其波形与原始信号比较,并且试听一下。
%重构
%寻找幅度最大的正弦分量
[maxpeak,peaki]=max(abs(YR1024(1:
512>
MAXSIN=zeros(1,1024>
MAXSIN(peaki>
=maxpeak。
MAXSIN(1026-peaki>
maxsin=100*ifft(MAXSIN>
’用最大正弦分量重构信号’>
plot(maxsin>
重构的信号'
原始信号'
%试听
wavplay(yr1024,fs>
wavplay(maxsin,fs>
3.时变音的短时频谱分析
使用”loadchirp”载入matlab自带的一个时变音;
loadchirp%y,Fs
从信号中依次截取1024个点,利用上述方法求取其幅度谱,并显示出来,
观察幅度谱随时间的变化情况。
len=length(y>
fori=1:
floor(len/1024>
seg=y((i-1>
*1024+1:
i*1024>
['
Frame'
num2str(i>
]>
fftshift(abs(fft(seg>
end
二、实验操作部分
1.实验数据、表格及数据处理
2.实验操作过程<
可用图表示)
3.实验结论
思考题:
分别录制男生和女生发元音“a”的声音,通过对音频文件的频谱分析对比
两者的差异,并进行合理的解释。
1.通过以下程序录制男生女生声音
%录制声音并播放
duration=2。
fs=8192。
nbits=16。
format='
int16'
waveFile='
C:
\DocumentsandSettings\admin\桌面\mysound'
%录制之后的文件路径,文件名为mysound.wav
y=wavrecord(duration*fs,fs,format>
%录制两秒mic声音
wavwrite(y,fs,nbits,waveFile>
%将声音按fs频率nbits写入mysound.wav
wavplay(y,fs>
%播放<
或者使用sound<
y,fs))
2.录制好的男生声音文件名为“mysound.wav”,女声声音文件名为“nv.wav”
3.男生声音的分析代码如下:
mysound.wav'
fs%fs=11025
%leng=22050
%声音的默认声道为左声道
1.1024点FFT
2.2048点FFT
yr1024=100*real(ifft(YR1024>
%重构寻找幅度最大的正弦分量
女生声音分析代码如下:
nv.wav'
fs%22050
%84480
yr=yr(40000:
41024>
2.2048点FFT
实验分析:
1.通常女声比男声听上去高,原因是女性的声带比较细。
女声比男声的基频高,基频决定了你听到的声音的高低。
通常男声基频在50HZ到180HZ之间,女声基频在160HZ到380HZ之间。
人耳对声音最敏感的区域是2000-5000HZ。
2.由男声女声频谱图可以看出,女声最大幅值时的频率比男声的高一些,男声的频带宽度比女声的宽一些<
由频谱图可以看出)。
不过在图中能够明显看出:
男声的声音音强<
幅度)明显比女声的低,所以女声听起来尖一些,而男声低沉一些。
三、实验效果分析<
包括仪器设备等使用效果)
1.实验过程中,需要考虑到采集的声音样点是否有声音信号,因为有时候录制声音时是从中间才开始有声音的。
像女生的声音是取<
40000:
41024)这之间的点才有“a”的声音。
2.在最后用wavplay<
)听声音“a”时,要注意几点:
首先要一个一个听才行,不能wavplay(yr1024,fs>
两个一起,那样声音叠在一起,无法听清;
其次,要在自己的采样频率下Fs才能听到清晰的,如果用默认的11025HZ会失原始声音。
3.运用matlabwavrecord(>
函数录制声音时要取好FS,在人能听到的范围内,FS越大声音效果越好,越接近原始声音。
4.在逆变换后的声音信号通常比较小,如果想听到比较大的声音可以增加幅度<
即能量)。
5.如果想再最后听到比较长的原始声音,可以在一开始,从离散的声音信号中选取多一些点<
如:
10240个点),在恢复时就能听到比较长的“a”。
四、教师评语
指导教师年月日