数字语音信号处理实验(共54页)_第1页
数字语音信号处理实验(共54页)_第2页
数字语音信号处理实验(共54页)_第3页
数字语音信号处理实验(共54页)_第4页
数字语音信号处理实验(共54页)_第5页
已阅读5页,还剩57页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、语音(yyn)信号处理实验班级(bnj):学号:姓名(xngmng):2015年10月语音信号处理(xn ho ch l)实验实验(shyn)学时数:8实验(shyn)学分:0.5实验项目数:41、目的与基本要求实验为研究型(设计型)实验,共安排4个,为了真正达到研究设计型实验的目的,采用开放实验的办法,将自主学习和研究设计型实验结合起来,统一安排。自主学习内容由学生自主学习参考教材的内容,并采用多种渠道,如查阅最新语音信号处理方面的科技文献、资料,作出学习报告。目的是培养学生的自学能力和科技文献的检索和查阅能力,同时可以有助于学生了解和掌握语音信号处理领域的最新技术进展和应用情况,将理论知识

2、和实际应用结合起来,促进学生学习的积极性和主动性。通过开放实验,目的使学生进一步理解数字语音信息处理的基本方法,提高学生自主分析、发现及解决问题的能力,锻炼学生论文写作能力,为实际的应用打下扎实的基础。2、研究设计型实验的内容1)研究设计型实验1:基于MATLAB的语音信号时域特征分析要求:按所学相关语音处理的知识,通过网上学习、资料查阅,自己设计程序,给出某一语音信号的短时过零率、短时能量、短时自相关特征的分析结果,并借助时域分析方法检测所分析语音信号的基音周期。2)研究设计型实验2:基于MATLAB分析语音信号频域特征要求:按所学相关语音处理的得知识,通过网上学习、资料查阅,自己设计程序,

3、给出某一语音信号的短时谱、倒谱、语谱图的分析结果,并借助频域分析方法检测所分析语音信号的基音周期或共振峰。3)研究设计型实验3:基于MATLAB进行语音信号的LPC分析要求(yoqi):按所学相关语音处理的知识,通过网上学习、资料查阅,自己设计程序,给出某一语音信号的LPC分析(fnx)结果,包括LPC谱、LPCC谱的分析结果,并借助LPC分析方法检测所分析语音信号的基音周期和共振峰。4)研究(ynji)设计型实验4:基于VQ的特定人孤立词语音识别研究要求:按所学相关语音处理的知识,通过网上学习、资料查阅,借助MATLAB工具,自己设计基于VQ的码本训练程序和识别程序(尽量选用所学HMM或DT

4、W方法设计识别程序),能识别特定人的语音,分析所设计系统的特性。参考资料实验一 基于MATLAB的语音信号时域特征分析(2学时)一、实验目的语音信号是一种非平稳的时变信号,它携带着各种信息。在语音编码、语音合成、语音识别和语音增强等语音处理中无一例外需要提取语音中包含的各种信息。语音信号分析的目的就在与方便有效的提取并表示语音信号所携带的信息。语音信号分析可以分为时域和变换域等处理方法,其中时域分析是最简单的方法,直接对语音信号的时域波形进行分析,提取的特征参数主要有语音的短时能量,短时平均过零率,短时自相关函数等。本实验要求掌握时域特征分析原理,并利用已学知识,编写程序求解语音信号的短时过零

5、率、短时能量、短时自相关特征,分析实验结果,并能掌握借助时域分析方法所求得的参数分析语音信号的基音周期及共振峰。二、实验原理及实验结果(自己补充)附录(参考程序)1) 短时能量 (1)加矩形窗 a=wavread(beifeng.wav);subplot(6,1,1),plot(a);N=32;for i=2:6h=linspace(1,1,2.(i-2)*N);%形成(xngchng)一个矩形窗,长度为2.(i-2)*N En=conv(h,a.*a);% 求短时能量(nngling)函数En subplot(6,1,i),plot(En);if(i=2) legend(N=32);else

6、if(i=3) legend(N=64);elseif(i=4) legend(N=128);elseif(i=5) legend(N=256);elseif(i=6) legend(N=512);endend(2)加汉明窗 a=wavread(beifeng.wav);subplot(6,1,1),plot(a);N=32;for i=2:6h=hanning(2.(i-2)*N);%形成(xngchng)一个汉明窗,长度为2.(i-2)*N En=conv(h,a.*a);% 求短时能量函数En subplot(6,1,i),plot(En);if(i=2) legend(N=32);el

