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

📄 subband spectral entropy used in speech endpoint detection.m

📁 在读研期间自己写的基于子带频谱墒的语音端点检测程序
💻 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 + -