时域特征提取
Amplitude envelope 振幅包络

每一帧的振幅包络连起来可以得到整段语音的振幅包络线
振幅包络可以给出响度的大致信息,对异常特别敏感
应用:(声音事件)开端检测、音乐流派分类
Root-mean-square energy 均方根能量

均方根能量表达的是一帧内所有样本点的一个综合信息
也能表达响度的信息,不过没有AE那样对异常敏感
应用:音频分割、音乐流派分类
Zero crossing rate 过零率
过零率是信号经过x轴的次数

import librosa
import librosa.display
import matplotlib.pyplot as plt
import numpy as np
# 加载音频文件 (这里要换成你自己的音频文件的路径)
source_file = "./data/section_02_source_train_normal_0000_strenght_1_ambient.wav"
# 如果不加入sr=None参数,采样率会默认设置成22050!!!
source, sr1 = librosa.load(source_file, mono=True, sr=None)
FRAME_SIZE = 512
HOP_LENGTH = 256
# 计算振幅包络(有帧移的情况下)
def amplitude_envelope_hop(signal, frame_size, hop_length):
amplitude_envelope = []
# calculate AE for each frame
for i in range(0, len(signal), hop_length):
current_frame_amplitude_envelope = max(signal[i:i + frame_size]) # 末尾不会截断,而是将不足一个frame的进行同样的处理
amplitude_envelope.append(current_frame_amplitude_envelope)
return np.array(amplitude_envelope)
ae_source_hop = amplitude_envelope_hop(source, FRAME_SIZE, HOP_LENGTH)
# 可视化振幅包络
frames = range(0, len(ae_source_hop))
t = librosa.frames_to_time(frames, hop_length=HOP_LENGTH)
librosa.display.waveplot(source, alpha=0.5)
plt.plot(t, ae_source_hop, color='r')
plt.title("source domain audio amplitude envelope")
plt.ylim(-0.1, 0.1)
plt.show()
# 还有更多的代码我懒得写了,真有人要的话可以评论或者私信我
本文详细介绍了时域信号处理中的三种重要特征提取方法:振幅包络、均方根能量和过零率。振幅包络用于获取信号响度信息,尤其适用于异常检测;均方根能量是样本点的综合信息,同样反映响度,但对异常不敏感;过零率则表示信号经过零点的次数,应用于音频分割和音乐流派分类等领域。
239

被折叠的 条评论
为什么被折叠?



