电子科大20xx信号与系统语音信号分析课程设计报告

设计目标:尝试对语音信号进行时频域分析和处理的基本方法

设计工具:MATLAB

设计原理

通过MATLAB的函数wavread()可以读入一个.wav格式的音频文件,并将该文件保存到指定的数组中。例如下面的语句(更详细的命令介绍可以自己查阅MATLAB的帮助)中,将.wav读入后存放到矩阵y中。

y = wavread('Yourwav.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,并通过播放进行对比。

MATLAB参考命令

绘图命令:plot、stem等

求频谱、频率响应:fft、freqz等

卷积、滤波:conv、deconv、filter等

声音文件读写:wavread、wavwrite、wavplay等

六、设计内容

1、对语音信号进行频域分析,找到语音信号的主要频谱成分所在的带宽,说明为何电话可以对语音信号采用8KHz的采样速率

程序代码:

[x,fsx,bits]=wavread('FriendsCut.wav');

subplot(211);

plot(x);                       

title('时间域特性');

subplot(212);

y=fft(x,fsx);

df=fsx/length(y);                

fx=df*(0:length(y)-1);         

plot(fx,abs(y));                

axis([0 8000 0 500]);

title('频率域特性');

说明:

找到一个音频文件,通过截取其中某一段并进行格式转换,得到wav格式的音频文件(FriendsCut.wav)。对声音信号的频谱图进行分析,使用Matlab绘制该语音信号的频谱图,观察频谱图,读出声音信号的频率范围,由采样定理可知,如果需要重建声音信号,需产生一个周期冲激串,其冲激幅度就是采样得到的样本值,给冲激串加上一个增益即可恢复原声音信号,此为采样定理。

使用Matlab中的快速傅里叶变换(fft),绘制出声音文件的时域波形和频域波形并进行分析,观察可得声音信号的主要频率范围为0~2500Hz,而根据采样定理可知,该声音信号采样频率应不小于5000Hz,故电话使用8000Hz的采样频率可以保证声音在失真较少的条件下进行信号的采样与恢复。

输出结果:

2、分析男声和女声的差别。我们知道男声和女声在频域上是有些差别的,一般大家都会认为女声有更多高频的成分,验证这种差别。同时,提出一种方法,能够对一段音频信号是男声信号、还是女声信号进行自动的判断。

程序代码:

y1=wavread('Man.wav');

Fs=44100;                              

yt1=fft(y1);                            

df=Fs/length(yt1);

Fx=df*(0:length(yt1)-1);               

figure(1)

subplot(221);                  

plot(y1);title('男声时域特性');      

subplot(222);              

plot(Fx,abs(yt1));

axis([0 10000 0 10000]);

title('男声频域特性');

xlabel('频率/Hz');

y2= wavread('Wom.wav');

Fs=44100;                           

yt2=fft(y2);                        

df=Fs/length(yt2);

Fx=df*(0:length(yt2)-1);            

figure(1)

subplot(223);                       

plot(y2);title('女声时域特性');     

subplot(224);               

plot(Fx,abs(yt2));

axis([0 10000 0 5000]);

title('女声频域特性');

xlabel('频率/Hz');

s1=0;

for j1=2700:4000;

    s1=s1+abs(y1(j1));

end

s0=0;

for i1=200:4000;

    s0=s0+abs(y1(i1));

end

p1=s1/s0 

s2=0;

for j=2700:4000;

    s2=s2+abs(y2(j));

end

s=0;

for i=200:4000;

    s=s+abs(y2(i));

end

p2=s2/s

说明:

首先,通过截取一段男女对话的音频并进行格式转化,得到wav格式的男声语音文件(Man.wav)和女声语音文件(Wom.wav)。通过wavread命令和快速傅里叶变换fft命令对语音信号进行相应的处理,并绘制出相应的时间域与频率域特性图。通过观察得到的图形,我们可以看出男声与女声的声音大部分集中于200-4000Hz之间,而男声较女声更多的声音集中在较为低的频率段。所以我们通过计算男声和女声在高频部分(我们选择了2700-4000这一频段)的声音比例,来较为粗略地判断男女声的差异,并通过这样的思路来形成一个简单的男女声判断机制。

输出结果:

男声高频部分所占比例:

p1 =0.2432

女生高频部分所占比例

p2 =0.3763

3、对一段音频信号是男声信号、还是女声信号进行自动的判断。

程序代码:

y1=wavread('Choose your voice.wav');

Fs=44100;                              

yt1=fft(y1);                            

df=Fs/length(yt1);

Fx=df*(0:length(yt1)-1);              

figure(1)

subplot(211);                

plot(y1);title('时域特性');     

subplot(212);              

plot(Fx,abs(yt1));

axis([0 10000 0 10000]);

title('频域特性');

xlabel('频率/Hz');

s1=0;

for j1=2700:4000;

    s1=s1+abs(y1(j1));

end

s0=0;

for i1=200:4000;

    s0=s0+abs(y1(i1));

end

p1=s1/s0 

if(p1>0.3)

    disp('声音为女声')

end

if(p1<0.3)

    disp('声音为男生')

end

说明:

根据第2个设计题目,顺着其思路,我们通过对几组男声女声信号的处理分析,发现在我们所选择的高频带中,女声的高频比例均在0.3之上,而男声则在0.3之下。我们通过这样一个粗略的规律,简单设计一个自动判别男女声的程序。通过该程序可以粗略地判断出一个信号的男女声。我们尝试输入一个语音信号,得到了较为正确的结果

输出结果

声音信号高频比例:

p1 = 0.2432

自动判断男女声信号:

声音为男生

4、wav文件的采样速率为44.1KHz,仍然远远高于我们通常说的语音信号需要的频谱宽度,例如在电话对语音信号的采样中,我们仅仅使用8KHz的采样速率。对读入的音频数据进行不同速率的降采样,使用wavplay()命令播放降采样后的序列,验证是否会对信号的质量产生影响。

程序代码:

[x,fs,bits]=wavread('When You Believe Man.wav');  

fs                               

x1=x(1:2:length(x));               

x2=x(1:5:length(x));                

x3=x(1:10:length(x));               

subplot(411);

wavplay(x,fs);                  

y=fft(x,fs);

df=fs/length(y);

fx=df*(0:length(y)-1);

plot(fx,abs(y));                    

axis([0 8000 0 500]);

title('原声音频谱分析图');

subplot(412);

wavplay(x1,fs/2);                

y1=fft(x1,fs/2);

df=fs/length(y1);

fx=df*(0:length(y1)-1);

plot(fx,abs(y1));               

axis([0 8000 0 500]);

title('采样频率变为1/2频谱分析图');

subplot(413);

wavplay(x2,fs/5);                 

y2=fft(x2,fs/5);

df=fs/length(y2);

fx=df*(0:length(y2)-1);            

plot(fx,abs(y2));              

axis([0 8000 0 500]);

title('采样频率变为1/5频谱分析图');

subplot(414);

wavplay(x3,fs/10);                 

y3=fft(x3,fs/10);

df=fs/length(y3);

fx=df*(0:length(y3)-1);

plot(fx,abs(y3));             

axis([0 8000 0 500]);

title('采样频率变为1/10频谱分析图');

说明:

使用Matlab对声音信号进行降采样,分别把声音信号的采样频率将为原采样频率的1/2,1/5,1/10。

输出结果:

对于不同采样频率,1/2原采样频率恢复之后可以听出声音有细微的变化,但无明显失真。1/5原采样频率,可以听出声音有较为明显的变化,有较明显失真。1/10采样频率恢复之后的声音已与原声音有非常大的差别,失真非常严重。

5、比较不同音阶的频域差别

程序代码:

y1=wavread('Cannon C.wav');

y2=wavread('Cannon D.wav');

Fs=44100;          

yt1=fft(y1);       

yt2=fft(y2);

df1=Fs/length(yt1);

Fx1=df1*(0:length(yt1)-1);

df2=Fs/length(yt2);

Fx2=df2*(0:length(yt2)-1);

df3=Fs/length(yt3);

figure(1)          

plot(Fx1,abs(yt1)); axis([0 8000 0 10000]);

title('卡农C调频谱图');xlabel('频率/Hz');

figure(2)

plot(Fx2,abs(yt2)); axis([0 8000 0 10000]);

title('卡农D调频谱图');xlabel('频率/Hz');

说明:

我们找到了《卡农》一曲的C大调和D大调两种音阶的演奏版本,并进行格式转化,得到了Cannon C.wav与Cannon D.wav两个声音信号文件,按照前几道题目中对时间,频率域的分析方法,进行两种音阶演奏的《卡农》的频域特性

输出结果:

考虑到两个演奏版本的录音条件及自身比特率等因素的影响,以及D大调为C大调升一调所带来的较为细微的音高变化。我们无法得到非常明显的频率特性,但通过图像,我们可以粗略地看出,两个演奏版本的频率特性图像中最大值出现的频率,D大调的演奏版本要稍微高于C大调的演奏版本

6、比较不同乐器音频信号的频域差别

程序代码:

y1=wavread('Cannon Piano.wav');

y2=wavread('Cannon Guitar.wav');

y3=wavread('Cannon Violin.wav');

Fs=44100;          

yt1=fft(y1);         

yt2=fft(y2);

yt3=fft(y3);

df1=Fs/length(yt1);

Fx1=df1*(0:length(yt1)-1);

df2=Fs/length(yt2);

Fx2=df2*(0:length(yt2)-1);

df3=Fs/length(yt3);

Fx3=df3*(0:length(yt3)-1); 

figure(1)          

plot(Fx1,abs(yt1)); axis([0 8000 0 10000]);

title('卡农钢琴频谱图');xlabel('频率/Hz');

figure(2)

plot(Fx2,abs(yt2)); axis([0 8000 0 10000]);

title('卡农吉他频谱图');xlabel('频率/Hz');

figure(3)

plot(Fx3,abs(yt3)); axis([0 8000 0 10000]);

title('卡农小提琴频谱图');xlabel('频率/Hz');

说明:

  我们找到了三个乐器独奏的不同版本的《卡农》。分别为钢琴,吉他和小提琴,通过转换格式得到Cannon Piaono.wav,Cannon Guitar.wav以及Cannon Violin.wav三个声音信号文件。通过前面几个题目中的频率分析方法,得到三种声音信号的频率特性图

输出结果:

我们可以看出,钢琴的声音,音阶跨度较大。而吉他在某一频率段的声音表现非常突出,而小提琴的声音频率变化跨度很小,但在某些音高上,拥有非常好的表现力。

7、 想一种方法对双径模型接收信号z进行处理,还原初始信号y,并通过播放进行对比

程序代码:

y=wavread('Cannon D.wav');

Fs=44.1e+3;

delta_t=1; 

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);

