文档库 最新最全的文档下载
当前位置:文档库 › 语音基因周期检测matlab程序

语音基因周期检测matlab程序

function nmax=find_maxn(r)
%lile
%June 1th
%寻找峰值最大的n值及基音周期
%r,自相关序列
%maxn,为峰值最大的n
zer=find(r==0); %找第一个零点如果存在
jiaocha=0; %找第一近零点
ii=1;
while (jiaocha<=0)
if(r(ii)>0 && r(ii+1)<0 && (ii+1)jiaocha=ii;
end

ii=ii+1;
if ii==length(r) %没有找到符合要求的点
jiaocha=1;
end
end

if length(zer)>0 %检查是否存在零点
if zer(1)jiaocha=zer(1);
end
end

r(1:jiaocha)=0; %祛除影响
maxn=max(r); %找最大值
temp=find(r==maxn);%返回第一个最大值
nmax=temp(1);




function jiyinzhouqi(filename,shift)
%短时自相关分析
%filename语音文件*.wav
%zhouqi基音周期
shift=10;
[signal,fs]=wavread('f:/mywork/1.wav');
shift=round(fs*shift); %帧移
n1=fix(fs*0.97)+1; %分析起点970ms,帧长30ms
n2=fix(fs*1)+1;
ii=1;
for ii=1:(length(signal)-n1)/shift %分析次数
if n2data=signal(n1:n2);
N=n2-n1+1;
R=zeros(1,N); %基音周期(n)多次分析数组
for k=1:N-1 %求自相关序列
for jj=1:N-k
R(k)=R(k)+data(jj)*data(jj+k);
end
end
value(ii)=find_maxn(R); %调用基音周期(n)分析函数
n1=n1+shift; %移动帧
n2=n2+shift;
end
end
%figure(3)
%plot(R);
%axis([0,1000 -300 300])
figure(1)
stem(value);
axis([0 length(value) 0 1000])
len =length(value); %基音周期(n)多次分析数组长度
aver=mean(value);
index=find(abs((value-aver))>aver/5);
value(index)=0; %去除大野点的影响
len=len-length(index);
for jj=1:3:len/3 %中值平滑,滑动窗口宽度3,精度为中值1/4(剔除野点)
average=(value(jj)+value(jj+1)+value(jj+2))/3;
for kk=1:3
if abs((value(jj-1+kk))-average)>average/4
value(jj-1+kk)=0; %将野点置零,同时数组长度减一
len=len-1;
end
end
end

figure(2)
stem(value);
axis([0 length(value) 0 max(value)])
Tp=sum(value)/len/fs %求基音周期(Tp)


相关文档
相关文档 最新文档