如果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>
plot(linspace(-pi,pi,2048>,fftshift(abs(YR2048>>>%FFT的幅频特性FFTSHIFT
title('FFT后幅频特性的fftshift'>
%fs=1024
YR1024=fft(yr,1024>。
figure('numbertitle','off','name','1024点FFT'>。
subplot(2,1,1>
plot(linspace(-pi,pi,1024>,abs(YR1024>>%FFT的幅频特性
title('FFT的幅频特性'>
subplot(2,1,2>
plot(linspace(-pi,pi,1024>,fftshift(abs(YR1024>>>%FFT的幅频特性的FFTSHIFT
title('FFT后幅频特性的fftshift'>
图形如下:
1.1024点FFT
2.1024点FFT
用ifft函数求取频谱的反傅里叶反变换,比较反变换后的信号波形与原
始信号的波形;
参考代码:
%反变换,结果应与原始信号相同
yr1024=real(ifft(YR1024>>。
figure('numbertitle','off','name','1024点fft的反变换'>。
subplot(2,1,1>。
plot(yr1024>
title('1024点fft的反变换'>
subplot(2,1,2>。
plot(yr>。
title('原信号'>。
图形如下:
从频谱中找到幅度最大的正弦分量,构造一个同样幅度的正弦信号,将
其波形与原始信号比较,并且试听一下。
参考代码:
%重构
%寻找幅度最大的正弦分量
[maxpeak,peaki]=max(abs(YR1024(1:
512>>>。
MAXSIN=zeros(1,1024>。
MAXSIN(peaki>=maxpeak。
MAXSIN(1026-peaki>=maxpeak。
maxsin=100*ifft(MAXSIN>。
figure('numbertitle','off','name',’用最大正弦分量重构信号’>。
subplot(2,1,1>
plot(maxsin>。
title('重构的信号'>。
subplot(2,1,2>。
plot(yr1024>。
title('原始信号'>。
%试听
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>。
figure('numbertitle','off','name',['Frame',num2str(i>]>。
plot(linspace(-pi,pi,1024>,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>。
%播放<或者使用sound2.录制好的男生声音文件名为“mysound.wav”,女声声音文件名为“nv.wav”
3.男生声音的分析代码如下:
[y,fs]=wavread('mysound.wav'>
fs%fs=11025
leng=length(y>%leng=22050
%声音的默认声道为左声道
yr=y(:
1>。
%截取前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>
plot(linspace(-pi,pi,2048>,fftshift(abs(YR2048>>>%FFT的幅频特性FFTSHIFT
title('FFT后幅频特性的fftshift'>
%fs=1024
YR1024=fft(yr,1024>。
figure('numbertitle','off','name','1024点FFT'>。
subplot(2,1,1>
plot(linspace(-pi,pi,1024>,abs(YR1024>>%FFT的幅频特性
title('FFT的幅频特性'>
subplot(2,1,2>
plot(linspace(-pi,pi,1024>,fftshift(abs(YR1024>>>%FFT的幅频特性的FFTSHIFT
title('FFT后幅频特性的fftshift'>
图形如下:
1.1024点FFT
2.2048点FFT
%反变换,结果应与原始信号相同
yr1024=100*real(ifft(YR1024>>。
figure('numbertitle','off','name','1024点fft的反变换'>。
subplot(2,1,1>。
plot(yr1024>
title('1024点fft的反变换'>
subplot(2,1,2>。
plot(yr>。
title('原信号'>。
%重构寻找幅度最大的正弦分量
[maxpeak,peaki]=max(abs(YR1024(1:
512>>>。
MAXSIN=zeros(1,1024>。
MAXSIN(peaki>=maxpeak。
MAXSIN(1026-peaki>=maxpeak。
maxsin=100*ifft(MAXSIN>。
figure('numbertitle','off','name',’用最大正弦分量重构信号’>。
subplot(2,1,1>
plot(maxsin>。
title('重构的信号'>。
subplot(2,1,2>。
plot(yr1024>。
title('原始信号'>。
%试听
wavplay(yr1024,fs>。
wavplay(maxsin,fs>。
图形如下:
女生声音分析代码如下:
[y,fs]=wavread('nv.wav'>
fs%22050
leng=length(y>%84480
%声音的默认声道为左声道
yr=y(:
1>。
%截取前1024个点
yr=yr(40000:
41024>。
%求取幅度普并显示,首先是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>
plot(linspace(-pi,pi,2048>,fftshift(abs(YR2048>>>%FFT的幅频特性FFTSHIFT
title('FFT后幅频特性的fftshift'>
%fs=1024
YR1024=fft(yr,1024>。
figure('numbertitle','off','name','1024点FFT'>。
subplot(2,1,1>
plot(linspace(-pi,pi,1024>,abs(YR1024>>%FFT的幅频特性
title('FFT的幅频特性'>
subplot(2,1,2>
plot(linspace(-pi,pi,1024>,fftshift(abs(YR1024>>>%FFT的幅频特性的FFTSHIFT
title('FFT后幅频特性的fftshift'>
图形如下:
1.1024点FFT
2.2048点FFT
%反变换,结果应与原始信号相同
yr1024=100*real(ifft(YR1024>>。
figure('numbertitle','off','name','1024点fft的反变换'>。
subplot(2,1,1>。
plot(yr1024>
title('1024点fft的反变换'>
subplot(2,1,2>。
plot(yr>。
title('原信号'>。
%重构寻找幅度最大的正弦分量
[maxpeak,peaki]=max(abs(YR1024(1:
512>>>。
MAXSIN=zeros(1,1024>。
MAXSIN(peaki>=maxpeak。
MAXSIN(1026-peaki>=maxpeak。
maxsin=100*ifft(MAXSIN>。
figure('numbertitle','off','name',’用最大正弦分量重构信号’>。
subplot(2,1,1>
plot(maxsin>。
title('重构的信号'>。
subplot(2,1,2>。
plot(yr1024>。
title('原始信号'>。
%试听
wavplay(yr1024,fs>。
wavplay(maxsin,fs>。
图形如下:
实验分析:
1.通常女声比男声听上去高,原因是女性的声带比较细。
女声比男声的基频高,基频决定了你听到的声音的高低。
通常男声基频在50HZ到180HZ之间,女声基频在160HZ到380HZ之间。
人耳对声音最敏感的区域是2000-5000HZ。
2.由男声女声频谱图可以看出,女声最大幅值时的频率比男声的高一些,男声的频带宽度比女声的宽一些<由频谱图可以看出)。
不过在图中能够明显看出:
男声的声音音强<幅度)明显比女声的低,所以女声听起来尖一些,而男声低沉一些。
三、实验效果分析<包括仪器设备等使用效果)
1.实验过程中,需要考虑到采集的声音样点是否有声音信号,因为有时候录制声音时是从中间才开始有声音的。
像女生的声音是取<40000:
41024)这之间的点才有“a”的声音。
2.在最后用wavplay<)听声音“a”时,要注意几点:
首先要一个一个听才行,不能wavplay(yr1024,fs>。
wavplay(maxsin,fs>。
两个一起,那样声音叠在一起,无法听清;其次,要在自己的采样频率下Fs才能听到清晰的,如果用默认的11025HZ会失原始声音。
3.运用matlabwavrecord(>函数录制声音时要取好FS,在人能听到的范围内,FS越大声音效果越好,越接近原始声音。
4.在逆变换后的声音信号通常比较小,如果想听到比较大的声音可以增加幅度<即能量)。
5.如果想再最后听到比较长的原始声音,可以在一开始,从离散的声音信号中选取多一些点<如:
10240个点),在恢复时就能听到比较长的“a”。
四、教师评语
指导教师年月日