⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 jiyinzhouqi.m

📁 利用自相关函数估计基音周期
💻 M
字号:

function jiyinzhouqi(filename,shift)
%短时自相关分析
%filename语音文件*.wav
%zhouqi基音周期

[signal,fs]=wavread(filename);
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 n2<length(signal)            %防止溢出
     data=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)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -