元音音频截取
一、需求分析
现有一段元音音频,有无话段和语音段,现需要截取语音段的中间部分。
二、流程
三、具体步骤
1、能量归一化
求出整段音频的能量,再将这段音频的每个点除以
:
%求出整个音频的能量,进行能量归一化
Ena=sum(x.*x);
x=x/sqrt(Ena);
2、分帧
帧长=256,帧移=256
信号长度N=length(x); 帧数fn=size(y,2);
信号的时间刻度和每帧对应的时间刻度为:
time=(0:N-1)/Fs; % 计算出信号的时间刻度
frameTime=(((1:fn)-1)*inc+wlen/2)/Fs; % 求出每帧对应的时间
3、计算短时能量
amp=sum(y.^2); %计算短时能量
4、确定截取信号端点
(1)从第一帧开始寻找短时能量大于0.03的起始点k1(第几帧)
(2)从最后一帧往回开始寻找短时能量大于0.03的终点k2
%开始寻找端点
for i1=1:fn
if amp(i1)>0.03
k1=i1;
end
end
for i2=fn:-1:1
if amp(i2)>0.03
k2=i2;
end
end
(3)根据k1、k2的值计算出对应的时间值
t1=((k1-1)*inc+wlen/2)/Fs; %计算两个端点的时刻值
t2=((k2-1)*inc+wlen/2)/Fs;
(4)根据时间值找到对应的波形点数
%寻找端点时刻值对应的波形点数
for m=1:N
if time(m)-t2<0.0001;
n1=m;
elseif time(m)-t1<0.0001
n2=m;
end
end
5、根据端点值截取对应的波形
time1=time(n1:n2);
x1=x(n1:n2);
元音i1的波形、短时能量和截取元音i1的波形如下图所示: