截取音频中的其中一段(基于短时能量的方法)

元音音频截取

一、需求分析

现有一段元音音频,有无话段和语音段,现需要截取语音段的中间部分。

二、流程

这里写图片描述

三、具体步骤

1、能量归一化

求出整段音频的能量,再将这段音频的每个点除以 a

E n = 0 N x 2

x = x / E n

%求出整个音频的能量,进行能量归一化 
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、计算短时能量

E n = 0 N y 2

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的波形如下图所示:

这里写图片描述

猜你喜欢

转载自blog.csdn.net/qq_39516859/article/details/81084469