机器学习中的音频特征:理解Mel频谱图

简介: 机器学习中的音频特征:理解Mel频谱图

如果你像我一样,试着理解mel的光谱图并不是一件容易的事。你读了一篇文章,却被引出了另一篇,又一篇,又一篇,没完没了。我希望这篇简短的文章能澄清一些困惑,并从头解释mel的光谱图。

640.jpg

信号

信号是一定量随时间的变化。对于音频,变化的量是气压。我们如何以数字方式捕获此信息?我们可以随时间采集气压样本。我们采样数据的速率可以变化,但是最常见的是44.1kHz,即每秒44,100个采样。我们捕获的是信号的波形,可以使用计算机软件对其进行解释,修改和分析。

importlibrosaimportlibrosa.displayimportmatplotlib.pyplotasplty, sr=librosa.load('./example_data/blues.00000.wav')plt.plot(y);
plt.title('Signal');
plt.xlabel('Time (samples)');
plt.ylabel('Amplitude');

640.png

我们可以使用音频信号的数字表示形式。欢迎来到信号处理领域!您可能想知道,我们如何从中提取有用的信息?看起来像是一团混乱。这就引出我们的朋友傅里叶,这里是它最熟悉的领域。

傅立叶变换

音频信号由几个单频声波组成。在一段时间内对信号进行采样时,我们仅捕获得到的幅度。傅立叶变换是一个数学公式,它使我们可以将信号分解为单个频率和频率幅度。换句话说,它将信号从时域转换到频域。结果称为频谱。

这是可能的,因为每个信号都可以分解为一组正弦波和余弦波,它们加起来等于原始信号。这是一个著名的定理,称为傅立叶定理。

快速傅立叶变换(FFT)是一种可以有效计算傅立叶变换的算法。它广泛用于信号处理。我将在示例音频的窗口片段中使用此算法。

importnumpyasnpn_fft=2048ft=np.abs(librosa.stft(y[:n_fft], hop_length=n_fft+1))plt.plot(ft);
plt.title('Spectrum');
plt.xlabel('Frequency Bin');
plt.ylabel('Amplitude');

640.png

频谱图

快速傅立叶变换是一种功能强大的工具,可让我们分析信号的频率成分,但是如果信号的频率成分随时间变化,该怎么办?大多数音频信号(例如音乐和语音)就是这种情况。这些信号称为非周期性信号。我们需要一种表示这些信号随时间变化的频谱的方法。您可能会想,“嘿,我们不能通过对信号的多个窗口部分执行FFT来计算多个频谱吗?” 是! 这正是完成的工作,称为短时傅立叶变换。FFT是在信号的重叠窗口部分上计算的,我们得到了所谓的频谱图。哇!需要接受很多东西。这里有很多事情要做。良好的视觉效果是必须的。

640.png

您可以将频谱图视为一堆相互堆叠的FFT。当信号在不同频率下随时间变化时,这是一种直观地表示信号响度或幅度的方法。计算频谱图时,还有一些其他细节。y轴转换为对数刻度,颜色尺寸转换为分贝(您可以将其视为振幅的对数刻度)。这是因为人类只能感知到非常小的集中频率和幅度范围。

spec=np.abs(librosa.stft(y, hop_length=512))
spec=librosa.amplitude_to_db(spec, ref=np.max)librosa.display.specshow(spec, sr=sr, x_axis='time', y_axis='log');
plt.colorbar(format='%+2.0f dB');
plt.title('Spectrogram');

640.png

仅用几行代码,我们就创建了一个频谱图。好。我们对“频谱图”部分有扎实的了解,但对“MEL”则如何。他是谁?

梅尔(Mel)量表

研究表明,人类不会感知线性范围的频率。我们在检测低频差异方面要胜于高频。例如,我们可以轻松分辨出500 Hz和1000 Hz之间的差异,但是即使之间的距离相同,我们也很难分辨出10,000 Hz和10,500 Hz之间的差异。

1937年,Stevens,Volkmann和Newmann提出了一个音高单位,以使相等的音高距离听起来与听众相等。这称为梅尔音阶。我们对频率执行数学运算,以将其转换为mel标度。

640.png

Mel谱图

mel谱图是频率转换为mel标度的谱图。使用python的librosa音频处理库它只需要几行代码就可以实现。

mel_spect=librosa.feature.melspectrogram(y=y, sr=sr, n_fft=2048, hop_length=1024)
mel_spect=librosa.power_to_db(spect, ref=np.max)librosa.display.specshow(mel_spect, y_axis='mel', fmax=8000, x_axis='time');
plt.title('Mel Spectrogram');
plt.colorbar(format='%+2.0f dB');

640.png

总而言之

如果你像我一样是信号处理新手的话,这里有很多概念需要了解。然而,如果你继续回顾这篇文章中提出的概念(花足够的时间盯着墙角思考它们),它就会开始有意义了!让我们简要回顾一下我们所做的工作。

我们随时间采集了气压样本,以数字方式表示音频信号

  1. 我们使用快速傅里叶变换将音频信号从时域映射到频域,并在音频信号的重叠窗口部分执行此操作。
  2. 我们将y轴(频率)转换为对数刻度,将颜色尺寸(幅度)转换为分贝,以形成频谱图。
  3. 我们将y轴(频率)映射到mel刻度上以形成mel频谱图。

