短时能量
%调整能量门限
amp1=min(amp1,max(amp)/4); amp2=min(amp2,max(amp)/8);
%开始零点检测 x1=0; x2=0;
for n=1:length(zcr); goto=0; switch status
case{0,1} %静音=0,1开始
if amp(n)>amp1 %确信进入语音阶段 x1=max(n-count-1,1); status=2; silence=0; count=count+1;
elseif amp(n)>amp2|... %可能处在语音段 zcr(n)>zcr2 status=1; count=count+1; else %静音状态 status=0; count=0; end
case 2, %2=语音段
if amp(n)>amp2|...%保持在语音段 zcr(n)>zcr2; count=count+1; else %语音将结束 silence=silence+1;
if silence 静音不够 长,,没有结束 count=count+1; elseif count status=3; end end case 3, break; end end j=0; for i=1:length(amp)-1; if (zcr(i)>0.02)&(zcr(i+1)<0.02) j=j+1 jiesu1(j)=i; end end j=1 for i=1:length(jiesu1)-1 if((jiesu1(i+1)-jiesu1(i))>100)&jiesu1(i)~=1 jiesu(j)=jiesu1(i); j=j+1 end end %找出每段语音结束点 j=1 for i=1:length(amp)-1; if ((zcr(i)<0.85)&zcr(i+1)>0.85) 32 kaishi1(j)=i+1 j=j+1; end end j=1 for i=1:length(kaishi1)-1 if((kaishi1(i+1)-kaishi1(i))>80) kaishi(j)=kaishi1(i); j=j+1 end end count=count-silence/2; x2=x1+count-1; subplot(311) plot(x) axis([1 length(x) -1 1]) ylabel('speech'); line([x1*frameinc x1*frameinc],[-1,1],'color','red'); line([x2*frameinc x2*frameinc],[-1,1],'color','red'); subplot(312) plot(amp); axis([1 length(amp) 0 max(amp)]) ylabel('energy'); line([x1,x1],[min(amp),max(amp)],'color','red'); line ([x2 x2],[min(amp),max(amp)],'color','red'); subplot(313) plot(zcr); axis([1 length(zcr) 0 max(zcr)]) ylabel('zcr'); line([x1 x1],[min(zcr),max(zcr)],'color','red'); line([x2 x2],[min(zcr),max(zcr)],'color','red'); 附录四: “河北科技大学”语谱图源程序: 33 frmsize = 256; % 设置贞大小 [x,fs,nbits] = wavread('3.wav'); % 读取语音文件 x = filter([1 -0.95],[1],x); % 高频预加重,抵消频谱倾斜 n = length(x); frmcnt = floor(n/frmsize); x = reshape(x(1:frmsize*frmcnt),frmsize,frmcnt); % 分帧 xFFT = abs(fft(x)); % 傅里叶谱 xFFT = xFFT(1:frmsize/2,1:frmcnt); % 奈奎斯特频率以内是无效的 xFFTdB = 20*log10(xFFT+eps); % 换算成分贝 xFFTdB(xFFTdB>+20) = +20; % 能量太高的截断 xFFTdB(xFFTdB<-40) = -40; % 能量太低的截断 xFFTdB = (xFFTdB+40); % 能量整理到 [0,60] 之间,当然你可以整理到[0,255]范围 subplot(2,1,1);plot(x(1:frmsize*frmcnt)); title('河北科技大学'); % 画波形 subplot(2,1,2);image(flipud(xFFTdB)); colormap(jet)% 画语谱图 附录五: 语音信号的综合仿真分析程序: [y,fs,bits]=wavread('e:\\235.wav'); % sound(y,fs,bits); Y=fft(y,40000);%采样点数40000 figure(1); subplot(211);plot(y);title('原始信号波形'); subplot(212);plot(abs(Y));title('原始信号频谱'); fc=20000;%载波频率 y1=modulate(y,fc,fs,'fm');%对原语音信号调制 Y1=fft(y1,40000);%采样点数40000 figure(2); subplot(211);plot(y1);title('调制后信号波形'); subplot(212);plot(abs(Y1));title('调制后信号频谱'); % sound(y1); y2=y+y1; Y2=fft(y2,40000);%采样点数40000 34 figure(3); subplot(211);plot(y2);title('调制信号+原始信号波形'); subplot(212);plot(abs(Y2));title('调制信号+原始信号频谱'); % sound(y2); figure(4); fp=1000;fc=1200;As=100;Ap=1;fs1=22050; wc=2*fc/fs1;wp=2*fp/fs1; [n,wn]=ellipord(wp,wc,Ap,As); [b,a]=ellip(n,Ap,As,wn); freqz(b,a,512,fs1); x=filter(b,a,y2); X=fft(x,40000); figure(5); subplot(211);plot(x);title('低通滤波后信号波形'); subplot(212);plot(abs(X));title('低通滤波后信号频谱'); sound(x,40000); 35