语音信号特征提取程序设计代码文档格式.docx

上传人:b****3 文档编号:15413630 上传时间:2022-10-30 格式:DOCX 页数:5 大小:13.57KB
下载 相关 举报
语音信号特征提取程序设计代码文档格式.docx_第1页
第1页 / 共5页
语音信号特征提取程序设计代码文档格式.docx_第2页
第2页 / 共5页
语音信号特征提取程序设计代码文档格式.docx_第3页
第3页 / 共5页
语音信号特征提取程序设计代码文档格式.docx_第4页
第4页 / 共5页
语音信号特征提取程序设计代码文档格式.docx_第5页
第5页 / 共5页
亲,该文档总共5页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

语音信号特征提取程序设计代码文档格式.docx

《语音信号特征提取程序设计代码文档格式.docx》由会员分享,可在线阅读,更多相关《语音信号特征提取程序设计代码文档格式.docx(5页珍藏版)》请在冰豆网上搜索。

语音信号特征提取程序设计代码文档格式.docx

N=128;

n=0:

N-1;

y=fft(x);

mag=abs(y);

f=(0:

length(y)-1)'

*fs/length(y);

%进行对应的频率转换

subplot(212);

plot(f,mag);

原始信号频谱图'

频率(Hz)'

y=wavread('

%预加重

figure();

原始波形(幅值)'

xx=double(y);

plot(xx);

预加重波形(幅值)'

%对指定帧位置进行加窗处理

Q=y'

;

N=256;

%窗长

Hamm=hamming(N);

%加窗(汉明窗)

Rect=rectwin(N);

%加窗(矩形窗)

frame=60;

%需要处理的帧位置

M=Q(((frame-1)*(N/2)+1):

((frame-1)*(N/2)+N));

Frame=M.*Hamm'

%加窗后的语音帧

frame=M.*Rect'

plot(Frame);

汉明窗'

plot(frame);

矩形窗'

%语音信号分帧

plot(y);

原始'

y=enframe(y,256,80);

帧数'

分帧'

%端点检测

[x1,x2]=vad(x);

%调用函数vad实现

%浊音,取13270--13510个点

%短时自相关函数

temp=y(13271:

13510);

Rn1=zeros(1,240);

fornn=1:

240

forii=1:

240-nn

Rn1(nn)=Rn1(nn)+temp(ii)*temp(nn+ii);

end

end

figure(6);

jj=1:

240;

plot(jj,Rn1,'

b'

浊音自相关函数'

短时自相关函数'

%清音,取12120--12360个点

temp=y(12121:

12360);

Rn2=zeros(1,240);

Rn2(nn)=Rn2(nn)+temp(ii)*temp(nn+ii);

plot(jj,Rn2,'

清音自相关函数'

分帧功能子程序:

functionf=enframe(x,win,inc)

%F=ENFRAME(X,LEN)splitsthevectorX(:

)upinto

%frames.EachframeisoflengthLENandoccupies

%onerowoftheoutputmatrix.ThelastfewframesofX

%willbeignoredifitslengthisnotdivisiblebyLEN.

%ItisanerrorifXisshorterthanLEN.

nx=length(x(:

));

nwin=length(win);

if(nwin==1)

len=win;

else

len=nwin;

end

if(nargin<

3)

inc=len;

nf=fix((nx-len+inc)/inc);

f=zeros(nf,len);

indf=inc*(0:

(nf-1)).'

inds=(1:

len);

f(:

)=x(indf(:

ones(1,len))+inds(ones(nf,1),:

if(nwin>

1)

w=win(:

)'

f=f.*w(ones(nf,1),:

End

选端点功能子程序:

function[x1,x2]=vad(x)

%[x]=audioread('

1.wav'

%幅度归一化到[-1,1]

x=double(x);

x=x/max(abs(x));

%常数设置

FrameLen=240;

FrameInc=80;

amp1=10;

amp2=2;

zcr1=10;

zcr2=5;

maxsilence=8;

%6*10ms=30ms

minlen=15;

%15*10ms=150ms

status=0;

count=0;

silence=0;

%计算过零率

tmp1=enframe(x(1:

end-1),FrameLen,FrameInc);

tmp2=enframe(x(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,x),FrameLen,FrameInc)),2);

%调整能量门限

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

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

%开始端点检测

x1=0;

x2=0;

forn=1:

length(zcr)

goto=0;

switchstatus

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

ifamp(n)>

amp1%确信进入语音段

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

status=2;

silence=0;

count=count+1;

elseifamp(n)>

amp2|...%可能处于语音段

zcr(n)>

zcr2

status=1;

count=count+1;

else%静音状态

status=0;

count=0;

end

case2,%2=语音段

amp2|...%保持在语音段

zcr(n)>

count=count+1;

else%语音将结束

silence=silence+1;

ifsilence<

maxsilence%静音还不够长,尚未结束

count=count+1;

elseifcount<

minlen%语音长度太短,认为是噪声

status=0;

silence=0;

count=0;

else%语音结束

status=3;

end

case3,

break;

end

end

count=count-silence/2;

x2=x1+count-1;

subplot(311)

plot(x)

axis([1length(x)-11])

Speech'

line([x1*FrameIncx1*FrameInc],[-11],'

Color'

'

red'

line([x2*FrameIncx2*FrameInc],[-11],'

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

当前位置:首页 > 解决方案 > 工作计划

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

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