📄 subband spectral entropy used in speech endpoint detection.m
字号:
%ABSE 求解函数
clear all,clc;
x=wavread('8a.wav');
%noise=wavread('pink.wav');
%M=size(signal);
%x=signal(1:M)+noise(1:M);
x = double(x);
x = x /max(abs(x));
xx=enframe(filter([1 -0.9375], 1, x),hamming(256),128);
%下面循环是求取每一帧的短时傅立叶变换(对应文中公式(2))
N=32;
Eb=zeros(size(xx,1),N);
%外部变量
for i=1:size(xx,1)
y = xx(i,:);
% s = y'.*hamming(256);
t(i,:)=(abs(fft(y)))';
%下面是计算每一帧的谱的能量(对应文中公式(4))
for n=1:128
E(i,n)=t(i,n).^2;
end
%下面是计算每帧中每个样本点的概率分布(对应文中公式(5))
Esum=sum(E);
for n=1:128
P(i,n)=E(i,n)/Esum;
end
%下面是计算每一帧的谱熵值(对应文中公式(6))
for n=1:128
H(i)=sum(P(i,n)*log(1/P(i,n)));
end
%画出wav文件的波形和对应的信息熵
subplot(411)
plot(x);
subplot(412)
plot(H);
%为了消除单个点受噪声的影响,现在把4点放在一起,变成一子带,4*32=128(对应文中公式(7))
for m=1:32
for k=(4*m-3):4*m
Eb(i,m)=Eb(i,m)+E(i,k);
end
end
%实现文中公式(8)
Ebsum(i)=sum(Eb(i,:));
for k=1:32
Pb(i,k)=Eb(i,k)/Ebsum(i);
end
%实现文中公式(9)
for k=1:32
Hb(i)=sum(Pb(i,k)*log(1/P(i,k)));
end
%画出wav文件的波形和对应的信息熵
subplot(413)
plot(Hb);
%为了使熵能有效的说明语音谱的子带条形组织结构,引入了W(m,l)权值因子,下面是计算W(m,l)(对应文中(10)、(11))
Pb1(i)=min(Pb(i,:));
for m=1:32
Pb_1(i,m)=Pb1(i)/Pb(i,m);
end
w(i,1)=(Pb_1(i,32)+Pb_1(i,1)+Pb_1(i,2))/3;
for m=2:31
w(i,m)=(Pb_1(i,m-1)+Pb_1(i,m)+Pb_1(i,m+1))/3;
end
w(i,32)=(Pb_1(i,31)+Pb_1(i,32)+Pb_1(i,1))/3;
for k=1:32
Hb1(i)=sum(w(i,m)*Pb(i,k)*log(1/P(i,k)));
end
subplot(414)
plot(Hb1);
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -