当前位置:网站首页>librosa | 梅尔谱图最通俗的解释
librosa | 梅尔谱图最通俗的解释
2022-06-21 05:27:00 【Begonia_cat】
写在前面
在Medium论坛,读到一篇关于梅尔谱图的帖子,作者讲得通俗易懂生动幽默,因此翻译过来分享一下。一则,为自己日后查阅方便,二则,帮助其他有困惑的小伙伴一起来学习学习。
当然,如果有条件(as you know),建议直接去原链接读英文原版。话不多说,一起来读吧!
原文链接:《Understanding the Mel Spectrogram》
作者:Leland Roberts
正文开始

如果你像我一样,试图理解mel频谱图并不是一件容易的事。你读了一篇文章,却被引向了另一篇文章…和另一个…和另一个…继续前进。我希望这篇短文能够澄清一些混淆,并从头开始解释mel频谱图。
信号
信号是随时间推移一定数量的变化。对于音频,变化的量是气压。我们如何以数字方式捕获这些信息?我们可以随时间推移采集气压样本。我们对数据进行采样的速率可能会有所不同,但最常见的是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');

这太棒了!我们有一个音频信号的数字表示,我们可以使用它。欢迎来到信号处理领域!您可能想知道,我们如何从中提取有用的信息?它看起来像一团糟。这就是我们的朋友傅立叶的用武林立叶。
傅里叶变换
音频信号由几个单频声波组成。当随时间对信号进行采样时,我们只捕获产生的幅度。傅里叶变换是一个数学公式,它允许我们将信号分解为它的各个频率和频率的幅度。换句话说,它将信号从时域转换为频域。其结果称为频谱。
这是可能的,因为每个信号都可以分解成一组正弦波和余弦波,这些正弦波加起来就是原始信号。这是一个被称为傅里叶定理的非凡定理(Fourier’s theorem)。
点击https://youtu.be/UKHBWzoOKsY,如果你想要一个很好的直觉来解释为什么这个定理是正确的。
还有一个名为“3Blue1Brown”的博主关于傅里叶变换的惊人视频,链接为https://www.youtube.com/watch?v=spUNpyF58BY。
快速傅里叶变换 (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是在信号的重叠窗口段上计算的,我们得到了所谓的频谱图。 哇!这需要吸收很多东西。这里发生了很多事情。良好的视觉效果是有序的。
您可以将频谱图视为一堆堆叠在一起的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');

Viola! 只需几行代码,我们就创建了一个频谱图。OK!我们快到了!我们对“频谱图”部分有很扎实的把握,但是“梅尔”呢?他是谁?
梅尔量表
研究表明,人类不会在线性尺度上感知频率。我们更擅长检测较低频率的差异``,而不是较高频率的差异。例如,我们可以很容易地分辨出500和1000 Hz之间的差异,但是即使两对之间的距离相同,我们也很难区分10,000和10,500 Hz之间的差异。
1937年,史蒂文斯,沃尔克曼和纽曼提出了一个音高单位,使得音高的相等距离对听众来说听起来同样遥远。这称为梅尔尺度。 我们对频率执行数学运算,以将其转换为mel尺度。

梅尔频谱图
mel频谱图是一种频谱图,其中频率转换为mel尺度。我知道,对吧?谁会想到呢?令人惊讶的是,在经历了所有那些心理准备以尝试理解mel频谱图之後,它只需要几行代码即可实现。
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');

总结
这需要吸收很多信息,特别是如果你像我一样是信号处理的新手。但是,如果您继续回顾本文中列出的概念(并花足够的时间盯着墙角思考它们),它将开始有意义!让我们简要回顾一下我们所做的工作。
- 我们采集了随时间变化的气压样本,以数字方式表示音频信号。
- 我们使用快速傅里叶变换将音频信号
从时域映射到频域,并在音频信号的重叠窗口段上执行此操作。 - 我们将
y轴(频率)转换为对数刻度,将颜色维度(振幅)转换为分贝以形成频谱图。
我们将y轴(频率)映射到mel尺度上以形成mel频谱图。
就是这样!听起来很简单,对吧?嗯,不完全是,但我希望这篇文章能使mel频谱图不那么令人生畏。我花了很长时间才理解它。然而,在一天结束时,我发现梅尔并没有那么冷漠。
(完)
再次感谢Leland Roberts写出的这篇文章,解答了笔者心中的一些困惑!
边栏推荐
- launcher切页动画
- Randomly create circular, triangular or rectangular objects, store them in the array, and calculate the area and perimeter of each shape
- 根据类中某个属性去重
- Network security - the difference between DDoS and CC attacks
- Double tower recall on the knowledge map: Ali's intentgc model
- Physical principle of space design in maker Education
- 【基于Oauth2的api接口开发】3、自定义授权方式
- Reflective
- Comprehensive arrangement of character recognition methods
- IDEA Debug出现:Skipped breakpoint at because it happened inside debugger evaluation
猜你喜欢

Comprehensive arrangement of character recognition methods

In the NLP field, what are the most practical and effective skills or ideas used in text classification, NER, QA, generation, relationship extraction, etc?

How to remove the prohibition of copying and pasting set by teachers

Privacy sandbox helps enterprises: how privacy technology protects user data and promotes business growth

Unscrambling the education mode of compound new engineering robot

Abnova 11-脱氢-TXB2 ELISA 试剂盒说明书

Use of TestNG framework (I): idea installation TestNG environment

Ue4/5 impactor on begin overlap and on end overlap trigger simultaneously for resolution

软件研发团队效能提升从点滴做起

Blog forum system based on ssm+mysql+layui
随机推荐
无代码探索者大会,轻流邀您共同探讨数字化转型实践之路
Common storage types
Abbexa primary antibody, secondary antibody, protein and other biological reagent schemes
Glycosylated albumin research - abbexa ELISA kit to help!
GRBL学习(八)
Global and Chinese markets of RFID (radio frequency identification) smart cabinets 2022-2028: Research Report on technology, participants, trends, market size and share
MAC NAMP PRO 自带mysql 5.7 设置 sql_model 去掉 ONLY_FULL_GROUP_BY 无效 可能是这样原因,
Abbexa HSD11B2 antibody solution
[QNX Hypervisor 2.2用户手册]5.4 启动VM
面试题_V1.0
Network security - the difference between DDoS and CC attacks
Yyds dry goods inventory solution Huawei machine test: conversion between integer and IP address
《微型Lisp解释器的构造与解释》的写作风格
Oracle笔记 之 update语法
Summary and practice of knowledge map construction technology
5. Implementation of watch method
How to ensure database and cache double write consistency?
Abnova β-半乳糖苷酶重组单克隆抗体方案
Abbexa GM130 antibody solution
SQL deadlock
