DTW语音识别算法部分_精品文档Word文档格式.docx
- 文档编号:13874892
- 上传时间:2022-10-14
- 格式:DOCX
- 页数:10
- 大小:17.15KB
DTW语音识别算法部分_精品文档Word文档格式.docx
《DTW语音识别算法部分_精品文档Word文档格式.docx》由会员分享,可在线阅读,更多相关《DTW语音识别算法部分_精品文档Word文档格式.docx(10页珍藏版)》请在冰豆网上搜索。
ref;
存储完毕'
)
附录3:
测试函数:
dtwtest.m
clear;
closeall;
clc;
正在导入参考模板参数...'
loadmfcc.mat;
正在计算测试模板的参数...'
fori=0:
3
fname=sprintf('
test\\%d1.wav'
test(i+1).StartPoint=StartPoint;
test(i+1).EndPoint=EndPoint;
test(i+1).mfcc=cc;
正在进行模板匹配...'
dist=zeros(1,20);
4
forj=1:
dist(i,j)=dtw(test(i).mfcc,ref(j).mfcc);
end
正在计算匹配结果...'
[d,j]=min(dist(i,:
));
if(j>
=1&
&
j<
=5)
fprintf('
测试模板%d1.wav的识别结果为:
前进\n'
i-1);
end
if(j>
=6&
=10)
停止\n'
=11&
=15)
左转\n'
=16&
=20)
右转\n'
end
附录4:
特征提取函数:
vad_m.m
function[StartPoint,EndPoint]=vad(k,fs)
%%[StartPoint,EndPoint]=vad(k,fs)
%%语音信号端点检测程序,k为语音信号,
%%fs为其采样频率,程序绘制出语音信号
%%相关波形图并返回起止端点所对帧号
closeall
%幅度归一化到[-1,1]
k=double(k);
k=k./max(abs(k));
%------------------------------
%显示波形
SNR=5;
%设置SNR
signal=Gnoisegen(k,SNR);
%叠加噪声
snr1=SNR_singlech(k,signal);
%计算叠加噪声后的信噪比
N=length(k);
%信号长度
t=(0:
N-1)/fs;
%设置时间
IS=.25;
%设置IS
%调用WienerScalart96m_2函数做维纳滤波
output=WienerScalart96m_2(signal,fs,IS,0.12);
ol=length(output);
%把output补到与x等长
ifol<
N
output=[output;
zeros(N-ol,1)];
snr2=SNR_singlech(k,output);
%计算维纳滤波后的信噪比
snr=snr2-snr1;
fprintf('
snr1=%5.4fsnr2=%5.4fsnr=%5.4f\n'
snr1,snr2,snr);
subplot311;
plot(t,k,'
k'
grid;
axistight;
title('
纯语音波形'
ylabel('
幅值'
subplot312;
plot(t,signal,'
title(['
带噪语音信噪比='
num2str(SNR)'
dB'
]);
subplot313;
plot(t,output,'
grid;
ylim([-11]);
维纳滤波后波形'
xlabel('
时间/s'
显示原始波形图……'
t=0:
1/fs:
(length(k)-1)/fs;
%subplot(3,1,1);
plot(t,k);
axis([0,(length(k)-1)/fs,min(k),max(k)]);
语音信号波形'
xlabel('
Time:
s'
ylabel('
Amplitude(normalized)'
显示语音起始处放大波形图……'
t1=0.2:
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)]);
(II)“00.wav”语音起始处放大波形图'
显示语音结束处放大波形图……'
t1=0.4:
0.5;
k1=k(0.4*fs:
0.5*fs);
subplot(3,1,3);
axis([0.4,0.5,min(k),max(k)]);
(III)“00.wav”语音结束处放大波形图'
%计算短时过零率
k=output;
FrameLen=240;
FrameInc=80;
FrameTemp1=enframe(k(1:
end-1),FrameLen,FrameInc);
FrameTemp2=enframe(k(2:
end),FrameLen,FrameInc);
signs=(FrameTemp1.*FrameTemp2)<
0;
diffs=abs(FrameTemp1-FrameTemp2)>
0.01;
zcr=sum(signs.*diffs,2);
zcrm=multimidfilter(zcr,5);
figure,subplot(3,1,1);
(I)语音信号波形'
显示短时过零率……'
zcrInd=1:
length(zcrm);
plot(zcrInd,zcr);
axis([0,length(zcr),0,max(zcr)]);
(II)短时过零率'
Frame'
Zcr'
%计算短时能量
amp=sum(abs(enframe(filter([1-0.9375],1,k),FrameLen,FrameInc)),2);
ampm=multimidfilter(amp,5);
显示短时能量……'
ampInd=1:
length(ampm);
plot(ampInd,amp);
axis([0,length(amp),0,max(amp)]);
(III)短时能量'
Energy'
%------------------------------
%设置门限
设置门限……'
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;
%语音间隙时间
开始端点检测……'
forn=1:
length(zcr)
switchStatus
case{0,1}
ifamp(n)>
AmpHigh|zcr(n)>
ZcrHigh
StartPoint=n-HoldTime;
Status=2;
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- DTW 语音 识别 算法 部分 精品 文档