?? jiance.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 + -