实验三 语音信号短时时域分析实验
一、实验目的
- 了解语音信号短时时域分析的原理;
- 掌握短时时域分析的一些参数计算方法;
- 根据原理能编程实现短时时域分析的参数计算。
二、实验要求
- 实现短时能量、短时平均幅度和短时过零率的计算
- 实现短时自相关和短时平均幅度差
三、实验程序
相关函数:
function para=STEn(x,win,inc)
X=enframe(x,win,inc)';
fn=size(X,2);
for i=1 : fn
u=X(:,i);
u2=u.*u;
para(i)=sum(u2);
end
end
function para=STMn(x,win,inc)
X=enframe(x,win,inc)';
fn=size(X,2);
for i=1 : fn
u=X(:,i);
para(i)=sum(abs(u))/200;
end
end
function para=STZcr(x,win,inc)
X=enframe(x,win,inc)';
fn=size(X,2);
wlen=length(win);
para=zeros(1,fn);
for i=1:fn
z=X(:,i);
for j=1: (wlen- 1) ;
if z(j)* z(j+1)< 0
para(i)=para(i)+1;
end
end
end
end
function para=STAc(X)
para=zeros(size(X));
fn=size(X,2);
wlen=size(X,1);
for i=1 : fn
u=X(:,i);
R=xcorr(u);
para(:,i)=R(wlen,end);
end
end
function para=STAmdf(X)
para=zeros(size(X));
fn=size(X,2);
wlen=size(X,1);
for i=1 : fn
u=X(:,i);
for k=1:wlen
para(:,k)=sum(abs(u(k:end)-u(1:end-k+1)));
end
end
end
整体代码:
clear all; clc; close all;
[x,Fs]=audioread('block.wav');
wlen=200; inc=100;
win=hanning(wlen);
N=length(x);
time=(0:N-1)/Fs;
En=STEn(x,win,inc);
Mn=STMn(x,win,inc);
Zcr=STZcr(x,win,inc);
X=enframe(x,win,inc)';
xn=X(:);
Ac=STAc(X);
Ac=Ac(:);
Amdf=STAmdf(X);
Amdf=Amdf(:);
fn=length(En);
figure(1)
subplot 311; plot(time,x,'b'); axis tight
title('(a)语音波形');
ylabel('幅值'); xlabel(['时间/s' 10 ]);
frameTime=FrameTimeC(fn,wlen,inc,Fs);
subplot 312; plot(frameTime,Mn,'b')
title('(b)短时幅度');
ylabel('幅值'); xlabel(['时间/s' 10 ]);
subplot 313; plot(frameTime,En,'b')
title('(c)短时能量');
ylabel('幅值'); xlabel(['时间/s' 10 '(b)']);
figure(2)
subplot 211; plot(time,x,'b'); axis tight
title('(a)语音波形');
ylabel('幅值'); xlabel(['时间/s' 10 ]);
subplot 212; plot(frameTime,Zcr,'b')
title('(b)短时过零率');
ylabel('幅值'); xlabel(['时间/s' 10 ]);
figure(3)
subplot 211; plot(xn,'b');
title('(a)语音波形');
ylabel('幅值'); xlabel(['点数' 10 ]);
subplot 212; plot(Ac,'b')
title('(b)短时自相关');
ylabel('幅值'); xlabel(['点数' 10 ]);
figure(4)
subplot 211; plot(xn,'b');
title('(a)语音波形');
ylabel('幅值'); xlabel(['点数' 10 ]);
subplot 212; plot(Amdf,'b')
title('(b)短时幅度差');
ylabel('幅值'); xlabel(['点数' 10 ]);
四、实验结果
- 实现短时能量、短时平均幅度和短时过零率的计算
- 实现短时自相关和短时平均幅度差