【音频处理】了解梅尔谱图

您所在的位置:网站首页 图像频谱图怎么看 【音频处理】了解梅尔谱图

【音频处理】了解梅尔谱图

2024-07-17 05:38| 来源: 网络整理| 查看: 265

目录

一、说明

二、信号

三、傅里叶变换

四、频谱图

五、梅尔量表

六、梅尔谱图

七、总结

  一、说明

        如果您和我一样,尝试理解梅尔谱图并不是一件容易的事。你读一篇文章只是为了引出另一篇文章……又一篇文章……又一篇文章……如此不断。我希望这篇短文能够澄清一些困惑,并从头开始解释梅尔谱图。

二、信号

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

import librosa import librosa.display import matplotlib.pyplot as plt y, sr = librosa.load('./example_data/blues.00000.wav') plt.plot(y); plt.title('Signal'); plt.xlabel('Time (samples)'); plt.ylabel('Amplitude');

这很棒!我们有可以使用的音频信号的数字表示形式。欢迎来到信号处理领域!您可能想知道,我们如何从中提取有用的信息?看起来就像是一团乱麻。这就是我们的朋友傅立叶发挥作用的地方。

三、傅里叶变换

        音频信号由多个单频声波组成。当随时间推移采集信号样本时,我们仅捕获所得的幅度。傅里叶变换是一个数学公式,它允许我们将信号分解为其单独的频率和频率的幅度。换句话说,它将信号从时域转换到频域。结果称为频谱。

图片来自阿沃斯国际

        这是可能的,因为每个信号都可以分解为一组正弦波和余弦波,这些波加起来就是原始信号。这是一个著名的定理,称为傅里叶定理。如果您想直观地了解为什么这个定理是正确的,请单击此处。如果您想了解更多信息,还可以观看 3Blue1Brown 制作的有关傅立叶变换的精彩视频。

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

import numpy as np n_fft = 2048 ft = 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');

四、频谱图

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

图片来自MathWorks

        您可以将频谱图视为一堆相互堆叠的 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');

        瞧!只需几行代码,我们就创建了一个频谱图。好的。我们就快到了!我们已经掌握了“频谱图”部分,但是“梅尔”呢?他是谁?

五、梅尔量表

        研究表明,人类感知的频率并不是线性的。与高频相比,我们更擅长检测低频的差异。例如,我们可以轻松区分 500 和 1000 Hz 之间的差异,但我们几乎无法区分 10,000 和 10,500 Hz 之间的差异,即使两对之间的距离相同。

        1937 年,史蒂文斯、福克曼和纽曼提出了一种音高单位,它是音高的尺度,使得听众判断每个单元与下一个单元的音高距离相等。这称为梅尔等级。我们对频率进行数学运算,将其转换为梅尔标度。

图片来自西蒙弗雷泽大学

六、梅尔谱图

        梅尔频谱图是频率转换为梅尔标度的频谱图。我知道,对吧?谁会想到呢?令人惊奇的是,在经历了所有这些心理体操来尝试理解梅尔谱图之后,只需几行代码就可以实现它。

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');



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3