云文档网 - 专业文章范例文档资料分享平台

用Matlab编程实现语音信号的短时分析

来源:网络收集 时间:2024-05-04 下载这篇文档 手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:xuecool-com或QQ:370150219 处理(尽可能给您提供完整文档),感谢您的支持与谅解。点击这里给我发消息

用Matlab编程实现语音信号的短时分析课程设计

目录

一、目的 ............................................................... 2 二、原理及方法 .................................................... 2 三、实验步骤 ........................................................ 2 四、实验结论与分析.............................................. 3 五、心得体会 ........................................................ 4 六、附录 ............................................................... 4

1 / 8

用Matlab编程实现语音信号的短时分析课程设计

用Matlab编程实现语音信号的短时分析

一、目的

1.在理论学习的基础上,进一步地理解和掌握语音信号短时分析的意义,短时时域分析的基 本方法。

2.进一步理解和掌握语音信号短时平均能量函数及短时平均过零数的计算方法和重要意义。

二、原理及方法

一定时宽的语音信号,其能量的大小随时间有明显的变化。其中清音段(以清音为

主要成份的语音段),其能量比浊音段小得多。短时过零数也可用于语音信号分析中,发浊音时,其语音能量约集中于3kHz以下,而发清音时,多数能量出现在较高频率上,可认为浊音时具有较低的平均过零数,而清音时具有较高的平均过零数,因而,对一短时语音段计算其短时平均能量及短时平均过零数,就可以较好地区分其中的清音段和浊音段,从而可判别句中清、浊音转变时刻,声母韵母的分界以及无声与有声的分界。这在语音识别中有重要意义。

三、实验步骤

(1)从网上找了一段录音,采样率为8KHZ,量化精度为16比特线性码。

(2)利用设计方案中给定的公式分别编程计算这段语音信号的短时能量、短时平均幅度、短时过零率,然后分别画出它们的曲线; (3)然后画出短时零能比曲线。

(4)根据上述结果判断找出其中的一帧浊音信号和一帧清音信号。判断依据是,

浊音:短时能量大、短时平均幅度大、短时过零率低;清音:短时能量小、短时平均幅度小、短时过零率高。浊音,取13270--13510个点,清音,取12120--12360个点。分别计算他们的短时自相关函数和平均幅度差函数;

2 / 8

用Matlab编程实现语音信号的短时分析课程设计

(5)根据图形,分析浊音段语音的基音周期。

四、实验结论与分析

(1)从图中明显可以看出,浊音信号的具有明显的周期性,其自相关函数和平均幅度差函数也表现出周期性。清音信号稍微差一点,但不是很明显,主要是由于清音信号的位置找的不是很好。

(2)浊音:短时能量大、短时平均幅度大、短时过零率低;清音:短时能量小、短时平均幅度小、短时过零率高。

(3)基音提取-消除共振峰的影响。从画出的图形中间可以看出,没有加滤波器的声音信号处理后共振峰的影响很大。但是加一个60~500Hz的带通滤波器,利用滤波后的信号进行基因估计,这样可除去大部分共振峰的影响,自相关函数和短时平均幅度差函数具有更尖锐地峰值,有利于判决地准确性。 (4)画出的波形如下所示:

图1为没有加窗nowindow.wav,,无滤波,图2为加窗后的语音信号为 havewindow.wav,有滤波。

图1没有滤波的第一列的图形从上到下分别表示:短时能量、短时平均幅度、短时过零 率和零能比曲线,第二列从上到下分别为浊音的短时自相关函数、短时平均幅度差函数和轻清音的短时自相关函数、短时平均幅度差函数。

图1

3 / 8

用Matlab编程实现语音信号的短时分析课程设计

图2

五、心得体会

在本次的课程设计中,通过自己查找资料,修改程序,最后得出了基音频率。这种以实验方式学习的过程,加深了我对语音信号理论知识的理解,在设计中,也使我获得了很多新的知识,熟练对matlab的使用,对MATLAB的应用也更加熟练了。总的说来,这个实验在周老师的指导下完成,感谢周老师在这个课程教会了我们很多关于语音处理的知识。

六、附录

源程序:

% 没有加窗nowindow.wav

N=240

