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

📄 jiance.m

📁 speechtimefre 语音时域处理
💻 M
字号:
% function [x1,x2]=jiance(x)


[x,Fs,bits] = wavread('3')

x=double(x);

framelen=300;
frameinc=100;%设定帧长为300帧移为100
hang=334;%计算出分帧后语音矩阵的行数


temp1=enframe(x,framelen,frameinc);%将分帧后的数据存入temp1数组矩阵
for i=1:hang;
 j=1:100;
    z(i)=max(temp1(i,j));%求第i帧前100个元素最大值并存入z(i)数组中
end

for i=1:hang;
 j=framelen-100:framelen;
    a(i)=max(temp1(i,j));
end
i=1:hang;
c(i)=min(z(i),a(i))*0.68;%计算每帧的门限值
for i=1:hang;
 for j=1:framelen;
    if temp1(i,j)>c(i)
        y(i,j)=temp1(i,j)-c(i);
    else if abs(temp1(i,j))<=c(i)
            y(i,j)=0;
        else if temp1(i,j)<c(i)*(-1)
                y(i,j)=temp1(i,j)+c(i);
            end 
        end
    end
end
end
for i=1:hang;
if (j>=0)&(j<=20)
    y(i,j)=0;
end
end   %将0到20点置零
for i=1:hang;
   for j=301:450;
       y(i,j)=0;  %将300点到450点的值置零
       
   end
end


    
for i=1:hang;
   for j=1:framelen;
    if y(i,j)>0
        y1(i,j)=1;
    else if y(i,j)==0;
            y1(i,j)=0;
        else if y(i,j)<0
                y1(i,j)=-1;
            end
        end
    end
end
end
for i=1:hang;
if (j>=0)&(j<=20)
    y1(i,j)=0;
end
end   %将0到20点置零
for i=1:hang;
   for j=301:450;
       y1(i,j)=0;  %将300点到450点的值置零
   end
end
       
       


for i=1:hang;
    for k=1:150;
    n=21:300;
    R(i,k)=sum(y(i,n).*y1(i,n+k));
end
end
%计算每一帧y与y1的互相关值
for i=1:hang;
    k=20:150
Rmax(i)=max(R(i,k));%计算每帧的Rmax值
end
for i=1:hang;
    k=20:150;
    [r,kmax(i)]=max(R(i,k));%找出每帧Rmax对应的k值kmax
        end
  
    
            

for i=1:hang;
    if Rmax(i)<0.25*R(i,1)
        P(i)=0;
    else P(i)=kmax(i);
    end
end

plot(P);
xlabel('帧数')
ylabel('pitch period')
title('基音周期计算结果')





                


⌨️ 快捷键说明

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