语音信号处理实验一报告
语音学习实训报告(3篇)

第1篇一、实训背景随着人工智能技术的飞速发展,语音识别与合成技术逐渐成为人们日常生活和工作中不可或缺的一部分。
为了更好地掌握语音处理技术,提高自身的专业技能,我们开展了为期一个月的语音学习实训。
本次实训旨在通过理论学习和实践操作,使学员对语音处理的基本原理、技术方法及应用场景有深入的了解。
二、实训目标1. 掌握语音信号的基本概念、特性及其处理方法。
2. 熟悉语音识别、语音合成等关键技术。
3. 了解语音处理在智能语音助手、语音识别系统等领域的应用。
4. 培养学员的动手实践能力、团队协作精神和创新意识。
三、实训内容本次实训主要分为三个阶段:理论学习、实践操作和项目实战。
(一)理论学习1. 语音信号的基本概念与特性:介绍了语音信号的时域、频域特性,以及语音信号处理的基本方法。
2. 语音识别技术:讲解了语音识别的基本原理、算法,以及常见的语音识别系统架构。
3. 语音合成技术:介绍了语音合成的原理、方法,以及常见的语音合成系统。
4. 语音处理应用:探讨了语音处理在智能语音助手、语音识别系统等领域的应用。
(二)实践操作1. 语音信号处理软件:使用MATLAB等软件进行语音信号的采集、预处理、特征提取等操作。
2. 语音识别系统搭建:基于开源语音识别框架(如Kaldi、CMU Sphinx等)搭建语音识别系统。
3. 语音合成系统搭建:基于开源语音合成框架(如HTS、Flite等)搭建语音合成系统。
(三)项目实战1. 智能语音助手:开发一个基于语音识别和语音合成的智能语音助手,实现语音交互、信息查询等功能。
2. 语音识别系统:针对特定应用场景(如电话客服、智能家居等)开发语音识别系统。
四、实训成果1. 理论学习方面:学员对语音信号的基本概念、特性及其处理方法有了深入的了解,掌握了语音识别、语音合成等关键技术。
2. 实践操作方面:学员能够熟练使用MATLAB、Kaldi、HTS等软件进行语音信号处理、语音识别和语音合成。
语音信号处理实验报告.docx

在实验中,当P值增加到一定程度,预测平方误差的改善就不很明显了,而且会增加计算量,一般取为8~14,这里P取为10。
5.基音周期估计
①自互相关函数法
②短时平均幅度差法
二.实验过程
1. 系统结构
2.仿真结果
(1)时域分析
男声及女声(蓝色为时域信号,红色为每一帧的能量,绿色为每一帧的过零率)
某一帧的自相关函数
3.频域分析
①一帧信号的倒谱分析和FFT及LPC分析
②男声和女声的倒谱分析
③浊音和清音的倒谱分析
④浊音和清音的FFT分析和LPC分析(红色为FFT图像,绿色为LPC图像)
从男声女声的时域信号对比图中可以看出,女音信号在高频率分布得更多,女声信号在高频段的能量分布更多,并且女声有较高的过零率,这是因为语音信号中的高频段有较高的过零率。
2.频域分析
这里对信号进行快速傅里叶变换(FFT),可以发现,当窗口函数不同,傅里叶变换的结果也不相同。根据信号的时宽带宽之积为一常数这一性质,可以知道窗口宽度与主瓣宽度成反比,N越大,主瓣越窄。汉明窗在频谱范围中的分辨率较高,而且旁瓣的衰减大,具有频谱泄露少的有点,所以在实验中采用的是具有较小上下冲的汉明窗。
三.实验结果分析
1.时域分析
实验中采用的是汉明窗,窗的长度对能否由短时能量反应语音信号的变化起着决定性影响。这里窗长合适,En能够反应语音信号幅度变化。同时,从图像可以看出,En可以作为区分浊音和清音的特征参数。
短时过零率表示一帧语音中语音信号波形穿过横轴(零电平)的次数。从图中可以看出,短时能量和过零率可以近似为互补的情况,短时能量大的地方过零率小,短时能量小的地方过零率较大。从浊音和清音的时域分析可以看出,清音过零率高,浊音过零率低。
语音信号处理实验