Y=WAVREAD('nowindow',[1 18000]); L=length(Y)0秒,每秒8000个点,一共240000个点

LL=length(Y)/N %一共 1000帧 figure(1)

set(1,'Position',[10,35,350,650])

%短时能量

Em=zeros(1,(LL-1)*240); for ii=1:(LL-1)*240, temp=Y(ii:ii+240);

4 / 8

Em(ii)=sum(temp.*temp); end

subplot(4,1,1)

jj=[1:(LL-1)*240]; plot(jj, Em,'b'); grid

% axis([12000,16000,0.15,0.4])

%短时平均幅度Mn=sum(abs(Y))/N Mn=zeros(1,(LL-1)*240); for ii=1:(LL-1)*240, temp=Y(ii:ii+240);

Mn(ii)=sum(abs(temp))/N; end

figure(1)

用Matlab编程实现语音信号的短时分析课程设计

subplot(4,1,2)

jj=[1:(LL-1)*240]; plot(jj, Mn,'b'); grid

% axis([12000,16000,0.02,0.04])

%短时过零率 Zn=zeros(1,(LL-1)*240); for ii=2:(LL-1)*240,

temp1=sign(Y(ii:ii+240)); temp=sign(Y(ii-1:ii+240-1)); Zn(ii)=sum(abs(temp1-temp)); end

figure(1)

subplot(4,1,3)

jj=[1:(LL-1)*240]; plot(jj, Zn,'b'); grid

% axis([12000,16000,0,20])

%零能比曲线

figure(1)

subplot(4,1,4)

jj=[1:(LL-1)*240]; plot(jj, Zn./Em,'b');

grid

% axis([12000,16000,0,100]) %

% Wn=[60/8000 ,500/8000] % n=[1:240];

% B = FIR1(239,Wn,'bandpass');

%%%%%%浊音,取13270--13510个点 %短时自相关函数 temp=Y(13271:13510); %

% wc1 = 0.0075; wc2 = 0.9625; % wn = [wc1/pi,wc2/pi];

% h = fir1(239,wn,blackman(240)); % h=reshape(h,240,1); % temp= temp.*abs(h); %

%% %temp2=reshape(temp,1,240); %temp=temp2.*B; Rn1=zeros(1,240); for nn=[1:240],

for ii=[1:240-nn], Rn1(nn) =Rn1(nn)+

temp(ii)*temp(nn+ii); end end

figure(2)

set(2,'Position',[400,35,350,650]) subplot(4,1,1) jj=[1:240];

plot(jj, Rn1,'b'); grid

%axis([9,50,-0.01,0.02])

%短时平均幅度差函数 Yn1=zeros(1,240); for nn=[1:240],

for ii=[1:240-nn],

Yn1(nn)

=Yn1(nn)+ abs(temp(ii)-temp(nn+ii)); end end

figure(2)

subplot(4,1,2) jj=[1:240];

plot(jj, Yn1,'b'); grid

%%%%%%清音,取12120--12360个点 %短时自相关函数 temp=Y(12121:12360);

%% %temp2=reshape(temp,1,240); %temp=temp2.*B; Rn2=zeros(1,240);

5 / 8

用Matlab编程实现语音信号的短时分析课程设计

for nn=[1:240], for ii=[1:240-nn],

Rn2(nn) temp(ii)*temp(nn+ii); end end

figure(2) subplot(4,1,3) jj=[1:240]; plot(jj, Rn2,'b'); grid

%axis([9,50,-0.01,0.02])

%短时平均幅度差函数 Yn2=zeros(1,240); for nn=[1:240], for ii=[1:240-nn],

Yn2(nn)

abs(temp(ii)-temp(nn+ii)); end end figure(2) subplot(4,1,4) jj=[1:240];

plot(jj, Yn2,'b'); grid

%%加窗后的语音信号为 havewindow.wav N=240

Y=WAVREAD('havewindow',[1 18000]); L=length(Y)0秒,每秒8000个点,一共240000个点

LL=length(Y)/N %一共 1000帧 figure(1)

set(1,'Position',[10,35,350,650])

6 / 8

%短时能量

Em=zeros(1,(LL-1)*240); for ii=1:(LL-1)*240, temp=Y(ii:ii+240);

