我是靠谱客的博主 认真飞机,最近开发中收集的这篇文章主要介绍基于matlab的语音信号加窗,[转载]基于Matlab的语音识别技术的应用,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

语音识别技术的应用是2013年5月份参加Mathorcup数学建模竞赛的题目,整体部分代码,如下

%语音信号采集

n=5*8000; %采样总点数40000,采样频率8KHz,单声道,16位采样精度

fs=8000;

ch=1;

y=wavrecord(n,fs,ch,'double') plot(y);%语音信号波形

wavwrite(y,'实验1.wav') %把分析样本保存为"实验1.wav"文件

%语音信号波形

[x,fs,nbit]=wavread('实验1.wav');

plot(x);

titile('原始语音波形图')

xlabel('time')

ylabel('amplitude')

%语音信号加帧

[x,fs,nbit]=wavread('实验1.wav');

len=200; %指定帧长

inc=100; %指定帧移

y=enframe(x,len,inc); %分帧函数,x为输入语音信号

figure;

subplot(2,1,1),plot(x)

title('语音信号分帧前')

xlabel('time')

ylabel('amplitude')

grid

subplot(2,1,2),plot(y)

title('语音信号分帧后')

xlabel('time')

ylabel('amplitude')

grid

%利用window函数设计窗口为120的汉明窗

N=120; %窗口长度120

w = window('hamming',N);

wvtool(w) %利用wvtool函数观察其时域波形图及频谱特性

%语音信号分帧加窗

[x,fs,nbits]=wavread('实验1.wav');

x1=enframe(x,200,100);

x2=enframe(x,hamming(200),100);

subplot(2,1,1),plot(x1)

title('分帧后未添加汉明窗波形图')

grid

subplot(2,1,2),plot(x2)

title('分帧且添加汉明窗后波形图')

grid

%语音信号预加重

[x,fs,nbit]=wavread('实验1.wav');

len=200;

inc=100;

y=enframe(x,len,inc);

%语音信号通过一个高通滤波器1-0.935^(-1)

z=filter([1-0.9375],1,y);

figure(2)

subplot(2,1,1),plot(y) %加重前

title('语音信号预加重前');

grid

subplot(2,1,2),plot(z) %加重后

title('语音信号预加重后');

grid

%语音信号端点检测

%读取文件名为实验1的wav文件

[y,fs,nbits]=wavread('实验1.wav');

%设置参数

FrameLen=200; %帧长200

FrameInc=100; %帧移100

amp1=10; %初始短时能量高限制

amp2=2; %初始短时能量最低限制

zcr1=10; %初时过零率最高限制

zcr2=5; %初始过零率最低限制

maxsilence=8;

%语音信息段中最大的静音长度;

%如果语音信息段中的静音帧数没有超过最大静音长度,那么我们认为语音还没有结束;

%如果超过了改值,那么对语音信息长度count进行判断,如果countminlen,那么认为语音段结束了。

minlen=15;%语音段的最短长度,若语音段长度小于此值,则认为其为一段噪音

status=0;%初始化语音段状态为0;

count=0;%初始化语音长度为0;

silence=0;%初始化静音段长度为0;

%计算过零率

tmp1=enframe(y(1:end-1),FrameLen,FrameInc); %对语音信号分帧处理

tmp2=enframe(y(2:end),FrameLen,FrameInc);

signs=(tmp1.*tmp2)<0; %过零率公式

diffs=(tmp1 -tmp2)>0.02;

zcr=sum(signs.*diffs, 2);

%计算短时能量

amp=sum(abs(enframe(filter([1

-0.9375],1,y),FrameLen,FrameInc)),2); %先预加重处理,通过高通滤波器,然后进一步计算。

%调整能量门限

amp1 = min(amp1, max(amp)/4);

amp2 = min(amp2, max(amp)/8);

%进行端点检测

y1 = 0;

y2 = 0;

for n=1:length(zcr)

goto = 0;

switch status

case

{0,1} % 0=静音, =可能开始

if amp(n) >

amp1 % 确信进入语音段

x1 = max(n-count-1,1);

status = 2;

silence = 0;

count = count + 1;

elseif amp(n) > amp2 | ... % 可能处于语音段

zcr(n) > zcr2

status = 1;

count = count + 1;

else % 静音状态

status = 0;

count = 0;

end

case

2, % 2 = 语音段

if amp(n) > amp2 |

... % 保持在语音段

zcr(n) > zcr2

count = count + 1;

else

最后

以上就是认真飞机为你收集整理的基于matlab的语音信号加窗,[转载]基于Matlab的语音识别技术的应用的全部内容,希望文章能够帮你解决基于matlab的语音信号加窗,[转载]基于Matlab的语音识别技术的应用所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(54)

评论列表共有 0 条评论

立即
投稿
返回
顶部