T=floor(length(z)/Fs);

number_t_1=z(1:number_t);

N=[number_t_1];

number_m=number_t_1;

for i=2:T

 number_m=z(((i-1)*number_t+1):(i*number_t))-((number_m)./sqrt(power_ratio)).*sqrt(1-power_ratio);

N=[N;number_m];

end

M=z((T*number_t+1):length(z))-(number_m(1:(length(z)-T*Fs))./sqrt(power_ratio)).*sqrt(1-power_ratio);

N=[N:M];

REAL=N/sqrt(power_ratio);

wavplay(REAL,Fs);

说明:

为了还原原信号,我们首先通过程序合成双径道的信号,其中有20%通过反射而延迟的信号和80%直接接收的信号,延迟的时间为1秒。处理合成信号z 时,先将z的前4.41e+3个点取出,即原信号的前4.41e+3个点,再通过for循环语句来逐一还原原信号。

输出结果:

所听到的恢复之后的声音与原文件声音差异不明显,说明对信号进行了失真较少的处理与恢复。可以说非常成功地还原了原信号。

七、设计中遇到的问题

1、在题目1中,忽略了电话对于人声采样的一般性状况,使用了音乐文件进行相关的设计,发现结果与预想有所偏差,这由于音乐文件的频率可能超过4kHz,而电话的采样频率显然不能满足对应的采样定理。

