1、附录2:训练函数:train.mdisp(正在生成训练参数);for i=1:20 fname=sprintf(train%d0.wav,i); k,fs=audioread(fname); StartPoint,EndPoint=vad_m(k,fs); cc=mfcc(k); cc=cc(StartPoint-2:EndPoint-2,:); ref(i+1).StartPoint=StartPoint; ref(i+1).EndPoint=EndPoint; ref(i+1).mfcc=cc;enddisp(正在存储模板库);save mfcc.mat ref;disp(存储完毕)附录3
2、:测试函数:dtwtest.mclear;close all;clc;disp(正在导入参考模板参数.);load mfcc.mat;disp(正在计算测试模板的参数.)for i=0:3fname = sprintf(test%d1.wav,i); k,fs=audioread(fname); StartPoint,EndPoint=vad_m(k,fs); cc=mfcc(k); cc=cc(StartPoint-2:EndPoint-2,:); test(i+1).StartPoint=StartPoint; test(i+1).EndPoint=EndPoint; test(i+1).
3、mfcc=cc;enddisp(正在进行模板匹配.)dist = zeros(1,20);for i=1:4 for j=1:20 dist(i,j) = dtw(test(i).mfcc, ref(j).mfcc); endenddisp(正在计算匹配结果.)for i=1:4d,j = min(dist(i,:); if (j=1 & j= 6 & j=11 & j=16 & j=20) fprintf(测试模板%d1.wav 的识别结果为:右转n,i-1); endendclose all;附录4:特征提取函数:vad_m.mfunction StartPoint,EndPoint=va
4、d(k,fs)% StartPoint,EndPoint=vad(k,fs)% 语音信号端点检测程序,k为语音信号,% fs为其采样频率,程序绘制出语音信号% 相关波形图并返回起止端点所对帧号 close all% 幅度归一化到-1,1k=double(k);k=k./max(abs(k);%-% 显示波形%-SNR=5; % 设置SNRsignal=Gnoisegen(k,SNR); % 叠加噪声snr1=SNR_singlech(k,signal); % 计算叠加噪声后的信噪比N=length(k); % 信号长度t=(0:N-1)/fs; % 设置时间IS=.25; % 设置IS% 调用
5、WienerScalart96m_2函数做维纳滤波output=WienerScalart96m_2(signal,fs,IS,0.12);ol=length(output); % 把output补到与x等长if olN output=output; zeros(N-ol,1);endsnr2=SNR_singlech(k,output); % 计算维纳滤波后的信噪比snr=snr2-snr1;fprintf(snr1=%5.4f snr2=%5.4f snr=%5.4fn,snr1,snr2,snr);subplot 311; plot(t,k,k); grid; axis tight;ti
6、tle(纯语音波形); ylabel(幅值)subplot 312; plot(t,signal,k); grid; axis tight;title(带噪语音 信噪比= num2str(SNR) dB); ylabel(幅值)subplot 313; plot(t,output,k);grid; ylim(-1 1);title(维纳滤波后波形); ylabel(幅值); xlabel(时间/s);disp(显示原始波形图);t=0:1/fs:(length(k)-1)/fs;% subplot(3,1,1);plot(t,k);axis(0,(length(k)-1)/fs,min(k),
7、max(k);title(语音信号波形);xlabel(Time:s);ylabel(Amplitude(normalized);disp(显示语音起始处放大波形图);t1=0.2:1/fs:0.3;k1=k(0.2*fs:0.3*fs);subplot(3,1,2);plot(t1,k1);axis(0.2,0.3,min(k),max(k);title(II) “00.wav”语音起始处放大波形图);xlabel(Time:s);ylabel(Amplitude(normalized);disp(显示语音结束处放大波形图);t1=0.4:1/fs:0.5;k1=k(0.4*fs:0.5*f
8、s);subplot(3,1,3);plot(t1,k1);axis(0.4,0.5,min(k),max(k);title(III) “00.wav”语音结束处放大波形图);xlabel(Time:s);ylabel(Amplitude(normalized);%-% 计算短时过零率%-k=output;FrameLen=240;FrameInc=80;FrameTemp1=enframe(k(1:end-1),FrameLen,FrameInc);FrameTemp2=enframe(k(2:end),FrameLen,FrameInc);signs=(FrameTemp1.*FrameT
9、emp2)0.01;zcr=sum(signs.*diffs,2);zcrm=multimidfilter(zcr,5);disp(显示原始波形图);figure,subplot(3,1,1);plot(t,k);axis(0,(length(k)-1)/fs,min(k),max(k);title(I) 语音信号波形);xlabel(Time:s);ylabel(Amplitude(normalized);disp(显示短时过零率)zcrInd=1:length(zcrm);subplot(3,1,2);plot(zcrInd,zcr);axis(0,length(zcr),0,max(zc
10、r);title(II) 短时过零率);xlabel(Frame);ylabel(Zcr);%-% 计算短时能量%-amp=sum(abs(enframe(filter(1 -0.9375, 1, k), FrameLen, FrameInc), 2);ampm=multimidfilter(amp,5);disp(显示短时能量)ampInd=1:length(ampm);subplot(3,1,3);plot(ampInd,amp);axis(0,length(amp),0,max(amp);title(III) 短时能量);xlabel(Frame);ylabel(Energy);% -%
11、 设置门限%-disp(设置门限);ZcrLow=max(round(mean(zcr)*0.1),3); %过零率低门限ZcrHigh=max(round(max(zcr)*0.1),5); %过零率高门限AmpLow=min(min(amp)*10,mean(amp)*0.2,max(amp)*0.1); %能量低门限AmpHigh=max(min(amp)*10,mean(amp)*0.2,max(amp)*0.1); %能量高门限%-% 端点检测%-MaxSilence=30; %最长语音间隙时间MinAudio=15; %最短语音时间Status=0; %状态:0静音段,1过渡段,2语音段,3结束段HoldTime=0; %语音持续时间SilenceTime=0; %语音间隙时间disp(开始端点检测);for n=1:length(zcr) switch Status case0,1 if amp(n)AmpHigh | zcr(n)ZcrHigh StartPoint=n-HoldTime; Status=2;
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1