DTW语音识别算法部分_精品文档Word文档格式.docx

上传人:b****2 文档编号:13874892 上传时间:2022-10-14 格式:DOCX 页数:10 大小:17.15KB
下载 相关 举报
DTW语音识别算法部分_精品文档Word文档格式.docx_第1页
第1页 / 共10页
DTW语音识别算法部分_精品文档Word文档格式.docx_第2页
第2页 / 共10页
DTW语音识别算法部分_精品文档Word文档格式.docx_第3页
第3页 / 共10页
DTW语音识别算法部分_精品文档Word文档格式.docx_第4页
第4页 / 共10页
DTW语音识别算法部分_精品文档Word文档格式.docx_第5页
第5页 / 共10页
点击查看更多>>
下载资源
资源描述

DTW语音识别算法部分_精品文档Word文档格式.docx

《DTW语音识别算法部分_精品文档Word文档格式.docx》由会员分享,可在线阅读,更多相关《DTW语音识别算法部分_精品文档Word文档格式.docx(10页珍藏版)》请在冰豆网上搜索。

DTW语音识别算法部分_精品文档Word文档格式.docx

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;

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 小学教育 > 数学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1