7、seif(i=3) legend(N=64);elseif(i=4) legend(N=128);elseif(i=5) legend(N=256);elseif(i=6) legend(N=512);endend2) 短时平均过零率a=wavread(beifeng.wav);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-1 if a(i)=0 b(i)= 1; else b(i) = -1

8、; end if a(i+1)=0 b(i+1)=1; else b(i+1)= -1; end w(i)=abs(b(i+1)-b(i); %求出每相邻(xin ln)两点符号的差值的绝对值 end k=1; j=0;while (k+N-1)n Zm(k)=0; for i=0:N-1; Zm(k)=Zm(k)+w(k+i); end j=j+1; k=k+N/2; %每次移动(ydng)半个窗 end for w=1:j Q(w)=Zm(160*(w-1)+1)/(2*N); %短时平均(pngjn)过零率 end subplot(3,1,3),plot(Q),grid;3) 自相关函数

9、 N=240Y=WAVREAD(beifeng.wav);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);endend j=1:240;plot(j,R);grid;实验(shyn)二 基于MATLAB分析语音信号(xnho)频域特征一、实验(shyn)目的信号的傅立叶表示在信号的分析与处理中起着重要的作用。因为对于线性系统来说,可以很方便地确定其对正弦或复指数和的响应,所以傅立叶分析方法能完善地解决许多信号分析和处理问题。另外,傅立叶表示使信号的某些

10、特性变得更明显,因此,它能更深入地说明信号的各项红物理现象。 由于语音信号是随着时间变化的,通常认为,语音是一个受准周期脉冲或随机噪声源激励的线性系统的输出。输出频谱是声道系统频率响应与激励源频谱的乘积。声道系统的频率响应及激励源都是随时间变化的,因此一般标准的傅立叶表示虽然适用于周期及平稳随机信号的表示,但不能直接用于语音信号。由于语音信号可以认为在短时间内,近似不变,因而可以采用短时分析法。本实验要求掌握傅里叶分析原理,会利用已学的知识,编写程序估计短时谱、倒谱,画出语谱图,并分析实验结果,在此基础上,借助频域分析方法所求得的参数分析语音信号的基音周期或共振峰。二、实验原理(自己补充)参考