Em(ii)=sum(temp.*temp); end

subplot(4,1,1)

jj=[1:(LL-1)*240]; plot(jj, Em,'b'); grid

% axis([0,(LL-1)*240,0,0.6]) % axis([12000,16000,0,0.06])

%短时平均幅度Mn=sum(abs(Y))/N Mn=zeros(1,(LL-1)*240); for ii=1:(LL-1)*240,

temp=Y(ii:ii+240);

Mn(ii)=sum(abs(temp))/N; end figure(1) subplot(4,1,2)

=Yn2(nn)+

jj=[1:(LL-1)*240]; plot(jj, Mn,'b'); grid

% axis([12000,16000,0,0.015])

%短时过零率

Zn=zeros(1,(LL-1)*240); for ii=2:(LL-1)*240,

temp1=sign(Y(ii:ii+240)); temp=sign(Y(ii-1:ii+240-1)); Zn(ii)=sum(abs(temp1-temp)); end

figure(1)

subplot(4,1,3)

jj=[1:(LL-1)*240]; plot(jj, Zn,'b');

grid

% axis([12000,16000,0,60])

%零能比曲线

figure(1)

subplot(4,1,4)

jj=[1:(LL-1)*240];

=Rn2(nn)+

用Matlab编程实现语音信号的短时分析课程设计

plot(jj, Zn./Em,'b');

grid

%axis([12000,16000,0,3*10^7]) %

% Wn=[60/8000 ,500/8000] % n=[1:240];

% B = FIR1(239,Wn,'bandpass');

jj=[1:240];

plot(jj, Yn1,'b'); grid

%%%%%%清音,取12120--12360个点 %短时自相关函数

temp=Y(12121:12360);

%% %temp2=reshape(temp,1,240); %%%%%%浊音,取13270--13510个点 %temp=temp2.*B; %短时自相关函数 Rn2=zeros(1,240); temp=Y(13271:13510);

for nn=[1:240], %% %temp2=reshape(temp,1,240); for ii=[1:240-nn], %temp=temp2.*B;

Rn1=zeros(1,240); Rn2(nn) for nn=[1:240], temp(ii)*temp(nn+ii); for ii=[1:240-nn], end

end Rn1(nn) =Rn1(nn)+

temp(ii)*temp(nn+ii); end figure(2) end subplot(4,1,3)

jj=[1:240];

plot(jj, Rn2,'b'); figure(2)

grid

set(2,'Position',[400,35,350,650]) %axis([9,50,-0.01,0.02]) subplot(4,1,1)

jj=[1:240];

%短时平均幅度差函数 plot(jj, Rn1,'b'); Yn2=zeros(1,240); grid

for nn=[1:240], %axis([9,50,-0.01,0.02]) for ii=[1:240-nn],

%短时平均幅度差函数 Yn2(nn)

Yn1=zeros(1,240); abs(temp(ii)-temp(nn+ii)); for nn=[1:240],

end for ii=[1:240-nn], end

Yn1(nn)

=Yn1(nn)+

figure(2)

abs(temp(ii)-temp(nn+ii)); subplot(4,1,4) end jj=[1:240]; end

plot(jj, Yn2,'b'); grid figure(2)

subplot(4,1,2)

7 / 8

=Rn2(nn)+

=Yn2(nn)+ 用Matlab编程实现语音信号的短时分析课程设计

8 / 8

百度搜索“yundocx”或“云文档网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,云文档网,提供经典综合文库用Matlab编程实现语音信号的短时分析在线全文阅读。

用Matlab编程实现语音信号的短时分析.doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印 下载失败或者文档不完整,请联系客服人员解决!
本文链接:https://www.yundocx.com/wenku/194603.html(转载请注明文章来源)
Copyright © 2018-2022 云文档网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ:370150219 邮箱:370150219@qq.com
苏ICP备19068818号-2
Top
× 游客快捷下载通道(下载后可以自由复制和排版)
单篇付费下载
限时特价:7 元/份 原价:20元
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
VIP包月下载
特价:29 元/月 原价:99元
低至 0.3 元/份 每月下载150
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信:xuecool-com QQ:370150219