听起来很简单,对吧?好吧,虽然不尽然,但是我希望这篇文章能使你了解音频特征的处理和梅尔频谱图的原理。

目录
相关文章
|
1月前
|
机器学习/深度学习 人工智能 并行计算
人工智能平台PAI产品使用合集之机器学习PAI中特征重要性的原理不知道如何解决
阿里云人工智能平台PAI是一个功能强大、易于使用的AI开发平台,旨在降低AI开发门槛,加速创新,助力企业和开发者高效构建、部署和管理人工智能应用。其中包含了一系列相互协同的产品与服务,共同构成一个完整的人工智能开发与应用生态系统。以下是对PAI产品使用合集的概述,涵盖数据处理、模型开发、训练加速、模型部署及管理等多个环节。
|
5天前
|
机器学习/深度学习 算法 C++
机器学习归一化特征编码(二)
这篇文档讨论了机器学习中的特征编码,特别是独热编码(OneHotEncoder)在处理离散变量时的作用。它指出,对于多分类变量,独热编码是常用方法,但对二分类变量通常不需要。在Python的`sklearn`库中,`OneHotEncoder`可以用来实现这一过程,并可以通过设置`drop='if_binary'`来忽略二分类变量。文档还提到了逻辑回归,解释了正则化参数`C`和`penalty`,并列举了不同的优化算法,如`liblinear`、`lbfgs`等。
|
6天前
|
机器学习/深度学习 API Python
机器学习特征降维
这篇内容概述了特征降维在机器学习中的重要性,包括三个主要方法:低方差过滤法、PCA(主成分分析)和相关系数法。低方差过滤法通过删除方差低于阈值的特征来减少无关信息;PCA通过正交变换降低数据的维数,保留大部分信息;相关系数法(如皮尔逊和斯皮尔曼相关系数)用于评估特征间的相关性,去除高度相关的特征以简化模型。这些技术有助于提高模型效率和泛化能力。
|
5天前
|
机器学习/深度学习 算法 数据处理
机器学习归一化特征编码(一)
特征缩放是机器学习预处理的关键步骤,它包括归一化和标准化。归一化通过最大最小值缩放,将数据转换到[0,1]区间,有助于梯度下降算法更快收敛,减少数值较大特征的影响。标准化则通过减去均值并除以标准差,确保数据具有零均值和单位方差,适用于关注数据分布情况的算法。例如,欧氏距离计算时,未归一化的特征可能导致模型偏向数值较大的特征。归一化能提升模型精度,尤其是当距离度量如欧式距离时。常见的实现方法有`MinMaxScaler`,它将每个特征值缩放到用户指定的范围,如[0,1]。而`StandardScaler`执行Z-Score标准化,数据分布符合标准正态分布。
|
8天前
|
机器学习/深度学习 计算机视觉
【机器学习】LoFTR:革命性图像特征批评技术等领跑者
【机器学习】LoFTR:革命性图像特征批评技术等领跑者
20 1
|
10天前
|
机器学习/深度学习 算法 Python
机器学习算法的比较与选择是在实际应用中非常重要的一步,不同的算法适用于不同的问题和数据特征。
机器学习算法的比较与选择是在实际应用中非常重要的一步,不同的算法适用于不同的问题和数据特征。
|
10天前
|
机器学习/深度学习 搜索推荐 PyTorch
【机器学习】图神经网络:深度解析图神经网络的基本构成和原理以及关键技术
【机器学习】图神经网络:深度解析图神经网络的基本构成和原理以及关键技术
50 2
|
17天前
|
机器学习/深度学习 人工智能 分布式计算
人工智能平台PAI产品使用合集之如何使用separator进行多值特征的分割
阿里云人工智能平台PAI是一个功能强大、易于使用的AI开发平台,旨在降低AI开发门槛,加速创新,助力企业和开发者高效构建、部署和管理人工智能应用。其中包含了一系列相互协同的产品与服务,共同构成一个完整的人工智能开发与应用生态系统。以下是对PAI产品使用合集的概述,涵盖数据处理、模型开发、训练加速、模型部署及管理等多个环节。
|
17天前
|
机器学习/深度学习 人工智能 监控
人工智能平台PAI产品使用合集之设置了7个特征,但在最后生成的数据表中只包含了6个id_feature的特征,是什么导致的
阿里云人工智能平台PAI是一个功能强大、易于使用的AI开发平台,旨在降低AI开发门槛,加速创新,助力企业和开发者高效构建、部署和管理人工智能应用。其中包含了一系列相互协同的产品与服务,共同构成一个完整的人工智能开发与应用生态系统。以下是对PAI产品使用合集的概述,涵盖数据处理、模型开发、训练加速、模型部署及管理等多个环节。
|
1月前
|
机器学习/深度学习 分布式计算 算法
【机器学习】Spark ML 对数据特征进行 One-Hot 编码
One-Hot 编码是机器学习中将离散特征转换为数值表示的方法,每个取值映射为一个二进制向量,常用于避免特征间大小关系影响模型。Spark ML 提供 OneHotEncoder 进行编码,输入输出列可通过 `inputCol` 和 `outputCol` 参数设置。在示例中,先用 StringIndexer 对类别特征编码,再用 OneHotEncoder 转换,最后展示编码结果。注意 One-Hot 编码可能导致高维问题,可结合实际情况选择编码方式。

热门文章

最新文章