实验二 语音信号的时域分析一、 实验目的在理论学习的基础上,进一步理解和掌握语音信号短时能量、短时过零了分析的意义及基于matlab 的实现方法。
二、 实验原理语音是一时变的、非平稳的随机过程,但由于一段时间内(10-30ms)人的声带和声道形状的相对稳定性,可认为其特征是不变的,因而语音的短时谱具有相对稳定性。
在语音分析中可以利用短时谱的这种平稳性,将语音信号分帧。
10~30ms 相对平稳,分析帧长一般为20ms 。
语音信号的分帧是通过可移动的有限长度窗口进行加权的方法来实现的。
几种典型的窗函数有:矩形窗、汉明窗、哈宁窗、布莱克曼窗。
语音信号的能量分析是基于语音信号能量随时间有相当大的变化,特别是清音段的能量一般比浊音段的小得多。
定义短时平均能量[][]∑∑+-=∞-∞=-=-=nN n m m n m n w m x m n w m x E 122)()()()( 下图说明了短时能量序列的计算方法,其中窗口采用的是直角窗。
过零就是信号通过零值。
对于连续语音信号,可以考察其时域波形通过时间轴的情况。
而对于离散时间信号,如果相邻的取样值改变符号则称为过零。
由此可以计算过零数,过零数就是样本改变符号的次数。
单位时间内的过零数称为平均过零数。
语音信号x (n )的短时平均过零数定义为()[]()[]()()[]()[]()n w n x n x m n w m x m x Z m n *--=---=∑∞-∞=1sgn sgn 1sgn sgn 式中,[]∙sgn 是符号函数,即()[]()()()()⎩⎨⎧<-≥=0101sgn n x n x n x短时平均过零数可应用于语音信号分析中。
发浊音时,尽管声道有若干个共振峰,但由于声门波引起了谱的高频跌落,所以其语音能量约集中干3kHz 以下。
而发清音时.多数能量出现在较高频率上。
既然高频率意味着高的平均过零数,低频率意味着低的平均过零数,那么可以认为浊音时具有较低的平均过零数,而清音时具有较高的平均过零数。
语音处理实验报告

实验一 语音信号的端点检测一、实验目的1、掌握短时能量的求解方法2、掌握短时平均过零率的求解方法3、掌握利用短时平均过零率和短时能量等特征,对输入的语音信号进行端点检测。
二、仪器设备实验仪器设备及软件HP 计算机,MATLAB三、实验原理端点检测是语音信号处理过程中非常重要的一步,它的准确性直接影响到语音信号处理的速度和结果。
本次实验利用短时过零率和短时能量相结合的语音端点检测算法利用短时过零率来检测清音,用短时能量来检测浊音,两者相配合便实现了信号信噪比较大情况下的端点检测。
算法对于输入信号的检测过程可分为短时能量检测和短时过零率检测两个部分。
算法以短时能量检测为主,短时过零率检测为辅。
根据语音的统计特性,可以把语音段分为清音、浊音以及静音(包括背景噪声)三种。
在本算法中,短时能量检测可以较好地区分出浊音和静音。
对于清音,由于其能量较小,在短时能量检测中会因为低于能量门限而被误判为静音;短时过零率则可以从语音中区分出静音和清音。
将两种检测结合起来,就可以检测出语音段(清音和浊音)及静音段1、短时能量计算定义n 时刻某语言信号的短时平均能量En 为:∑∑--=+∞∞--=-=nN n m m n w m x m n w m x En )1(22)]()([)]()([式中N 为窗长,可见短时平均能量为一帧样点值的平方和。
特殊地,当窗函数为矩形窗时,有∑--==nN n m m x En )1(2)( 2、短时过零率过零就是指信号通过零值。
过零率就是每秒内信号值通过零值的次数。
对于离散时间序列,过零则是指序列取样值改变符号,过零率则是每个样本的改变符号的次数。
对于语音信号,则是指在一帧语音中语音信号波形穿过横轴(零电平)的次数。
可以用相邻两个取样改变符号的次数来计算。
如果窗的起点是n=0,短时过零率Z 为波形穿过横轴(零电平)的次数|))1(())((|2110∑-=--=N n w w n S Sgn n S Sgn Z {00,1,1)sgn(≥<-=x x x短时过零可以看作信号频率的简单度量浊音的短时平均幅度最大,无声的短时平均幅度最小,清音的短时过零率最大,无声居中,浊音的短时过零率最小。
语音信号处理实验一采集和预处理.doc

实验一 语音信号的采集及预处理一、实验目的在理论学习的基础上,进一步地理解和掌握语音信号预处理及短时加窗的意义及基于matlab 的实现方法。
二、实验原理1. 语音信号的录音、读入、放音等:练习matlab 中几个音频处理函数,利用函数wavread 对语音信号进行采样,记住采样频率和采样点数,给出以下语音的波形图(2.wav )。
利用wavplay 或soundview 放音。
也可以利用wavrecord 自己录制一段语音,并进行以上操作(需要话筒)。
2. 语音信号的分帧:对语音信号进行分帧,可以利用voicebox 工具箱中的函数enframe 。
voicebox 工具箱是基于GNU 协议的自由软件,其中包含了很多语音信号相关的函数。
3. 语音信号的加窗:本步要求利用window 函数设计窗口长度为256(N=256)的矩形窗(rectwin)、汉明窗(hamming)及汉宁窗(hann)),利用wvtool 函数观察其时域波形图及频谱特性,比较得出结论。
观察整个信号加矩形窗及汉明窗后的波形,利用subplot 与reshape 函数将分帧后波形、加矩形窗波形及加汉明窗波形画在一张图上比较。
取出其中一帧,利用subplot 与reshape 函数将一帧语音的波形、加矩形窗波形及加汉明窗波形画在一张图上比较将得出结论。
4. 预加重:即语音信号通过一个一阶高通滤波器19375.01--z 。
三、实验步骤、实验程序、图形及结论1.语音信号的录音、读入、放音等程序:[x,fs,nbit]=wavread('D:\2.wav'); %fs=10000,nbit=16y=soundview('D:\2.wav')2.语音信号的分帧程序:[x,fs,nbit]=wavread('D:\2.wav');len=256;inc=128;y=enframe(x,len,inc);figure;subplot(2,1,1),plot(x)subplot(2,1,2),plot(y)3.语音信号加窗:程序:N=120;w = window('rectangle',N);w1 = window('hamming',N);w2 = window('hanning',N); wvtool(w,w1,w2)4.预加重程序:[x,fs,nbit]=wavread('D:\2.wav'); len=256;inc=128;y=enframe(x,len,inc);z=filter([1-0.9375],1,y)figure(2)subplot(2,1,1),plot(y)subplot(2,1,2),plot(z)四、思考题1.语音信号包括哪些预处理,作用分别是什么?2.不同窗口的优缺点,窗口长度如何选取?答:1. 预处理通常包括:放大与自动增益控制、反混叠滤波、模数变换等内容。
LPC特征提取 语音信号处理实验报告

华南理工大学《语音信号处理》实验报告实验名称:LPC特征提取姓名:***学号:************班级:11级电信2班日期:2014年4 月30日1. 实验内容(1)熟悉短时分析原理、LPC 的原理;(2)学习运用MATLAB 编程进行LPC 的提取;(3)学会利用短时分析原理提取LPC 特征序列。
2. 实验方法LPC 分析基本原理LPC 分析为线性时不变因果稳定系统V (z )建立一个全极点模型,并利用均方误差准则,对已知的语音信号s(n)进行模型参数估计。
如果利用P 个取样值来进行预测,则称为P 阶线性预测。
假设用过去P 个取样值()()(){}1,2,S n S n S n p ---的加权之和来预测信号当前取样值()S n ,则预测信号()S n ∧为:()()1p k k S n a n k ∧==-∑ (1) 其中加权系数用k a 表示,称为预测系数,则预测误差为:()()()()()1p k k e n s n S n s n a n k ∧==-=--∑ (2)要使预测最佳,则要使短时平均预测误差最小有:()2min E e n ε⎡⎤==⎣⎦ (3) ()20,(1)k e n k p a ⎡⎤∂⎣⎦=≤≤∂ (4) 令()()(),,i k E s n i S n k φ=--⎡⎤⎣⎦ (5) 最小的ε可表示成:()()min 10,00,p k k a k εφφ==-∑ (6)显然,误差越接近于零,线性预测的准确度在均方误差最小的意义上为最佳,由此可以计算出预测系数。
通过LPC 分析,由若干帧语音可以得到若干组LPC 参数,每组参数形成一个描绘该帧语音特征的矢量,即LPC特征矢量。
由LPC特征矢量可以进一步得到很多种派生特征矢量,例如线性预测倒谱系数、线谱对特征、部分相关系数、对数面积比等等。
不同的特征矢量具有不同的特点,它们在语音编码和识别领域有着不同的应用价值。
3.实验结果LPC系数:ai =1.0000 -1.3227 0.1655 -0.2090 0.6790 -0.7203 0.5626 -0.1349 0.4458 -0.5782 0.1478通过计算LPC系数可以很好的利用线性预测中声道系统函数的最小相位特性来提取特征函数。
语音信号处理_实验一_报告2
实验一语音信号的频域特性1. 观察语音信号的时域波形特点,总结其规律。
答:1)清音段:能量低,过零率高,波形特点有点像随机的噪声。
这部分信号常与语音的辅音段对应。
2)浊音段:能量高,过零率地,波形具有周期特点。
所谓的短时平稳性质就是处于这个语音浊音段中。
3)过渡段:一般是指从辅音段向元音段信号变化之间的部分。
信号变化快,是语音信号处理中最复杂、困难的部分。
2.总结清音b/p/m/f/d/t/n/l/g/k/h/j/q/x//z/c/s/zh/ch/sh/r/共21个的短时幅值、短时过零率和自相关函数的规律,估算这21个清音的平均短时幅值和平均短时过零率;答:加矩形窗的21个清音的平均短时幅值和平均短时过零率为下表:清音音节平均短时幅值平均短时过零率b 2.126 1.000p 0.706 9.100m 2.427 5.000f 0.685 1.500d 0.817 9.667t 1.168 1.000n 1.150 4.176l 2.084 6.200g 0.150 24.333k 0.959 7.333h 0.629 21.857j 0.129 13.000q 0.184 36.909x 0.168 21.400z 0.173 6.200c 0.785 7.294s 0.158 17.000zh 0.203 31.500ch 0.237 27.535sh 0.182 28.692r 1.814 5.5333. 总结浊音a/o/e/i/u/v/ao/ai/ei/ou/an/en/in/ang/eng/ong/ing/共17个的短时幅值、短时过零率和自相关函数的规律,估算这17个浊音的平均短时幅值和平均短时过零率,从自相关函数上估算这17个浊音的基音周期;答:浊音能量高,短时幅值也比较高,短时过零率比较低,由于浊音有一定的准周期性,所以自相关函数有比较明显的峰值和周期性。
浊音音节平均短时幅值平均短时过零率基音周期a 3.662 0.643 57o 2.948 0.184 71e 2.531 0.148 59i 1.693 0.061 60u 1.300 0.032 61v 1.081 0.024 66ao 2.000 0.123 71ai 2.307 0.121 57ei 1.828 0.074 67ou 0.294 0.000 67an 1.500 0.061 58en 1.827 0.073 54in 2.257 0.118 56ang 0.591 0.009 65eng 1.473 0.053 56ong 1.712 0.059 64ing 0.494 0.014 714. /r/、/m/、/n/ 从这几个音素的自相关函数图形判断为“清音”还是“浊音”,若为浊音估算其基音周期;答:(1)/r/: 自相关函数具有周期性,基音周期为67(样本点数)(2)/m/: 自相关函数具有周期性,基音周期为67(样本点数)(3)/n/ : 自相关函数具有周期性,基音周期为59(样本点数)可以看出/r/、/m/、/n/这几个因素的自相关函数图形有准周期性,并且有比较明显的峰值,所以为浊音。
哈尔滨工程大学语音信号处理实验报告讲述
实验报告实验课程名称:语音信号处理实验姓名:班级: 20120811 学号:Array指导教师张磊实验教室 21B#293实验时间 2015年4月12日实验成绩实验一 语音信号的端点检测一、实验目的1、掌握短时能量的求解方法2、掌握短时平均过零率的求解方法3、掌握利用短时平均过零率和短时能量等特征,对输入的语音信号进行端点检测。
二、实验设备 HP 计算机、Matlab 软件 三、实验原理 1、短时能量语音信号的短时能量分析给出了反应这些幅度变化的一个合适的描述方法。
对于信号)}({n x ,短时能量的定义如下:∑∑∞-∞=∞-∞=*=-=-=m m n n h n x m n h m xm n w m x E )()()()()]()([2222、短时平均过零率短时平均过零率是指每帧内信号通过零值的次数。
对于连续语音信号,可以考察其时域波形通过时间轴的情况。
对于离散信号,实质上就是信号采样点符号变化的次数。
过零率在一定程度上可以反映出频率的信息。
短时平均过零率的公式为:∑∑-+=∞-∞=--=---=1)]1(sgn[)](sgn[21 )()]1(sgn[)](sgn[21N n nm w w m n m x m x m n w m x m x Z其中,sgn[.]是符号函数,即⎩⎨⎧<-≥=0)(10)(1)](sgn[n x n x n x3、端点检测原理能够实现这些判决的依据在于,不同性质语音的各种短时参数具有不同的概率密度函数,以及相邻的若干帧语音应具有一致的语音特性,它们不会在S 、U 、V 之间随机地跳来跳去。
要正确判断每个输入语音的起点和终点,利用短时平均幅度参数E 和短时平均过零率Z 可以做到这一点。
首先,根据浊音情况下的短时能量参数的概率密度函数)|(V E P 确定一个阈值参数H E ,H E 值一般定的较高。
当一帧输入信号的短时平均幅度参数超过H E 时,就可以判定该帧语音信号不是无声,而有相当大的可能是浊音。
语音信号处理试验报告
---------------------考试---------------------------学资学习网---------------------押题------------------------------语音信号处理实验班级:学号:姓名:实验一基于MATLAB的语音信号时域特征分析(2学时)短时能量)1.(1)加矩形窗a=wavread('mike.wav');a=a(:,1);subplot(6,1,1),plot(a);N=32;for i=2:6h=linspace(1,1,2.^(i-2)*N);%形成一个矩形窗,长度为2.^(i-2)*NEn=conv(h,a.*a);% 求短时能量函数Ensubplot(6,1,i),plot(En);if(i==2) ,legend('N=32');elseif(i==3), legend('N=64');elseif(i==4) ,legend('N=128');elseif(i==5) ,legend('N=256');elseif(i==6) ,legend('N=512');endend10-100.511.522.534x 104 20 N=3232.51.5200.514x 10 50 N=6431.50.51022.54x 10 1050 N=12831.5202.50.514x 10 20100 N=256322.50.511.504x 10 40200 N=5123100.51.522.54x 10(2)加汉明窗a=wavread('mike.wav');a=a(:,1);subplot(6,1,1),plot(a);N=32;for i=2:6h=hanning(2.^(i-2)*N);%形成一个汉明窗,长度为2.^(i-2)*NEn求短时能量函数En=conv(h,a.*a);%subplot(6,1,i),plot(En);if(i==2), legend('N=32');elseif(i==3), legend('N=64');elseif(i==4) ,legend('N=128');elseif(i==5) ,legend('N=256');elseif(i==6) ,legend('N=512');endend10-100.511.522.534x 102 10 N=3232.51.5020.514x 10 420 N=64311.522.50.504x 10 420 N=12831.5202.50.514x 10 1050 N=25631.522.500.514x 10 20100 N=512322.50.5011.54x 102)短时平均过零率a=wavread('mike.wav');a=a(:,1);n=length(a);N=320;subplot(3,1,1),plot(a);h=linspace(1,1,N);En=conv(h,a.*a); %求卷积得其短时能量函数Ensubplot(3,1,2),plot(En);for i=1:n-1if a(i)>=0b(i)= 1;elseb(i) = -1;endif a(i+1)>=0b(i+1)=1;elseb(i+1)= -1;endw(i)=abs(b(i+1)-b(i)); %求出每相邻两点符号的差值的绝对值endk=1;j=0;while (k+N-1)<nZm(k)=0;for i=0:N-1;Zm(k)=Zm(k)+w(k+i);endj=j+1;k=k+N/2; %每次移动半个窗endfor w=1:jQ(w)=Zm(160*(w-1)+1)/(2*N); %短时平均过零率endsubplot(3,1,3),plot(Q),grid;10-100.511.522.534x 102010000.511.522.534x 100.500204060801001201401601803)自相关函数N=240y=wavread('mike.wav');y=y(:,1);x=y(13271:13510);x=x.*rectwin(240);R=zeros(1,240);for k=1:240for n=1:240-kR(k)=R(k)+x(n)*x(n+k);endendj=1:240;plot(j,R);grid;2.521.510.50-0.5-1-1.5050100150200250分析语音信号频域特征MATLAB基于实验二1)短时谱cleara=wavread('mike.wav');a=a(:,1);subplot(2,1,1),plot(a);title('original signal');gridN=256;h=hamming(N);for m=1:Nb(m)=a(m)*h(m)endy=20*log(abs(fft(b)))subplot(2,1,2)plot(y);title('短时谱');gridoriginal signal10.50-0.5-100.511.522.534x 10谱时短10.5000.20.40.60.811.21.41.61.822)语谱图[x,fs,nbits]=wavread('mike.wav')x=x(:,1);specgram(x,512,fs,100);xlabel('时间(s)');ylabel('频率(Hz)'););'语谱图'title(语谱图50004000)3000zH(率频2000100000.511.52(s)时间3)倒谱和复倒谱(1)加矩形窗时的倒谱和复倒谱cleara=wavread('mike.wav',[4000,4350]);a=a(:,1);N=300;h=linspace(1,1,N);for m=1:Nb(m)=a(m)*h(m);endc=cceps(b);c=fftshift(c);d=rceps(b);d=fftshift(d);subplot(2,1,1)plot(d);title('加矩形窗时的倒谱')subplot(2,1,2)) '加矩形窗时的复倒谱'plot(c);title(加矩形窗时的倒谱10-1-2050100150200250300加矩形窗时的复倒谱1050-5-10050100150200250300(2)加汉明窗时的倒谱和复倒谱cleara=wavread('mike.wav',[4000,4350]);a=a(;,1);N=300;h=hamming(N);for m=1:Nb(m)=a(m)*h(m);endc=cceps(b);c=fftshift(c);d=rceps(b);d=fftshift(d);subplot(2,1,1)plot(d);title('加汉明窗时的倒谱')subplot(2,1,2)) '加汉明窗时的复倒谱'plot(c);title(加汉明窗时的倒谱10-1-2-3050100150200250300加汉明窗时的复倒谱1050-5-10050100150200250300实验三基于MATLAB的LPC分析MusicSource = wavread('mike.wav');MusicSource=MusicSource(:,1);Music_source = MusicSource';N = 256; % window length,N = 100 -- 1000;Hamm = hamming(N); % create Hamming windowframe = input('请键入想要处理的帧位置= ');% origin is current frameorigin = Music_source(((frame - 1) * (N / 2) + 1):((frame - 1) * (N / 2) + N));Frame = origin .* Hamm';%%Short Time Fourier Transform%[s1,f1,t1] = specgram(MusicSource,N,N/2,N);[Xs1,Ys1] = size(s1);for i = 1:Xs1FTframe1(i) = s1(i,frame);endN1 = input('请键入预测器阶数= '); % N1 is predictor's order[coef,gain] = lpc(Frame,N1); % LPC analysis using Levinson-Durbin recursionest_Frame = filter([0 -coef(2:end)],1,Frame); % estimate frame(LP)FFT_est = fft(est_Frame);err = Frame - est_Frame; % error% FFT_err = fft(err);subplot(2,1,1),plot(1:N,Frame,1:N,est_Frame,'-r');grid;title('原始语音帧vs.预测后语音帧') subplot(2,1,2),plot(err);grid;title('误差');pause%subplot(2,1,2),plot(f',20*log(abs(FTframe2)));grid;title('短时谱')%% Gain solution using G^2 = Rn(0) - sum(ai*Rn(i)),i = 1,2,...,P%fLength(1 : 2 * N) = [origin,zeros(1,N)];Xm = fft(fLength,2 * N);X = Xm .* conj(Xm);Y = fft(X , 2 * N);Rk = Y(1 : N);PART = sum(coef(2 : N1 + 1) .* Rk(1 : N1));G = sqrt(sum(Frame.^2) - PART);A = (FTframe1 - FFT_est(1 : length(f1'))) ./ FTframe1 ; % inverse filter A(Z)subplot(2,1,1),plot(f1',20*log(abs(FTframe1)),f1',(20*log(abs(1 ./ A))),'-r');grid;title('短时谱'); subplot(2,1,2),plot(f1',(20*log(abs(G ./ A))));grid;title('LPC谱');pause%plot(abs(ifft(FTframe1 ./ (G ./ A))));grid;title('excited')%plot(f1',20*log(abs(FFT_est(1 : length(f1')) .* A / G )));grid;%pause%% find_pitch%temp = FTframe1 - FFT_est(1 : length(f1'));% not move higher frequncepitch1 = log(abs(temp));pLength = length(pitch1);result1 = ifft(pitch1,N);% move higher frequncepitch1((pLength - 32) : pLength) = 0;result2 = ifft(pitch1,N);% direct do real cepstrum with errpitch = fftshift(rceps(err));origin_pitch = fftshift(rceps(Frame));subplot(211),plot(origin_pitch);grid;title('原始语音帧倒谱(直接调用函数)');subplot(212),plot(pitch);grid;title('预测误差倒谱(直接调用函数)');pausesubplot(211),plot(1:length(result1),fftshift(real(result1)));grid;title('预测误差倒谱(根据定义编写,没有去除高频分量)');subplot(212),plot(1:length(result2),fftshift(real(result2)));grid;title('预测误差倒谱(根据定义编);)'写,去除高频分量原始语音帧vs.预测后语音帧0.40.20-0.2-0.4050100150200250300差误0.20.10-0.1-0.2300250100050150200短时谱500-50-100010203040506070谱LPC100806040010203040506070原始语音帧倒谱(直接调用函数)0.50-0.5-1050100150200250300预测误差倒谱(直接调用函数)0.50-0.5-1050100150200250300预测误差倒谱(根据定义编写,没有去除高频分量)0.20-0.2-0.4-0.6050100150200250300预测误差倒谱(根据定义编写,去除高频分量)0.10-0.1-0.2-0.3050100150200250300预测误差倒谱(根据定义编写,没有去除高频分量)0.20-0.2-0.4-0.6050100150200250300预测误差倒谱(根据定义编写,去除高频分量)0.10-0.1-0.2-0.3050100150200250300预测误差倒谱(根据定义编写,没有去除高频分量)0.20-0.2-0.4-0.6050100150200250300预测误差倒谱(根据定义编写,去除高频分量)0.10-0.1-0.2-0.3050100150200250300实验四基于VQ的特定人孤立词语音识别研究1、mfcc.mccc = mfcc(x)function);'m'bank=melbankm(24,256,8000,0,0.5,bank=full(bank); bank=bank/max(bank(:));k=1:12for n=0:23; dctcoef(k,:)=cos((2*n+1)*k*pi/(2*24));endw = 1 + 6 * sin(pi * [1:12] ./ 12);w = w/max(w);xx=double(x);xx=filter([1 -0.9375],1,xx);xx=enframe(xx,256,80); i=1:size(xx,1)for y = xx(i,:); s = y' .*hamming(256); t = abs(fft(s)); t = t.^2; c1=dctcoef * log(bank * t(1:129));c2 = c1.*w'; m(i,:)=c2';enddtm = zeros(size(m)); i=3:size(m,1)-2for dtm(i,:) = -2*m(i-2,:) - m(i-1,:) + m(i+1,:) + 2*m(i+2,:);end dtm = dtm / 3;ccc = [m dtm];ccc = ccc(3:size(m,1)-2,:);2、vad.m[x1,x2] = vad(x)function x = double(x);x = x / max(abs(x));FrameLen = 240;FrameInc = 80;amp1 = 10;amp2 = 2;zcr1 = 10;zcr2 = 5;% 6*10ms = 30ms maxsilence = 8;% 15*10ms = 150ms minlen = 15;status = 0;count = 0;silence = 0;tmp1 = enframe(x(1:end-1), FrameLen, FrameInc);tmp2 = enframe(x(2:end) , FrameLen, FrameInc);signs = (tmp1.*tmp2)<0;diffs = (tmp1 -tmp2)>0.02;zcr = sum(signs.*diffs, 2);amp = sum(abs(enframe(filter([1 -0.9375], 1, x), FrameLen, FrameInc)),2);amp1 = min(amp1, max(amp)/4);amp2 = min(amp2, max(amp)/8);x1 = 0;x2 = 0; n=1:length(zcr)for goto = 0; status switch{0,1} caseif amp(n) > amp1x1 = max(n-count-1,1); status = 2; silence = 0; count = count + 1;... amp(n) > amp2 | elseif zcr(n) > zcr2status = 1; count = count + 1;else status = 0; count = 0;end2, caseamp(n) > amp2 | ...if zcr(n) > zcr2 count = count + 1; elsesilence = silence+1; if silence < maxsilencecount = count + 1; count < minlen elseifstatus = 0; silence = 0; count = 0;elsestatus = 3;endend3, case; break endcount = count-silence/2;x2 = x1 + count -1;3、codebook.m%clear; xchushi= codebook(m)function[a,b]=size(m);[m1,m2]=szhixin(m); [m3,m4]=szhixin(m2);[m1,m2]=szhixin(m1);[m7,m8]=szhixin(m4);[m5,m6]=szhixin(m3);[m3,m4]=szhixin(m2);[m1,m2]=szhixin(m1);[m15,m16]=szhixin(m8);[m13,m14]=szhixin(m7);[m11,m12]=szhixin(m6);[m9,m10]=szhixin(m5);[m7,m8]=szhixin(m4);[m5,m6]=szhixin(m3);[m3,m4]=szhixin(m2);[m1,m2]=szhixin(m1);chushi(1,:)=zhixinf(m1);chushi(2,:)=zhixinf(m2);chushi(3,:)=zhixinf(m3);chushi(4,:)=zhixinf(m4); chushi(5,:)=zhixinf(m5);chushi(6,:)=zhixinf(m6);chushi(7,:)=zhixinf(m7); chushi(8,:)=zhixinf(m8);chushi(9,:)=zhixinf(m9);chushi(10,:)=zhixinf(m10); chushi(11,:)=zhixinf(m11);chushi(12,:)=zhixinf(m12);chushi(13,:)=zhixinf(m13);chushi(14,:)=zhixinf(m14);chushi(15,:)=zhixinf(m15);chushi(16,:)=zhixinf(m16);sumd=zeros(1,1000);k=1;dela=1;xchushi=chushi;(k<=1000)while sum=ones(1,16); p=1:a fori=1:16 for d(i)=odistan(m(p,:),chushi(i,:));enddmin=min(d); sumd(k)=sumd(k)+dmin;i=1:16ford(i)==dmin if xchushi(i,:)=xchushi(i,:)+m(p,:); sum(i)=sum(i)+1;end endendi=1:16forxchushi(i,:)=xchushi(i,:)/sum(i);endk>1if dela=abs(sumd(k)-sumd(k-1))/sumd(k);end k=k+1; chushi=xchushi; end return4、testvq.mclear;)这是一个简易语音识别系统,请保证已经将您的语音保存在相应文件夹中'disp(')正在训练您的语音模版指令,请稍后...'disp(' i=1:10for,i-1);\\ú.wav'海儿的声音 fname =sprintf('D:\\matlab\\work\\dtw1\\ x = wavread(fname); [x1 x2] = vad(x); m = mfcc(x); m = m(x1:x2-5,:);ref(i).code=codebook(m);end)?''语音指令训练成功,恭喜!disp()...''正在测试您的测试语音指令,请稍后disp( i=1:10for,i-1);海儿的声音\\?.wav'fname = sprintf('D:\\matlab\\work\\dtw1\\ x = wavread(fname);[x1 x2] = vad(x); mn = mfcc(x); mn = mn(x1:x2-5,:);%mn = mn(x1:x2,:) test(i).mfcc = mn;end sumsumdmax=0;sumsumdmin=0;)''对训练过的语音进行测试disp( w=1:10for sumd=zeros(1,10); [a,b]=size(test(w).mfcc);i=1:10forp=1:a for j=1:16 ford(j)=odistan(test(w).mfcc(p,:),ref(i).code(j,:));dmin=min(d);%×üê§?? sumd(i)=sumd(i)+dmin;end end sumdmin=min(sumd)/a;sumdmin1=min(sumd);sumdmax(w)=max(sumd)/a; sumsumdmin=sumdmin+sumsumdmax;sumsumdmax=sumdmax(w)+sumsumdmax;)正在匹配您的语音指令,请稍后...'disp(' i=1:10for (sumd(i)==sumdmin1) if (i) switch 1 case);前'', '您输入的语音指令为:%s; 识别结果为%s\n','前fprintf(' 2 case);', ''后:%s; 识别结果为%s\n','后 fprintf('您输入的语音指令为 3case);', '左识别结果为%s\n','左' fprintf('您输入的语音指令为:%s;4case);''右,'右', 您输入的语音指令为 fprintf('a:%s; 识别结果为%s\n' 5case);''东'东', fprintf('您输入的语音指令为:%s; 识别结果为%s\n', 6case);南'南', ' fprintf('您输入的语音指令为:%s; 识别结果为%s\n',' 7 case);', '西,:%s; 识别结果为%s\n''西' fprintf('您输入的语音指令为 8case);''北,'北', 您输入的语音指令为 fprintf(':%s; 识别结果为%s\n' 9case);上'', ', fprintf('您输入的语音指令为a:%s; 识别结果为%s\n''上 10case);下', '下'',您输入的语音指令为 fprintf('a:%s; 识别结果为%s\n'otherwise); 'error' fprintf(endendend end delamin=sumsumdmin/10;delamax=sumsumdmax/10;)''对没有训练过的语音进行测试disp()正在测试你的语音,请稍后...'disp(' i=1:10for,i-1);fname =sprintf('D:\\matlab\\work\\dtw1\\o£?ùμ?éùò?\\?.wav' x = wavread(fname);[x1 x2] = vad(x); mn = mfcc(x); mn = mn(x1:x2-5,:);%mn = mn(x1:x2,:)test(i).mfcc = mn;endw=1:10for sumd=zeros(1,10); [a,b]=size(test(w).mfcc); i=1:10forp=1:a for j=1:16ford(j)=odistan(test(w).mfcc(p,:),ref(i).code(j,:));enddmin=min(d);%×üê§?? sumd(i)=sumd(i)+dmin;end end sumdmin=min(sumd);z=0; i=1:10for (((sumd(i))/a)>delamax)|| if z=z+1;endend)...'disp('正在匹配您的语音指令,请稍后z<=3if i=1:10for (sumd(i)==sumdmin) if (i)switch1case);'前', '前',%s\n'识别结果为:%s; 您输入的语音指令为' fprintf(2 case);'后', ':%s; 识别结果为%s\n','后 fprintf('您输入的语音指令为3case);', '左识别结果为%s\n','左' fprintf('您输入的语音指令为:%s;4case);''右,'右', 识别结果为 fprintf('您输入的语音指令为a:%s; %s\n' 5case);''东'东', fprintf('您输入的语音指令为:%s; 识别结果为%s\n', 6 case);南'南', ' fprintf('您输入的语音指令为:%s; 识别结果为%s\n',' 7 case);', '西西:%s; 识别结果为%s\n','' fprintf('您输入的语音指令为 8case );''北,'北', 识别结果为 fprintf('您输入的语音指令为:%s; %s\n' 9case);上'', '上 fprintf('您输入的语音指令为a:%s; 识别结果为%s\n',' 10case);下'','下', 识别结果为 fprintf('您输入的语音指令为a:%s; %s\n'otherwise ); fprintf('error'endendend else)您输入的语音无效?£?\n'' fprintf(end end。
数字语音信号处理实验报告
语音信号处理实验报告专业班级电子信息1203学生姓名钟英爽指导教师覃爱娜完成日期2015年4月28日电子信息工程系信息科学与工程学院实验一语音波形文件的分析和读取一、实验学时:2 学时二、实验的任务、性质与目的:本实验是选修《语音信号处理》课的电子信息类专业学生的基础实验。
通过实验(1)掌握语音信号的基本特性理论:随机性,时变特性,短时平稳性,相关性等;(2)掌握语音信号的录入方式和*.WAV音波文件的存储结构;(3)使学生初步掌握语音信号处理的一般实验方法。
三、实验原理和步骤:WAV 文件格式简介WAV 文件是多媒体中使用了声波文件的格式之一,它是以RIFF格式为标准。
每个WAV 文件的头四个字节就是“RIFF”。
WAV 文件由文件头和数据体两大部分组成,其中文件头又分为RIFF/WAV 文件标识段和声音数据格式说明段两部分。
常见的WAV 声音文件有两种,分别对应于单声道(11.025KHz 采样率、8Bit 的采样值)和双声道(44.1KHz 采样率、16Bit 的采样值)。
采样率是指声音信号在“模拟→数字”转换过程中,单位时间内采样的次数;采样值是指每一次采样周期内声音模拟信号的积分值。
对于单声道声音文件,采样数据为8 位的短整数(short int 00H-FFH);而对于双声道立体声声音文件,每次采样数据为一个16 位的整数(int),高八位和低八位分别代表左右两个声道。
WAV 文件数据块包含以脉冲编码调制(PCM)格式表示的样本。
在单声道WAV 文件中,道0 代表左声道,声道1 代表右声道;在多声道WAV 文件中,样本是交替出现的。
WAV 文件的格式表1 wav文件格式说明表(1)选取WINDOWS 下MEDIA 中的任一WAV 文件,采用播放器进行播放,观察其播放波形,定性描述其特征;(2)录入并存储本人姓名语音文件(姓名.wav),根据WAV 文件的储格式,利用MATLAB 或C 语言,分析并读取文件头和数据信息;(3)将文件的通道数、采样频率、样本位数和第一个数据读取并示出来。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
实验 一 语音信号的采集及预处理 一、实验目的 在理论学习的基础上,进一步地理解和掌握语音信号预处理及短时加窗的意义及基于matlab的实现方法。
二、实验原理及内容 1、语音信号的录音、读入、放音等:练习matlab中几个音频处理函数,利用函数wavread对语音信号进行采样,记住采样频率和采样点数,给出以下语音的波形图(2.wav),wavread的用法参见mablab帮助文件。利用wavplay或soundview放音。也可以利用wavrecord自己录制一段语音,并进行以上操作(需要话筒)。
I=wavread('2.wav'); Fs=115200; soundview(I,Fs) %波形图如图1所示
图1 2.wav的波形图 利用wavplay函数,在佩戴耳机的情况下可以清晰的听到所要播放于心的消息。
2、 语音信号的分帧:对语音信号进行分帧,可以利用voicebox工具箱中的函数enframe。voicebox工具箱是基于GNU协议的自由软件,其中包含了很多语音信号相关的函数。 voicebox工具箱安装方法: (1)把工具箱拷贝入C:\Program Files\MATLAB\R2006b\toolbox目录下; (2)菜单file-set path-"Add folder" 导入voicebox; 图2 Set Path (3)菜单file-Preference-General-"Updata Toolbox Path Cache
图3 Preferences y=enframe(I,256,128); whos y I 实验结果为: Name Size Bytes Class Attributes I 9000x1 72000 double y 69x256 141312 double
I=wavread('2.wav'); t=enframe(I,256,128); plot(t)
图4 分帧后的波形图 3、语音信号的加窗:本步要求利用window函数设计窗口长度为256(N=256)的矩形窗(rectwin)、汉明窗(hamming)及汉宁窗(hann)),利用wvtool函数观察其时域波形图及频谱特性,比较得出结论。观察信号加矩形窗及汉明窗后的波形,利用subplot与reshape函数将分帧后波形、加矩形窗波形及加汉明窗波形画在一张图上比较。取出其中一帧,利用subplot与reshape函数将一帧语音的波形、加矩形窗波形及加汉明窗波形画在一张图上比较将得出结论。
N = 256; w = window(@rectwin,N); w1 = window(@hamming,N); w2 = window(@hann,N); wvtool(w,w1,w2)
图5 窗口的时域和频域波形图 I=wavread('2.wav'); N = 256; w = window(@rectwin,N); w1 = window(@hamming,N); w2 = window(@hann,N); I1=I(4000:4255,1); I2=I1.*w; I3=I1.*w1; I4=I1.*w2; subplot(2,2,1),plot(I) title('原始波形图') subplot(2,2,2),plot(I2) title('添加矩形窗波形') subplot(2,2,3),plot(I3) title('添加海明窗波形') subplot(2,2,4),plot(I4) title('添加汉宁窗波形')
图6 原始波形、加矩形窗波形、汉明窗波形及加汉明窗波形 3、预加重:即语音信号通过一个一阶高通滤波器19375.01z。 I=wavread('2.wav'); I1=I(4000:4255,1); y=filter([1 -0.9375],1,I1); subplot(1,2,1),plot(I1) title('预加重前的波形图') subplot(1,2,2),plot(y) title('预加重后的波形图')
图7 预加重前后的波形图 4、改变帧长、帧移重复上述步骤。 改变后的帧长、帧移为1024和256实验结果如下:
I=wavread('2.wav'); t=enframe(I,1024,256); plot(t)
图8 改变帧长、帧移后的波形图 I=wavread('2.wav'); N = 1024; w = window(@rectwin,N); w1 = window(@hamming,N); w2 = window(@hann,N); wvtool(w,w1,w2) 图9 改变帧长、帧移后窗口的时域和频域波形图 I=wavread('2.wav'); N =1024; w = window(@rectwin,N); w1 = window(@hamming,N); w2 = window(@hann,N); I1=I(4000:5023,1); I2=I1.*w; I3=I1.*w1; I4=I1.*w2; subplot(2,2,1),plot(I) title('原始波形图') subplot(2,2,2),plot(I2) title('添加矩形窗波形') subplot(2,2,3),plot(I3) title('添加海明窗波形') subplot(2,2,4),plot(I4) title('添加汉宁窗波形')
图10 改变帧长、帧移后的加窗图 I=wavread('2.wav'); I1=I(4000:5023,1); y=filter([1 -0.9375],1,I1); subplot(1,2,1),plot(I1) title('预加重前的波形图') subplot(1,2,2),plot(y) title('预加重后的波形图')
图11 改变帧长、帧移后的预加重前后波形图 5、换一段语音重复上述步骤。 把语音换成9.wav
I=wavread('9.wav'); t=enframe(I,256,128); plot(t)
图12 分帧后的波形图 I=wavread('9.wav'); N = 256; w = window(@rectwin,N); w1 = window(@hamming,N); w2 = window(@hann,N); I1=I(4000:4255,1); I2=I1.*w; I3=I1.*w1; I4=I1.*w2; subplot(2,2,1),plot(I) title('原始波形图') subplot(2,2,2),plot(I2) title('添加矩形窗波形') subplot(2,2,3),plot(I3) title('添加海明窗波形') subplot(2,2,4),plot(I4) title('添加汉宁窗波形')
图13 原始波形、加矩形窗波形、汉明窗波形及加汉明窗波形 I=wavread('9.wav'); I1=I(4000:4255,1); y=filter([1 -0.9375],1,I1); subplot(1,2,1),plot(I1) title('预加重前的波形图') subplot(1,2,2),plot(y) title('预加重后的波形图') 图14 预加重前后的波形图 I=wavread('9.wav'); t=enframe(I,1024,256); plot(t)
图15 改变帧长、帧移后的波形图 I=wavread('9.wav'); N =1024; w = window(@rectwin,N); w1 = window(@hamming,N); w2 = window(@hann,N); I1=I(4000:5023,1); I2=I1.*w; I3=I1.*w1; I4=I1.*w2; subplot(2,2,1),plot(I) title('原始波形图') subplot(2,2,2),plot(I2) title('添加矩形窗波形') subplot(2,2,3),plot(I3) title('添加海明窗波形') subplot(2,2,4),plot(I4) title('添加汉宁窗波形')
图16 改变帧长、帧移后的加窗图 I=wavread('9.wav'); I1=I(4000:5023,1); y=filter([1 -0.9375],1,I1); subplot(1,2,1),plot(I1) title('预加重前的波形图') subplot(1,2,2),plot(y) title('预加重后的波形图') 图17 改变帧长、帧移后的预加重前后波形图 短时加窗处理的结论: 添加海明窗和汉宁窗可以得到效果不错的波形,很明显两个波形相似,矩形窗的波形相对不是很平稳。通过改变帧长、帧移后波形更加的清晰,特征更加的明显,更方便观察。
三、思考题 1. 语音信号包括哪些预处理,作用分别是什么? 语音信号的预处理包括数字化、放大及增益控制、反混叠滤波、预加重等。 数字化:抽样、量化; 放大及增益控制:对语音信号进行放大; 反混叠滤波:防止混叠滤波和噪声干扰; 预加重:加上6DB/倍频程的下将的频率特性来还原成原来的特性。
2. 不同窗口的优缺点,窗口长度如何选取? 分帧可用可移动的有限长度窗口进行加权的方法来实现。窗每次移动的距离如果恰好与窗的宽度相等,相应于各帧的语音信号是衔接的;如果窗的移动距离比窗宽要小,那么相邻帧之间将有一部分重叠。 窗口长度的选择:通常在10kHz取样频率下,N折衷选择为100~200(即10~20ms持续时间)