语音信号分析课程设计电子科技大学.docx
- 文档编号:6667679
- 上传时间:2023-01-08
- 格式:DOCX
- 页数:15
- 大小:215.28KB
语音信号分析课程设计电子科技大学.docx
《语音信号分析课程设计电子科技大学.docx》由会员分享,可在线阅读,更多相关《语音信号分析课程设计电子科技大学.docx(15页珍藏版)》请在冰豆网上搜索。
语音信号分析课程设计电子科技大学
《信号与系统》课程设计——语音信号的分析和处
【设计目标】尝试对语音信号进行时频域分析和处理的基本方法
【设计工具】MATLAB
【设计原理】
通过MATLAB的函数wavread()可以读入一个.wav格式的音频文件,并将该文件保存到指定的数组中。
例如下面的语句(更详细的命令介绍可以自己查阅MATLAB的帮助)中,将.wav读入后存放到矩阵y中。
y=wavread('SpecialEnglish.wav');
对于单声道的音频文件,y只有一行,即一个向量;对于双声道的音频文件,y有两行,分别对应了两个声道的向量。
我们这里仅对一个声道的音频进行分析和处理即可。
注意:
.wav文件的采样频率为44.1KHz,采样后的量化精度是16位,不过我们不用关心其量化精度,因为在MATLAB读入后,已将其转换成double型的浮点数表示。
在获得了对应音频文件的数组后,我们可以对其进行一些基本的分析和处理。
可以包括:
1、对语音信号进行频域分析,找到语音信号的主要频谱成分所在的带宽,验证为何电话可以对语音信号采用8KHz的采样速率。
2、分析男声和女声的差别。
我们知道男声和女声在频域上是有些差别的,一般大家都会认为女声有更多高频的成分,验证这种差别。
同时,提出一种方法,能够对一段音频信号是男声信号、还是女声信号进行自动的判断。
3、.wav文件的采样速率为44.1KHz,仍然远远高于我们通常说的语音信号需要的频谱宽度,例如在电话对语音信号的采样中,我们仅仅使用8KHz的采样速率。
对读入的音频数据进行不同速率的降采样,使用wavplay()命令播放降采样后的序列,验证是否会对信号的质量产生影响。
降采样的方法很简单,例如命令y=wavread('SpecialEnglish.wav');将语音文件读入后保存在向量y中,这时对应的采样频率为44.1KHz。
使用y1=y(1:
2:
length(y))命令,就可以将原序列y每隔1个采样后放入序列y1中,这时y1序列对应的采样频率即为22KHz。
4、比较不同音阶的频域差别,同时比较不同乐器音频信号的频域差别。
5、双径模型是无线通信中最简单的一种模型。
发送方天线发出的信号,除了可以直接抵达接收天线,还可能通过建筑物等反射到达接收天线,这时接收到的信号就变成了两路信号的叠加,如图示意,两路信号显然会出现时间差。
以下是语音信号经过双径信道模型的MATLAB代码,接收信号为z。
y=wavread('Q2.wav');Fs=44.1e+3;wavplay(y,Fs);
delta_t=1;%unit:
s
number_t=round(delta_t*Fs);%对应了需要延迟多少个采样点
power_ratio=0.8;%对应快通道的功率比值
z=sqrt(power_ratio)*y+sqrt(1-power_ratio)*[zeros(number_t,1);y(1:
length(y)-number_t)];%接收到的信号
wavplay(z,Fs);
想一种方法对接收信号z进行处理,还原初始信号y,并通过播放进行对比。
以下对提供的语音信号进行说明:
SpecialEnglish.mp3:
原始的语音信号,.mp3格式
Q2.wav:
男声信号
分析及结论:
(1),
要验证为何电话可以对语音信号采用8KHz的采样速率,可以推测傅里叶分析得到频谱图主要频谱分布应该在4KHz以内。
用wavread函数读入语音信号,用fft函数进行频域分析。
代码如下
y=wavread('C:
\Users\Administrator\Desktop\Q2.wav');%读入信号
Fs=44100;%采样频率
L=length(y);
NFFT=2^nextpow2(L);
Y=1/L*fft(y,NFFT);%傅里叶变换
f=Fs/2*linspace(0,1,NFFT/2+1);
plot(f,2*pi*abs(Y(1:
NFFT/2+1)))
title('Single-SidedAmplitudeSpectrumofy')
xlabel('Frequency(Hz)')
ylabel('|Y(f)|')
分析结果如图:
对另一信号用相同方法分析得到
结论:
由图可知,语音信号主要频谱成分所在的带宽在[0,4KHz],因此用8KHz的采样频率采样完全能够采集到所需的信号,故电话可以用8KHz的频率采样。
(2),
分析:
一般认为女生声音会有更多的高频成分而男生声音会有较多的低频成分,可分析男生女生信号观察其频谱图;对于判断男女生声音,搜索资料发现男声声音大至在60—550Hz,女声声音大至在150—1200Hz。
男女生频谱差别:
观察知男女声音信号在幅度值相对较高的频率值上男生的频率较低女声频率较高,多次分析验证知此结果较正确,可以利用这一点粗略判断,即实现一般情况下男女声的自动判断。
找到幅度最大点的频率值,将界限值设定在150Hz,编写程序实现自动判断。
MATLAB代码:
y=wavread('C:
\Users\Administrator\Desktop\Q2.wav');
L=length(y);
Y=1/L*fft(y,L);
Fs=44100;
f1=Fs*linspace(0,1,L/2+1);
plot(f1,2*pi*abs(Y(1:
L/2+1)));
[a,b]=max(2*pi*abs(Y))
f=b/L*Fs
iff<150
title('判断结果:
男生声音f')
else
title('判断结果:
女生声音f')
end
xlabel('Frequency(Hz)')
ylabel('|Y(f)|')
结果:
经验证,此方法正确率较高,实现了男女声音的自动正确判断。
(3)分析:
因为wavread函数默认读入的信号默认采样频率为44100Hz,若要得到频率较低的信号可对信号进行降采样,利用此命令y1=y(1:
2:
length(y))可将采样信号变为原来的二分之一。
故对信号进行不同倍率的降采样听音分析差别并画出频谱图。
代码如下:
y=wavread('C:
\Users\Administrator\Desktop\Q2.wav');
x=[15.568];
fori=1:
4
y1=y(1:
x(1,i):
length(y));
fs=44100/x(1,i)
wavplay(y1,fs);
L=length(y1);
NFFT=2^nextpow2(L);
Y=1/L*fft(y1,NFFT);
f=Fs/2*linspace(0,1,NFFT/2+1);
figure(i);plot(f,2*abs(Y(1:
NFFT/2+1)))
title(['采样频率Fs=',num2str(fs),'Hz']);
end
频谱图:
结论:
由图可知信号经过8KHz采样后已有信号损失,在采样频率小于8KHz信号亦有损失;听不同频率的声音频率为8KHz左右的信号声音和原声音无明显差别,当信号为6KHz或是5KHz时声音已有明显鼻音,失真较明显。
(4)分析
上网下载各音阶资料,得到各音阶音频,同时利用前述基础傅里叶分析方法得到各音阶频谱图。
实验结果:
可以得到8个音阶的频谱图如下:
实验结论:
fmax指该音阶中的最大频率。
可以看出随着音阶升高,频率也在增大,且do高的频率大约为do慢频率的一倍。
同时因为各种因素影响可能导致结果和理论值有差异。
(5),分析:
语音信号经过双径信道模型处理后,可以明显分辨出具有回音。
如题目所述:
想一种方法对接收信号z进行处理,还原初始信号y,并通过播放进行对比。
因为题目只给音频信号z,又知道回声信号是经过双径信道处理后的所以可以设信号:
z[n]=x[n]+αx[n-n0];其中n0是信号延迟时间所对应的采样频率点,α是延迟信号与原信号的比值。
利用MATLAB的filter函数可以对此差分方程:
x[n]+αx[n-n0]=z[n]求解,其中z[n]是已知的;但还需知道两个参数即:
α,n0。
可用自相关函数求出这两个参数。
具体过程及MATLAB代码如下:
1,产生回声信号,并播放与原声信号对比
y=wavread('Q2.wav');Fs=44.1e+3;wavplay(y,Fs);
delta_t=1;%unit:
s,对应延长时间
number_t=round(delta_t*Fs);
power_ratio=0.8;
z=sqrt(power_ratio)*y+sqrt(1-power_ratio)*[zeros(number_t,1);y(1:
length(y)-number_t)];
wavplay(z,Fs);
2,利用自相关函数求出延长时间t,及系数α
h=xcorr(z);%自相关函数
figure
(2);plot(z);
title('回声信号');
c=length(z)
x=[1:
1:
c];
figure
(1);plot(x,abs(h(1:
c)));title('自相关函数');
从自相关函数途中可明显看出两个极大值,因此可利用两极值点的距离来求出延迟时间。
h1=h(1:
500000);
h2=h(500000:
c);
figure(3);plot(abs(h1));title('极值点1');
figure(4);plot([500000:
1:
c],abs(h2));title('极值点2');
[e,f]=max(h1);
[q,p]=max(h2);
t0=abs(p-f)/Fs;%算得延时时间
α=e/q;%系数
得t0=1,α=0.3894.
3,恢复原始信号,并进行播放对比
n0=Fs*t0;
α=e/q;
a
(1)=1;
a(n0)=α;
b=1;
w1=filter(b,a,z);%恢复的信号
wavplay(w1,Fs);
上图是恢复的信号与原始信号频谱图,观察可知并无明显差别。
播放w1经过听音对比后已和回声信号z有较大差别,并且回声已不明显。
但经检验对比知原设定延长时间与计算结果一致.
原系数α0=sqrt(1-power_ratio)/sqrt(power_ratio)=0.500与算得结果有差异。
若将α0带入会有更好结果,希望可以找到一种更好的方法。
【实验总结及心得体会】:
通过这次课程设计,使我对《信号与系统》这门课程有了更深入的了解。
特别是通过MATLAB对信号进行频谱分析,了解了很多有关MATLAB函数的知识,比如fft,filter,wavread,wavplay。
课程设计开始时感觉是比较难的比如上述函数从没遇到过,对一些基本M文件不熟悉其用法,不熟悉其参数含义。
经查询资料才可慢慢看懂并应用,在同学们的共同努力下,在老师的指导下我们还是很快做完了这次的课程设计,并从中获益良多。
这次课程设计的题目非常有趣,对于人们的声音信号我们已经非常熟悉,但利用这门课程深入分析声音信号的本质我们却很陌生,因此我本人很喜欢这个题目。
度过一开始的两眼一抹黑阶段我们对这些题目也是越来越游刃有余,其中判断男女声信号最是有趣而消除回声信号最是麻烦,而且其中的系数α和原来的理论值也有一些差异,导致恢复后的信号不能令人非常满意。
通过对不同音阶不同乐器发出的声音进行频谱分析,了解了他们的主要发声频段及他们之间的不同,明白了不同乐器的搭配才能奏出不同频率混叠的好听音乐。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 语音 信号 分析 课程设计 电子科技大学