77范文网 - 专业文章范例文档资料分享平台

DTW语音识别算法(部分)

来源:网络收集 时间:2020-05-23 下载这篇文档 手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:或QQ: 处理(尽可能给您提供完整文档),感谢您的支持与谅解。点击这里给我发消息

附录2:训练函数:train.m disp('正在生成训练参数??'); for i=1:20

fname=sprintf('train\\\\D.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; end

disp('正在存储模板库??'); save 'mfcc.mat' ref; disp('存储完毕')

附录3:测试函数:dtwtest.m clear;close all;clc;

disp('正在导入参考模板参数...'); load mfcc.mat;

disp('正在计算测试模板的参数...') for i=0:3

fname = sprintf('test\\\\?.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).mfcc=cc; end

disp('正在进行模板匹配...')

dist = zeros(1,20); for i=1:4

for j=1:20

dist(i,j) = dtw(test(i).mfcc, ref(j).mfcc); end

end

disp('正在计算匹配结果...') for i=1:4

[d,j] = min(dist(i,:)); if (j>=1 && j<=5)

fprintf('测试模板?.wav 的识别结果为:前进\\n',i-1); end

if (j>= 6 && j<=10)

fprintf('测试模板?.wav 的识别结果为:停止\\n',i-1); end

if (j>=11 && j<=15)

fprintf('测试模板?.wav 的识别结果为:左转\\n',i-1); end

if (j>=16 && j<=20)

fprintf('测试模板?.wav 的识别结果为:右转\\n',i-1);

end

end close all;

附录4:特征提取函数:vad_m.m function [StartPoint,EndPoint]=vad(k,fs) %% [StartPoint,EndPoint]=vad(k,fs)

%% 语音信号端点检测程序,k为语音信号, %% fs为其采样频率,程序绘制出语音信号 %% 相关波形图并返回起止端点所对帧号

close all

% 幅度归一化到[-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等长 if ol

output=[output; zeros(N-ol,1)]; end

snr2=SNR_singlech(k,output); % 计算维纳滤波后的信噪比 snr=snr2-snr1;

fprintf('snr1=%5.4f snr2=%5.4f snr=%5.4f\\n',snr1,snr2,snr); subplot 311; plot(t,k,'k'); grid; axis tight; title('纯语音波形'); 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),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*fs); 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.*FrameTemp2)<0; diffs=abs(FrameTemp1-FrameTemp2)>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(zcr)]); 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');

% ------------------------------ % 设置门限 %------------------------------ 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 case{0,1}

if amp(n)>AmpHigh | zcr(n)>ZcrHigh StartPoint=n-HoldTime; Status=2;

HoldTime=HoldTime+1; SilenceTime=0;

elseif amp(n)>AmpLow | zcr(n)>ZcrLow

百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说教育文库DTW语音识别算法(部分)在线全文阅读。

DTW语音识别算法(部分).doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印 下载失败或者文档不完整,请联系客服人员解决!
本文链接:https://www.77cn.com.cn/wenku/jiaoyu/1069425.html(转载请注明文章来源)
Copyright © 2008-2022 免费范文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ: 邮箱:tiandhx2@hotmail.com
苏ICP备16052595号-18
× 注册会员免费下载(下载后可以自由复制和排版)
注册会员下载
全站内容免费自由复制
注册会员下载
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: