📄 基音变化率4.txt
字号:
clear all
for h=1:20
fname=sprintf('D:\\study\\音频采样\\noise22050hz\\%d.wav',h);
x=wavread(fname);
x=x(:,1);
[c,l]=wavedec(x,3,'db4');
ca=appcoef(c,l,'db4',3);%近似系数
x=ca;
enframex=enframe(x,128,64);%对信号x分帧处理,每帧有128个采样点,相邻帧之间有50%的叠加率
[row,col]=size(enframex);%返回行,列,每一行代表一帧,每一列表示1到128个采样点
framelen=col;
frameinc=64;
hang=row;%计算出分帧后语音矩阵的行数
temp1=enframe(x,framelen,frameinc);%将分帧后的数据存入temp1数组矩阵
for i=1:hang;
j=1:frameinc;
z(i)=max(temp1(i,j));%求第i帧前frameinc个元素最大值并存入z(i)数组中
end
for i=1:hang;
j=framelen-frameinc: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=framelen:450;
y(i,j)=0; %将framelen点到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=framelen:450;
y1(i,j)=0; %将framelen点到450点的值置零
end
end
for i=1:hang;
for k=1:128;
n=21:framelen;
R(i,k)=sum(y(i,n).*y1(i,n+k));
end
end
%计算每一帧y与y1的互相关值
for i=1:hang;
k=20:128;
Rmax(i)=max(R(i,k));%计算每帧的Rmax值
end
for i=1:hang;
k=20:128;
[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)=1/kmax(i);
end
end
a=0;
for i=1:(hang-1);
a=a+abs(P(i+1)-P(i));
end
noisebianhualv(h)=a/framelen;
end
noisebianhualv'
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -