谁能帮我看看 这段代码 我qq526874591 谢了
%csig混合前
%noise噪声
%nsig混合后
clear all;
Fs=20000;
csig=wavread('nsh.wav');
%sound(csig);
csig=csig(1:Fs);
noise=wavread('m109.wav');%read noise signal
%sound(noise);
nsig=saddn(csig,noise,0);%信比snr=15
%sound(nsig);
%时域相加,不会影响频域的~
%基于自适应子带频谱熵的稳健性语音端点检测
N=256;%
Winsiz=256;%帧长
Shift=128;%帧移
%q帧数
x=nsig;
x=x(:,1);%我这里假设你的声音是双声道,我只取单声道作分析,如果你想分析另外一个声道,请改成y=y(:,2)
t=(0:length(x)-1)/Fs;
subplot(311)
plot(t,x);xlabel('t/s'); ylabel('幅度');
x=double(x);
%对信号做预加重处理
x=filter([1 -0.9375], 1, x);%????????
q=floor((length(x)-Winsiz)/Shift)+1;%向负无穷取整 然后加一 帧数
A=zeros(Winsiz/2+1,q);%m行n列零矩阵
%下面循环是x信号的加窗处理并求出各点频谱能量
for i=1:q
n1=(i-1)*Shift+1;n2=n1+(Winsiz-1);
xx=x(n1:n2);xx=xx.*hamming(Winsiz);%.*表示元素对应相乘
y=fft(xx,N);%n点fft对xx进行快速傅里叶变换
y=y(1:Winsiz/2+1);
y=y.*conj(y);%求复数的共轭
A(:,i)=y;
end
%计算总能量
Esum=zeros(1,q);
for i=1:q
for j=1:Winsiz/2
Esum(i)=Esum(i)+A(j,i);
end
end
%下面是计算每一帧的谱的能量 公式(2)
for i=1:q
for n=1:Winsiz/2
E(n,i)=A(n,i);
end
end
%下面是计算每帧中每个样本点的概率分布 公式(3)
for i=1:q
for n=1:Winsiz/2
P(n,i)=E(n,i)/Esum(i);
end
end
%下面是计算每一帧的谱熵值 公式(4)
H=zeros(1,q);
for i=1:q
for n=1:Winsiz/2
H(i)=H(i)+P(n,i)*log(P(n,i)+eps);
end
end
%画出wav文件的波形和对应的信息熵
subplot(312)
plot(H);
title('对应信息熵')
%为了消除单个点受噪声的影响,现在把4点放在一起,变成一子带,4*32=128
Eb=zeros(32,q);Ebsum=zeros(1,q);
for i=1:q
for m=1:32
for k=(4*m-3):4*m
Eb(m,i)=Eb(m,i)+E(k,i);
end
Ebsum(i)=Ebsum(i)+Eb(m,i);
end
end
%实现文中公式(8)
for i=1:q
for k=1:32
Pb(k,i)=Eb(k,i)/Ebsum(i);
end
end
%实现文中公式(9)
Hb=zeros(1,q);
for i=1:q %i相当m
for k=1:32 %Vb=m
Hb(i)=Hb(i)-Pb(k,i)*log(P(k,i)+eps);
end
end
%画出wav文件的波形和对应的信息熵
subplot(313)
plot(Hb);