音频信号的RMS能量与幅值包络分析

在音频信号处理领域,了解RMS能量和幅值包络的概念对于音乐流派分类和音频特征提取至关重要。本文将通过可视化和分析不同音乐流派(包括古典、蓝调、雷鬼、摇滚和爵士)的RMS能量和幅值包络,探讨这些特征对异常值的鲁棒性。文章的灵感来源于Valerio Valerdo的工作,强烈推荐访问他的YouTube频道,了解他在音频机器学习/深度学习领域的杰出工作。

工具和数据集

本文使用的工具包括Python、Librosa库,以及来自GTZAN数据集的音频样本(每个样本长度为30秒)。

RMS能量的含义

音频信号的RMS能量指的是信号的整体幅度,通常等同于信号的响度。信号的能量计算方法如下:

RMS = sqrt(mean(x^2))

其中,RMS是一种计算变量平均值的方法,适用于随时间变化的数据。在音频处理中,信号值(振幅)被平方,然后随时间平均,最后计算结果的平方根。信号的均方根能量(RMSE)的数学定义是:

音频信号的幅值包络

幅值包络是从原始音频波形中提取的时间域音频特征,指的是声音振幅随时间的变化,影响对音色的听觉印象。这是一个重要的音频特征,因为它使能够快速识别和区分声音。信号的幅值包络,提供了响度的粗略估计,由每个帧中所有样本的最大振幅值组成。这个属性已被广泛用于音乐流派分类和起始检测。然而,由于它比RMS能量音频函数更敏感于异常值,因此通常较少被优先选择。

接下来,将逐步指导如何可视化和比较不同音乐流派曲目的幅值包络和RMS能量。

!pip install librosa import matplotlib.pyplot as plt import numpy as np import librosa import librosa.display import IPython.display as ipd %matplotlib inline classical_music_file = "/content/drive/MyDrive/trytheseaudios/classical.00000.wav" blues_music_file = "/content/drive/MyDrive/trytheseaudios/blues.00000.wav" reggae_music_file = "/content/drive/MyDrive/trytheseaudios/reggae.00000.wav" rock_music_file = "/content/drive/MyDrive/trytheseaudios/rock.00000.wav" jazz_music_file = "/content/drive/MyDrive/trytheseaudios/jazz.00000.wav" # 加载音频文件 classical, sr = librosa.load(classical_music_file) blues, _ = librosa.load(blues_music_file) reggae, _ = librosa.load(reggae_music_file) rock, _ = librosa.load(rock_music_file) jazz, _ = librosa.load(jazz_music_file) FRAME_SIZE = 1024 HOP_LENGTH = 512 rms_classical = librosa.feature.rms(classical, frame_length=FRAME_SIZE, hop_length=HOP_LENGTH)[0] rms_blues = librosa.feature.rms(blues, frame_length=FRAME_SIZE, hop_length=HOP_LENGTH)[0] rms_reggae = librosa.feature.rms(reggae, frame_length=FRAME_SIZE, hop_length=HOP_LENGTH)[0] rms_rock = librosa.feature.rms(rock, frame_length=FRAME_SIZE, hop_length=HOP_LENGTH)[0] rms_jazz = librosa.feature.rms(jazz, frame_length=FRAME_SIZE, hop_length=HOP_LENGTH)[0] def amplitude_envelope(signal, frame_size, hop_length): return np.array([max(signal[i:i+frame_size]) for i in range(0, signal.size, hop_length)]) ae_classical = amplitude_envelope(classical, FRAME_SIZE, HOP_LENGTH) ae_blues = amplitude_envelope(blues, FRAME_SIZE, HOP_LENGTH) ae_reggae = amplitude_envelope(reggae, FRAME_SIZE, HOP_LENGTH) ae_rock = amplitude_envelope(rock, FRAME_SIZE, HOP_LENGTH) ae_jazz = amplitude_envelope(jazz, FRAME_SIZE, HOP_LENGTH)
  • 学习了音频的RMS能量和幅值包络是什么。
  • 使用Librosa可视化和比较了不同音乐流派曲目的RMS能量和幅值包络。
  • 还了解了幅值包络相对于RMS能量的缺点。
沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485