赞
踩
首先说一下,百度文档上也是可以搜索到我们学校学长学姐写的实验报告。本人也参考借鉴了一下,在此列出:
实验报告大概内容:
一、 实验目的、要求
(1)掌握语音信号采集的方法
(2)掌握一种语音信号基音周期提取方法
(3)掌握短时过零率计算方法
(4)了解Matlab的编程方法
二、 实验原理
基本概念:
(a)短时过零率:
短时内,信号跨越横轴的情况,对于连续信号,观察语音时域波形通过横轴的情况;对于离散信号,相邻的采样值具有不同的代数符号,也就是样点改变符号的次数。
对于语音信号,是宽带非平稳信号,应考察其短时平均过零率。
短时平均过零的作用
1.区分清/浊音:
浊音平均过零率低,集中在低频端;
清音平均过零率高,集中在高频端。
2.从背景噪声中找出是否有语音,以及语音的起点。
(b)基音周期
基音是发浊音时声带震动所引起的周期性,而基音周期是指声带震动频率的倒数。基音周期是语音信号的重要的参数之一,它描述语音激励源的一个重要特征,基音周期信息在多个领域有着广泛的应用,如语音识别、说话人识别、语音分析与综合以及低码率语音编码,发音系统疾病诊断、听觉残障者的语音指导等。因为汉语是一种有调语言,基音的变化模式称为声调,它携带着非常重要的具有辨意作用的信息,有区别意义的功能,所以,基音的提取和估计对汉语更是一个十分重要的问题。
由于人的声道的易变性及其声道持征的因人而异,而基音周期的范围又很宽,而同—个人在不同情态下发音的基音周期也不同,加之基音周期还受到单词发音音调的影响,因而基音周期的精确检测实际上是一件比较困难的事情。基音提取的主要困难反映在:①声门激励信号并不是一个完全周期的序列,在语音的头、尾部并不具有声带振动那样的周期性,有些清音和浊音的过渡帧是很难准确地判断是周期性还是非周期性的。②声道共振峰有时会严重影响激励信号的谐波结构,所以,从语音信号中直接取出仅和声带振动有关的激励信号的信息并不容
易。③语音信号本身是准周期性的(即音调是有变化的),而且其波形的峰值点或过零点受共振峰的结构、噪声等的影响。④基音周期变化范围大,从老年男性的50Hz到儿童和女性的450Hz,接近三个倍频程,给基音检测带来了一定的困难。由于这些困难,所以迄今为止尚未找到一个完善的方法可以对于各类人群(包括男、女、儿童及不向语种)、各类应用领域和各种环境条件情况下都能获得满意的检测结果。
尽管基音检测有许多困难,但因为它的重要性,基音的检测提取一直是一个研究的课题,为此提出了各种各样的基音检测算法,如自相关函数(ACF)法、峰值提取算法(PPA)、平均幅度差函数(AMDF)法、并行处理技术、倒谱法、SIFT、谱图法、小波法等等。
三、 实验步骤(代码要有详细的注释)
(1)利用给出的清音和浊音语音信号进行短时能量仿真。
(2)利用给出的清音和浊音语音信号计算短时过零率。
(3)利用给出的清音和浊音语音信号,采用短时相关函数计算语音信号浊音基音周期。
下面进入正题:
四、实验结果及分析
1、利用给出的清音和浊音语音信号进行短时能量仿真。
(1)浊音:
程序源码:
- clear all
- [signal,fs] = audioread('D:\01.wav');%读取语音信号
- framelength = 200;%设置帧长
- framenumber = fix(length(signal)/framelength);%读取语音文件对应的帧数
- for i = 1:framenumber;%分帧处理
- framesignal = signal((i-1)*framelength+1:i*framelength);%获取每帧的数据
- E(i) = 0;%每帧能量置零
- for j = 1:framelength;%计算每一帧的能量
- E(i) = E(i)+framesignal(j)^2;
- end
- end
-
- subplot(2,1,1)
- plot(E);
- xlabel('帧数');
- ylabel('短时能量');
- title('短时能量图');
- legend('N = 200')%曲线标识
-
- subplot(2,1,2)
- plot(signal);
- xlabel('频率');
- ylabel('幅度');
- title('原始信号波形图');
- hold on
运行结果:
(2)清音:
程序源码:
- clear all
- [signal,fs] = audioread('D:\02.wav');%读取语音信号
- framelength = 200;%设置帧长
- framenumber = fix(length(signal)/framelength);%读取语音文件对应的帧数
- for i = 1:framenumber;%分帧处理
- framesignal = signal((i-1)*framelength+1:i*framelength);%获取每帧的数据
- E(i) = 0;%每帧能量置零
- for j = 1:framelength;%计算每一帧的能量
- E(i) = E(i)+framesignal(j)^2;
- end
- end
-
- subplot(2,1,1)
- plot(E);
- xlabel('帧数');
- ylabel('短时能量');
- title('短时能量图');
- legend('N = 200')%曲线标识
-
- subplot(2,1,2)
- plot(signal);
- xlabel('频率');
- ylabel('幅度');
- title('原始信号波形图');
- hold on
运行结果:
实验结论:浊音具有周期性,清音具有非周期性。
2、利用给出的清音和浊音语音信号计算短时过零率。
程序源码:
- sp1=audioread('D:\01.wav');
- sp=audioread('D:\02.wav');
- L=mean(sp);sp=sp-L;
- L2=mean(sp1);
- sp1=sp1-L2;
- %以下程序计算短时过零率
- m1=0;m2=0;
- for i=1:500
- if sp1(i)>0
- spp1(i)=1;
- else
- spp1(i)=-1;
- end
- end
- for i=1:500
- if sp(i)>0
- spp(i)=1;
- else
- spp(i)=-1;
- end
- end
- for i=2:500
- m1=m1+0.5*abs(spp1(i)-spp1(i-1));
- m2=m2+0.5*abs(spp(i)-spp(i-1)); % m2 >> m1
- end
- m1
- m2
- plot(sp1(1:500),'r');
- xlabel('采样点');
- ylabel('幅度');
- title('短时过零图');
- hold on
- plot(sp(1:500));
运行结果:
m1 = 67
m2 = 123
结论:蓝色为浊音,红色为清音。清音能量大,浊音能量小。
浊音平均过零率低,集中在低频端;
清音平均过零率高,集中在高频端。
3、利用给出的清音和浊音语音信号,采用短时相关函数计算语音信号浊音基音周期。
程序源码:
- R=zeros(1,600);
- [z,fs] =audioread('D:\01.wav');
- fs
- for i=1:600
- for j=1:601-1-i
- R(i)=R(i)+z(j)*z(j+i);
- end
- end
- figure(1);
- subplot(2,1,1)
- plot(R/14)
- xlabel('采样点');
- ylabel('幅度');
- title('浊音短时相关函数图')
- hold on
- subplot(2,1,2)
- plot(z(1:600))
- xlabel('采样点');
- ylabel('幅度');
- title('浊音原始函数图');
- hold on
-
- R=zeros(1,600);
- [z,fs] =audioread('D:\02.wav');
- fs
- for i=1:600
- for j=1:601-1-i
- R(i)=R(i)+z(j)*z(j+i);
- end
- end
- figure(2);
- subplot(2,1,1)
- plot(R/14)
- xlabel('采样点');
- ylabel('幅度');
- title('清音短时相关函数图')
- hold on
- subplot(2,1,2)
- plot(z(1:600))
- xlabel('采样点');
- ylabel('幅度');
- title('清音原始函数图');
- hold on
运行结果:
结论:
①浊音的自相关函数具有一定的周期性。基音周期为:(1/8000)* 50 = 0.00625
②清音的自相关函数不具有周期性,类似噪声。
五、思考题
1.通过实验数据说明浊音和清音的平均能量及短时平均过零数有什么不同?
(1)平均能量:是基于语音信号幅度随时间变化。
清音段幅度小,其能量集中于高频段。
浊音段幅度大,其能量集中于低频段。
(2)短时平均过零数:
浊音平均过零率低,集中在低频端;
清音平均过零率高,集中在高频端。
2.由仿真波形说明浊音和清音的自相关函数有什么不同?
短时自相关函数:
浊音语音的自相关函数具有一定的周期性。
清音语音的自相关函数不具有周期性,类似噪声。
六、心得体会
经过本次实验,掌握了语音信号采集的方法、语音信号基音周期提取方法、短时过零率计算方法以及了解 Matlab的编程方法。
经过实际的动手操作,我又一次重新认识到了语音信号处理的魅力。我重新巩固了一遍Matlab的使用方法和使用技巧,同时进一步加深了对语音信号的了解和熟练对Matlab 的使用,让我对语音信号处理这门课有了更加浓厚的兴趣。因为以前都是基于课本上所学的理论知识,然而通过这次实验之后才能真正理解其意义。
另外附上本实验中所使用的浊音和清音音频。(wav格式,matlab可以直接处理。01.wav是浊音,02.wav是清音)
链接:https://pan.baidu.com/s/1RGS6YzvsC1wTuqc5vSnrIA
提取码:1111
复制这段内容后打开百度网盘手机App,操作更方便哦
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。