11、(cnko)程序1)短时谱 cleara=wavread(beifeng.wav);subplot(2,1,1),plot(a);title(original signal);gridN=256;h=hamming(N);for m=1:N b(m)=a(m)*h(m)end y=20*log(abs(fft(b)subplot(2,1,2)plot(y);title(短时谱);grid2)语谱图 x,fs,nbits=wavread(beifeng.wav)specgram(x,512,fs,100); xlabel(时间(shjin)(s);ylabel(频率(pnl)(Hz);title

12、(语谱图);3)倒谱和复倒谱(1)加矩形窗时的倒谱和复倒谱cleara=wavread(beifeng.wav,4000,4350);N=300;h=linspace(1,1,N);for m=1:Nb(m)=a(m)*h(m);end c=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(加矩形窗时的复倒谱)(2)加汉明窗时的倒谱和复倒谱cleara=wavread(beifeng.wav,4000,4350);N=

13、300;h=hamming(N);for m=1:Nb(m)=a(m)*h(m);end c=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(加汉明窗时的复倒谱)实验(shyn)三 基于MATLAB的LPC分析一、实验(shyn)目的线性预测分析是最有效的语音分析技术之一,在语音编码、语音合成、语音识别和说话人识别等语音处理领域中得到了广泛的应用。语音线性预测的基本思想是:一个语音信号的抽样值可以用过去若干个取样值的

14、线性组合来逼近。通过使实际语音抽样值与线性预测抽样值的均方误差达到最小,可以确定唯一(wi y)的一组线性预测系数。采用线性预测分析不仅能够得到语音信号的预测波形,而且能够提供一个非常好的声道模型。如果将语音模型看作激励源通过一个线性时不变系统产生的输出,那么可以利用LP分析对声道参数进行估值,以少量低信息率的时变参数精确地描述语音波形及其频谱的性质。此外,LP分析还能够对共振峰、功率谱等语音参数进行精确估计,LP分析得到的参数可以作为语音识别的重要参数之一。由于语音是一种短时平稳信号,因此只能利用一段语音来估计模型参数。此时有两种方案:一种是将长的语音序列加窗,然后对加窗语音进行LP分析,只

15、要限定窗的长度就可以保证分析的短时性,这种方案称为自相关法;另一种方案不对语音加窗,而是在计算均方预测误差时限制其取和区间,这样可以导出LP分析的自协方差法。本实验要求掌握LPC原理,会利用已学的知识,编写程序估计线性预测系数以及(yj)LPC的推演参数,并能利用所求的相关参数估计语音的端点、清浊音判断、基因周期、共振峰等。二、实验(shyn)原理三、实验(shyn)结果(参考)我们使用的原始语音为“北风”,采样频率为11000Hz,运行程序见附录。在这里我们取第30帧进行观察,线性预测阶数为12,看到图3.1所示的原始语音帧的波形,预测语音帧波形和它们之间预测误差的波形。图3.2为原始语音帧

16、和预测语音帧的短时谱和LPC谱的波形图3.1 原始语音帧、预测语音帧和预测误差的波形图3.2 原始语音帧和预测语音帧的短时谱和LPC谱的波形这里我们可以改变线性误差的阶数来观察语音帧的短时谱和LP谱的变化情况,如图3.3。图3.3 预测(yc)阶数对语音(yyn)帧短时谱和LPC谱的影响从图中可以看出,P越大,LPC谱越能反映出语音短时谱的细节部分,但LPC谱的光滑度随之下降。由于我们的目的只是用LPC谱反映声道综合效应的谱的表示式,而具体的谐波形状是通过激励(jl)谱来控制的,因此LPC谱只要能够体现出语音的共振峰的结构和谱包络就可以,因此从计算复杂性的角度分析,预测阶数P应该适中。图3.4

17、是原始语音和预测误差的倒谱波形,我们可以从中计算出原始语音的基音周期。从图中看出两峰值之间的间隔为40点左右,基音周期为40/11000=3.6ms,频率为278Hz左右。图3.4 原始语音和预测误差的倒谱波形图3.5给出了原始语音的语谱图和预测语音的语谱图,通过比较发现,预测语音的预测效果还可以,基音频率相差无几。图3.5 原始(yunsh)语音的语谱图和预测语音的语谱图三、附录(LPC分析(fnx)参考程序)MusicSource = wavread(bei);Music_source = MusicSource;N = 2048; % window length,N = 100 - 10

18、00;Hamm = hamming(N); % create Hamming windowframe = input(请键入(jin r)想要处理的帧位置 = );% 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

19、 i = 1:Xs1 FTframe1(i) = s1(i,frame);end N1 = input(请键入预测器阶数 = ); % N1 is predictors ordercoef,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(

20、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 G2 = Rn(0) - sum(ai*Rn(i),i = 1,2,.,P%fLength(1 : 2 * N) = origin,zeros(1,N); Xm = fft(fLengt

21、h,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(短时谱);subpl

22、ot(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 frequnce pitch1 = log(abs(temp);pLength = len

23、gth(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(原始(yunsh)语音帧倒谱(直接调用函数);subplot(212),

24、plot(pitch);grid;title(预测(yc)误差倒谱(直接调用函数);pause subplot(211),plot(1:length(result1),fftshift(real(result1);grid;title(预测误差倒谱(根据定义(dngy)编写,没有去除高频分量);subplot(212),plot(1:length(result2),fftshift(real(result2);grid;title(预测误差倒谱(根据(gnj)定义编写,去除高频分量);实验四 基于VQ的特定(tdng)人孤立词语音识别研究一、实验(shyn)目的矢量量化(Vector Quan

25、tization)是一种极其重要的信号压缩方法,是自70年代末才发展起来的。它广泛应用于语音编码、语音识别与合成、图象压缩等领域。VQ在语音信号处理中占有十分重要的地位。许多重要的研究课题中,特别是低速语音编码和语音识别的研究中,VQ都起着非常重要的作用。量化可以分为两大类:一类是标量量化,另一类是矢量量化。标量量化是将取样后的信号值逐个地进行量化,而矢量量化是将若干个取样信号分成一组,即构成一个矢量,然后对此矢量一次进行量化。当然,矢量量化压缩数据的同时也有信息的损失,但这仅取决于量化的精度。矢量量化是标量量化的发展,可以说,凡是要用量化的地方都可以应用矢量量化。 本实验要求掌握矢量量化的原

26、理,会利用已学的相关语音特征,构建语音特征矢量,然后利用VQ技术(jsh),编写训练VQ码表的程序,并在此基础上利用所学的语音识别技术,编程实现基于矢量量化的特定人孤立词语音识别,要注意的是识别过程中语音端点如何检测,从识别的实时性角度出发,建议能利用VC技术实现。二、实验(shyn)原理三、实验(shyn)结果(根据所给的资料,仔细加以整理)基于VQ的特定人孤立词语音识别徐海儿044100230摘要: 本次设计采用基于矢量量化的特定人孤立词语音识别。先对语音进行预加重端点检测处理,接着提取特征矢量参数(采用MFCC系数),然后对模版语音用适量量化方法进行训练得到语音模版,最后用测试语音测试系

27、统性能。实验结果显示对训练人的语音识别率能达到100%,但对没有训练过的人的拒识率却不尽人意。关键字: 语音识别,MFCC系数,矢量量化语音识别系统根据对说话人说话方式的要求,可以分为孤立字(词)语音识别系统,连接词语音识别系统以及连续语音识别系统;根据对说话人的依赖程度,可以分为特定人和非特定人语音识别系统。孤立字识别系统用于识别孤立发音的字(词)。孤立字在字与字之间存在发音停顿,单字之间的端点检测比较容易;同时一般对单字的发音都比较认真,且单字之间的协同发音影响较小,较容易得到较高的识别率。采用模式匹配原理的语音识别系统组语音识别系统根据对说话人说话方式的要求,可以分为孤立字(词)语音识别

28、系统,连接词语音识别系统以及连续语音识别系统;根据对说话人的依赖程度,可以分为特定人和非特定人语音识别系统。孤立字识别系统用于识别孤立发音的字(词)。孤立字在字与字之间存在发音停顿,单字之间的端点检测比较容易;同时一般对单字的发音都比较认真,且单字之间的协同发音影响较小,较容易得到较高的识别率。本次设计采用基于矢量量化的特定人孤立词语音识别。1 、系统(xtng)整体设计失真测度 识别(shbi) 输出模式匹配特征参数提取预处理语音(yyn)信号语音模版 训练 图1 系统整体框图如图1所示,其基本算法包括以下几个阶段:首先是端点检测,通过端点检测捕捉到数据中的语音信息,然后将语音信息进行分帧和

29、加窗处理,提取一种用于语音识别的基本识别参数,接着进行矢量量化,最后将量化得到的特征矢量送入识别模型进行识别。2 、端点检测采用双门限法来检测端点。同时,利用过零率检测清音,用短时能量检测浊音,两者配合。首先为短时能量和过零率分别确定两个门限。一个比较低的门限,数值很小,对信号的变化比较敏感,很容易超过;另一个是比较高的门限,数值很大。低门限被超过未必是语音的开始,有可能是很短的噪声引起。超过高门限意味着语音信号开始。整个端点检测可分为四段:静音、过渡段、语音段、结束。实验时使用一个变量status表示当前状态。静音段,如果能量或过零率超过低门限,就开始标记起始点,进入过渡段。过渡段当两个参数

30、值都回落到低门限以下,就将当前状态恢复到静音状态。而如果过渡段中两个参数中的任一个超过高门限,则进入到语音段。处于语音段时,如果两参数降低到门限以下,而且总的记时长度小于最短时间门限,则认为这是一段噪音,继续扫描以后的语音数据,否则标记好结束端点。3 、特征参数提取 常用的语音识别参数有线性预测参数(LPC),线性预测倒谱参数(LPCC)和Mel尺度倒谱参数(MFCC)等。MFCC参数表示人对声音高低的感受是一种主观感受,用客观度量来表征这种主观感受就采用了Mel标度。Mel滤波器组是一组采用Mel刻度的线性相位FIR带通滤波器,这组滤波器中的每一个中心频率按Mel刻度在讨论的频带上均匀分布,

31、每个滤波器的带宽都为临界带宽。主要是MFCC参数考虑了听觉系统的非线性特点,能够有效地提高系统的性能。MFCC参数与LPCC相比的优点:1)语音的信息大多集中在低频部分,而高频部分易受环境噪声干扰。MFCC参数将线性频标转化为Mel频标,强调语音的低频信息,从而突出了有利于识别的信息,屏蔽了噪声干扰。2) MFCC没有任何前提假设,在各种情况(qngkung)下均可使用。而LPCC参数假定(jidng)所处理的信号为AR信号,对于动态特性较强的辅音,这个假设并不严格成立。以上(yshng)分析可以得出MFCC的识别性能和噪声鲁棒性优于LPCC,根据有关记录使用Mel倒谱参数(MFCC)的识别率

32、确比使用线性预测参数(LPC)的识别率高4个百分点,因此本系统选择MFCC (Mel倒谱参)作为基本识别参数。MFCC参数提取的过程如图2,其中Mel滤波器组的作用是利用人耳听觉特性对语音信号的幅度平方谱进行平滑。对数操作的用途:压缩语音谱的动态范围;考虑乘性噪声,将频域中的乘性成分转换成加性成分。离散余弦变化主要是用来对不同频段的频谱成份进行解相关处理,使得各维向量之间相互独立。预加重DFT、FFTLogMEL频率滤波器组DCT求倒谱 图2 MFCC参数提取流程4 、矢量量化4.1 概念矢量量化(Vector Quantization)是一种重要的信号压缩方法。矢量量化主要适用于小词汇量、孤

33、立词的语音识别。其过程是:将语音信号波形的k个样点的每一帧,或有k个参数的每一参数帧,构成k维空间中的一个矢量,然后对矢量进行量化。量化时,将k维无限空间划分为M个区域边界,然后将输入矢量与这些边界进行比较,并被量化为“距离”最小的区域边界的中心矢量值。矢量量化器的设计就是从大量信号样本中训练出好的码书,从实际效果出发寻找到好的失真测度定义公式,设计出最佳的矢量量化系统,用最少的搜索和计算失真的运算量,实现最大可能的平均信噪比。失真测度主要有均方误差(即欧氏距离)、加权的均方误差、ltakura-Saito谱失真测度、似然比失真测度等。初始码书的生成可以是随机选取、分裂生成法、乘积码书法。在选

34、定了失真测度和初始码书后,就用LBG算法,对初始码书进行迭代优化,一直到系统性能满足要求或不再有明显的改进为止。核心思想可以这样理解:如果一个码书是为某一特定的信源而优化设计的,那么由这一信息源产生的信号与该码书的平均量化失真就应小于其它信息的信号与该码书的平均量化失真,也就是说编码器本身存在区分能力。VQ是将若干个幅度连续取值的时域采样信号分成一组,即构成矢量,然后用若干离散的数字值(称为标号)来表示各种矢量。一个VQ编码器(或译码器),往往拥有一个或多个由具有代表意义的矢量组成的集合,称为“码本”,其中每个矢量称为“码矢量”,或称为“码字”VQ的原理用在语音识别中,训练用的语音特征通过聚类

35、的方法形成码书。识别时,VQ编码器将待识别语音的特征矢量与码书中的每个矢量进行是真测度运算,最小的是真测度所对应的码字的标号代替输入矢量,这就完成了VQ编码的任务。 VQ编码器端只需将标号对应的码字输出即可。这个输出矢量并非编码器的输入矢量,而是与输入矢量不同的码字,因此,VQ会带来一定的量化误差。4.2 码本设计目前训练码书时最基本也是最常用(chn yn)的算法是LBG算法,反复迭代、逐步优化。我们(w men)采用以欧氏距离计算两个矢量之间的畸变:1)存储(cn ch)形成VQ码本所需全部输入矢量x的集合S.2)设置迭代算法的最大迭代次数L.3)设置相对失真改进量4)设置M个初始码字Y1

36、,Y2,YM5)设置总失真6)设置迭代初值m=1;7)根据最近邻准则,将s分成M个子集S1,S2,.,SM,即当X属于S1时,下式成立:d(X,Y1)=d(X,Yi), i =M其中d (x, Y)表示X和Y的欧氏距离。这种划分方法称为最邻近划分。8)计算总失真初始码字的选择也是码本设计中一个重要问题。LBG算法是一个使总畸变单调下降的算法。一个VQ系统的总畸变是它的M个码字决定的状态空间点的函数。大部分情况下,这个函数往往都是凸函数,因此LBG算法仅仅只能收敛到某个局部最优点上,而收敛不到全局最优点上。具体收敛到哪一个局部最优点,就由M个初始码字决定。初始码字的选择有很多种方法。最简单的是随

37、机选取,但是这种方法的效果并不好,因为这些被选中码字在集合中的分布可能很不均匀,偶然性很大。一般采取的方法是分裂法。其基本步骤为:第一步先求得s中全体x的质心x1;,然后在s中找一个与此质心畸变最大的矢量x2,以此两个矢量x1,x2;以x1,x2为基准作最近邻划分,形成两个子集。然后对着两个子集分别按同样的方法处理就可以得到四个子集。以此类推,经过B次分裂后,便可以得到2的B次方个子集,这M个子集的质心便是初始码字。码本生成程序:从输入信号中经过预加重、分帧、加窗等处理计算出短时能量,然后经过离散傅立叶变换DFT)得到线性频谱,通过Mel频率滤波器组得到Mel频谱,并通过对数能量的处理得到对数

38、频谱,再经过离散余弦变换到倒谱频谱域,提取Met频率倒谱系数(MFCC参数),最后保存MFCC参数的双精度数组;并从MFCC的结果建立程序中用到的点数组坐标,一个单词一个点序列:根据这些点为每个单词建立一个VQ码本;此程序将输入语音信号转换成一系列聚类质心点和对应的下标。4.3 码本搜索当一个待量化矢量输入vQ编码器时,vQ编码器需要从码本中搜索出与输入矢量最接近的码字。如何快速而准确地找到这个码字,就是研究搜索策略的意义所在。最简单的方法是比较所有码字和输入矢量的距离。距离最小的便是目标码字,这种搜索方法称为“全搜索”,这种方法流程简单,但是当码本容量很大时全搜索方法的计算量很大。优化的方法

39、主要有两种:改变码本结构和改进搜索算法,这两种算法会节省一定的计算量,但是性能上跟全搜索算法相比有一定程度的下降,由于本次实验的设计目的是进行孤立词识别,选择全搜索算法。4.4 拒识采用一个平均失真测度来判定测试语音是否为训练人。设置置信区间Dmin(i)/K,Dmax(i)/K,若输入语音的失真测度30%不在置信区间,则拒识。5实验输入语音“前”,“后”,“左”,“右”,“东”,“南”,“西”,“北”,“上”,“下”,一遍用来训练语音模版,一遍用来测试。Matlab仿真结果:这是一个简易语音识别系统,请保证(bozhng)已经将您的语音保存在相应文件夹中!正在(zhngzi)训练您的语音模版

40、指令,请稍后.语音指令训练(xnlin)成功,恭喜!正在处理您的测试语音指令,请稍后.对训练过的语音进行测试:正在匹配您的语音指令,请稍后.您输入的语音指令为:前; 识别结果为:前对训练过的语音进行测试:正在匹配您的语音指令,请稍后.您输入的语音指令为:后; 识别结果为:后对训练过的语音进行测试:正在匹配您的语音指令,请稍后.您输入的语音指令为:左; 识别结果为:左对训练过的语音进行测试:正在匹配您的语音指令,请稍后.您输入的语音指令为:右; 识别结果为:右对训练过的语音进行测试:正在匹配您的语音指令,请稍后.您输入的语音指令为:东; 识别结果为:东对训练过的语音进行测试:正在匹配您的语音指令

41、,请稍后.您输入的语音指令为:南; 识别结果为:南对训练过的语音进行测试:正在匹配您的语音指令,请稍后.您输入的语音指令为:西; 识别结果为:西对训练过的语音进行测试:正在匹配您的语音指令,请稍后.您输入的语音指令为:北; 识别结果为:北对训练过的语音进行测试:正在匹配您的语音指令,请稍后.您输入的语音指令为:上; 识别结果为:上对训练过的语音进行测试:正在匹配您的语音指令,请稍后.您输入的语音指令为:下; 识别结果为:下统计结果如下:特征参数正确词/词数(女)正确词/词数(男)MFCC10/1010/10 表1 训练人识别统计结果如表1所示,用MFCC系数作为特征矢量,对于训练人它的识别率可

42、以达到100%。同时,我们又对非训练人进行测试。没有加拒识条件:特征参数正确词/词数(女)MFCC4/10增加拒识条件(tiojin):实验结果对已经训练过的语音(yyn)进行测试;正在处理您的测试(csh)语音指令,请稍后.正在匹配您的语音指令,请稍后.您输入的语音指令为:前; 识别结果为:前正在匹配您的语音指令,请稍后.您输入的语音指令为:后; 识别结果为:后正在匹配您的语音指令,请稍后.您输入的语音指令为:左; 识别结果为:左正在匹配您的语音指令,请稍后.您输入的语音指令为:右; 识别结果为:右正在匹配您的语音指令,请稍后.您输入的语音指令为:东; 识别结果为:东正在匹配您的语音指令,请

43、稍后.您输入的语音指令为:南; 识别结果为:南正在匹配您的语音指令,请稍后.您输入的语音指令为:西; 识别结果为:西正在匹配您的语音指令,请稍后.您输入的语音无效!正在匹配您的语音指令,请稍后.您输入的语音无效!正在匹配您的语音指令,请稍后.您输入的语音无效!正在匹配您的语音指令,请稍后.您输入的语音无效!对没有训练过的语音进行测试:正在处理您的测试语音指令,请稍后.正在匹配您的语音指令,请稍后.您输入的语音无效!正在匹配您的语音指令,请稍后.您输入的语音无效!正在匹配您的语音指令,请稍后.您输入的语音无效!正在匹配您的语音指令,请稍后.您输入的语音无效!正在匹配您的语音指令,请稍后.您输入的

44、语音无效!正在匹配您的语音指令,请稍后.您输入的语音无效!正在匹配您的语音指令,请稍后.您输入的语音无效!正在匹配您的语音指令,请稍后.您输入的语音无效!正在匹配您的语音指令,请稍后.您输入(shr)的语音无效!正在(zhngzi)匹配您的语音指令,请稍后.您输入的语音(yyn)无效!特征参数(正确词/词数)训练人 (拒识/词数)非训练人MFCC系数7/1010/10若增加拒识条件,对于非训练人,拒识率能达到100%,但降低了训练人语音的识别率,为70%,说明本系统存在问题,需要改进的空间还很大。尤其是失真测度,拒识条件等还需要改进。6程序(部分)1、mfcc.mfunction ccc =

45、mfcc(x)bank=melbankm(24,256,8000,0,0.5,m);bank=full(bank);bank=bank/max(bank(:); for k=1:12 n=0:23; dctcoef(k,:)=cos(2*n+1)*k*pi/(2*24);end w = 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);for i=1:size(xx,1) y = xx(i,:); s = y .* hamming(256

46、); t = abs(fft(s); t = t.2; c1=dctcoef * log(bank * t(1:129); c2 = c1.*w; m(i,:)=c2;end dtm = zeros(size(m);for i=3:size(m,1)-2 dtm(i,:) = -2*m(i-2,:) - m(i-1,:) + m(i+1,:) + 2*m(i+2,:);enddtm = dtm / 3; ccc = m dtm;ccc = ccc(3:size(m,1)-2,:);2、vad.mfunction x1,x2 = vad(x)x = double(x);x = x / max(a

47、bs(x); FrameLen = 240;FrameInc = 80; amp1 = 10;amp2 = 2;zcr1 = 10;zcr2 = 5; maxsilence = 8; % 6*10ms = 30msminlen = 15; % 15*10ms = 150msstatus = 0;count = 0;silence = 0; tmp1 = enframe(x(1:end-1), FrameLen, FrameInc);tmp2 = enframe(x(2:end) , FrameLen, FrameInc);signs = (tmp1.*tmp2)0.02;zcr = sum(s

48、igns.*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;for n=1:length(zcr) goto = 0; switch status case 0,1 if amp(n) amp1 x1 = max(n-count-1,1); status = 2; silence = 0; count = count + 1; elsei

49、f amp(n) amp2 | . zcr(n) zcr2 status = 1; count = count + 1; else status = 0; count = 0; end case 2, if amp(n) amp2 | . zcr(n) zcr2 count = count + 1; else silence = silence+1; if silence maxsilence count = count + 1; elseif count minlen status = 0; silence = 0; count = 0; else status = 3; end end c

50、ase 3, break; endend count = count-silence/2;x2 = x1 + count -1; 3、codebook.m%clear;function xchushi= codebook(m)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=sz

51、hixin(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(

52、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;while(k1 dela=abs(sumd(k)-sumd(k-1)/sumd(k);end k=k+1;

53、chushi=xchushi;end return 4、testvq.m clear;disp(这是一个简易语音识别系统,请保证已经(y jing)将您的语音保存在相应文件夹中)disp(正在训练您的语音模版指令(zhlng),请稍后.)for i=1:10 fname = sprintf(D:matlabworkdtw1海儿的声音(shngyn)%da.wav,i-1); x = wavread(fname); x1 x2 = vad(x); m = mfcc(x); m = m(x1:x2-5,:); ref(i).code=codebook(m);enddisp(语音指令训练成功,恭喜!

54、) disp(正在测试您的测试语音指令,请稍后.)for i=1:10fname = sprintf(D:matlabworkdtw1海儿的声音%db.wav,i-1); x = wavread(fname); x1 x2 = vad(x); mn = mfcc(x); mn = mn(x1:x2-5,:); %mn = mn(x1:x2,:) test(i).mfcc = mn;endsumsumdmax=0;sumsumdmin=0;disp(对训练过的语音进行测试)for w=1:10 sumd=zeros(1,10); a,b=size(test(w).mfcc);for i=1:10

55、 for p=1:a for j=1:16 d(j)=odistan(test(w).mfcc(p,:),ref(i).code(j,:); end dmin=min(d); sumd(i)=sumd(i)+dmin;%endendsumdmin=min(sumd)/a;sumdmin1=min(sumd);sumdmax(w)=max(sumd)/a;sumsumdmin=sumdmin+sumsumdmax;sumsumdmax=sumdmax(w)+sumsumdmax; disp(正在匹配(ppi)您的语音指令,请稍后.)for i=1:10 if (sumd(i)=sumdmin1)

56、 switch (i) case 1 fprintf(您输入(shr)的语音指令为:%s; 识别(shbi)结果为%sn,前, 前); case 2 fprintf(您输入的语音指令为:%s; 识别结果为%sn,后, 后); case 3 fprintf(您输入的语音指令为:%s; 识别结果为%sn,左, 左); case 4 fprintf(您输入的语音指令为:%s; 识别结果为%sn,右, 右); case 5 fprintf(您输入的语音指令为:%s; 识别结果为%sn,东, 东); case 6 fprintf(您输入的语音指令为:%s; 识别结果为%sn,南, 南); case 7

57、fprintf(您输入的语音指令为:%s; 识别结果为%sn,西, 西); case 8 fprintf(您输入的语音指令为:%s; 识别结果为%sn,北, 北); case 9 fprintf(您输入的语音指令为:%s; 识别结果为%sn,上, 上); case 10 fprintf(您输入的语音指令为:%s; 识别结果为%sn,下, 下); otherwise fprintf(error); end endendenddelamin=sumsumdmin/10;delamax=sumsumdmax/10; disp(对没有(mi yu)训练过的语音进行测试) disp(正在测试你的语音(y

58、yn),请稍后.)for i=1:10fname = sprintf(D:matlabworkdtw1%db.wav,i-1); x = wavread(fname); x1 x2 = vad(x); mn = mfcc(x); mn = mn(x1:x2-5,:); %mn = mn(x1:x2,:) test(i).mfcc = mn;end for w=1:10 sumd=zeros(1,10); a,b=size(test(w).mfcc);for i=1:10 for p=1:a for j=1:16 d(j)=odistan(test(w).mfcc(p,:),ref(i).cod

59、e(j,:); end dmin=min(d); sumd(i)=sumd(i)+dmin;%endendsumdmin=min(sumd); z=0;for i=1:10 if (sumd(i)/a)delamax)| z=z+1; endend disp(正在(zhngzi)匹配您的语音指令,请稍后.) if z Question 2:画出原始语音(yyn)波形);t = 0:1/fs1:(length(s1) - 1)/fs1;plot(t, s1), axis(0, (length(s1) - 1)/fs1 -0.4 0.5);title(原始语音s1的波形);xlabel(时间/s)

60、;ylabel(幅度)pause close all%Question 3 (linear)disp( Question 3: 画出线性谱);M = 100;%当前(dngqin)帧数N = 256;%帧长frames = blockFrames(s1, fs1, M, N);%分帧t = N / 2;tm = length(s1) / fs1;subplot(121);imagesc(0 tm, 0 fs1/2, abs(frames(1:t, :).2), axis xy;title(能量(nngling)谱(M = 100, N = 256);xlabel(时间(shjin)/s);yl

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论