2、在题目2、3中,开始使用了男女声歌唱的声音文件,但得到的结果却是男声的高频部分比例比女声大,之后发现问题可能在于歌曲声音信号中参杂了其他乐器的伴奏等等,也包括了歌曲本身音高不同的影响,造成了结果的偏差。之后使用男女声说话声音信号则得到预想中的结果,其次在如何选择高频段来判断男女声信号上,我们在设计结束之后也没想到一个简单,准确的判断方法,只能通过多测几组男女声声音的频率特性来大致估计出一个高频区域和判断男女声的高频信号比。

3、题目5中,对于不同音阶的频率特性,我们只能通过已找到的声音信号文件进行处理分析,我们本希望通过两个音阶跨度较大,相同乐器演奏的相同曲调来进行较为严密的分析,最后也没有找到一组理想的声音信号来进行相应的分析比较。只能通过C与D两个音阶跨度很小的信号来进行粗略地分析。

4、题目7中,相应负责的同学确实不是很容易理解题目的要求,对于给出的程序也不是非常会使用,在这道题目上,我们确实参考的他人的资料较多,与其他各组进行了讨论和交流,也在网上寻找了相应的指导,不过,希望这样的过程可以加深我们对于这样一种双径信号的理解与认识。

八、成员分工:

小组成员分别主要负责完成一个设计题目,之后进行相互交流,互相指导,完成报告,故小组成员之间的报告内容可能有所雷同,但相应题目均由各组员分工完成。

题目1:卢思变

题目2、3:王苓达

题目4:王蓉

题目5:徐坤园

题目6:时旸

题目7:李思阳

九、参考资料:

《信号与系统》 Oppenheim 刘树棠(译)

《信号与系统》计算机练习-利用MatLab 刘树棠

《数学实验讲义》电子科技大学内部资料

以及相关网络指导与资源

十、设计总结

在此次设计过程中,通过对信号与系统相关知识的运用结合计算机软件MatLab的使用,较为完整地完成了相关设计要求和一些简单地扩展(如自动男女声分辨及不同音阶,不同乐器的频域分析),小组共6名成员,分工合作,各自认真地完成设计题目,遇到问题互相讨论交流,在短暂的设计过程中,形成了很好的学习氛围。在与他组交流以及查阅资料的过程中也及时发现了自己的不足,改正了许多知识点细节上理解的错误。在不断完善自己知识地同时,尽力完成各自的设计题目。

十一、心得及体会:

  在相关设计题目的学习以及完成过程中,加深了对于信号与系统这门课程的理解,更加深刻的体会到傅里叶变换对于信号时域与频域分析的作用,以及信号采样和采样定理的运用方式。在具体操作计算机软件MatLab过程中,熟悉了其操作也更加深刻理解并熟练运用诸如fft,disp,subplot,wavread等等命令,了解到MatLab起强大的功能和面向应用的快捷方便的操作。同时在设计过程中也发现了自身的一些不足,希望在今后的知识学习中更加多地理解其应用的价值与方式,能够明白一些理论或数理工具的实际应用性。也希望在今后的学习中多多培养自己的诸如MatLab等计算机软件的运用技术与熟练度。

相关推荐