首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

在Python中获取对数Mel谱图

的过程可以通过以下步骤实现:

  1. 导入所需的库:
代码语言:txt
复制
import numpy as np
import scipy.io.wavfile as wav
from scipy.fftpack import dct
from scipy.signal import lfilter
import matplotlib.pyplot as plt
  1. 定义函数get_mel_spectrum,该函数用于计算对数Mel谱图:
代码语言:txt
复制
def get_mel_spectrum(signal, sample_rate, frame_size=0.025, frame_stride=0.01, num_filters=26, num_ceps=13, low_freq=0, high_freq=None):
    # 预加重处理
    pre_emphasis = 0.97
    emphasized_signal = np.append(signal[0], signal[1:] - pre_emphasis * signal[:-1])

    # 分帧
    frame_length = int(round(frame_size * sample_rate))
    frame_step = int(round(frame_stride * sample_rate))
    signal_length = len(emphasized_signal)
    num_frames = int(np.ceil(float(np.abs(signal_length - frame_length)) / frame_step))

    pad_signal_length = num_frames * frame_step + frame_length
    z = np.zeros((pad_signal_length - signal_length))
    pad_signal = np.append(emphasized_signal, z)

    indices = np.tile(np.arange(0, frame_length), (num_frames, 1)) + np.tile(np.arange(0, num_frames * frame_step, frame_step), (frame_length, 1)).T
    frames = pad_signal[indices.astype(np.int32, copy=False)]

    # 加窗
    hamming_window = np.hamming(frame_length)
    frames *= hamming_window

    # 快速傅里叶变换
    NFFT = 512
    mag_frames = np.absolute(np.fft.rfft(frames, NFFT))  # Magnitude of the FFT

    # Mel滤波器
    low_freq_mel = (2595 * np.log10(1 + low_freq / 700))  # Convert Hz to Mel
    high_freq_mel = (2595 * np.log10(1 + high_freq / 700)) if high_freq else (sample_rate / 2)  # Convert Hz to Mel
    mel_points = np.linspace(low_freq_mel, high_freq_mel, num_filters + 2)  # Equally spaced in Mel scale
    hz_points = (700 * (10**(mel_points / 2595) - 1))  # Convert Mel to Hz
    bin = np.floor((NFFT + 1) * hz_points / sample_rate).astype(int)

    filters = np.zeros((num_filters, int(np.floor(NFFT / 2 + 1))))
    for m in range(1, num_filters + 1):
        filters[m - 1, bin[m - 1]:bin[m]] = (hz_points[m] - hz_points[m - 1]) / (bin[m] - bin[m - 1])  # Left slope
        filters[m - 1, bin[m]:bin[m + 1]] = (hz_points[m + 1] - hz_points[m]) / (bin[m + 1] - bin[m])  # Right slope

    # Mel滤波器应用
    mel_spectrum = np.dot(mag_frames, filters.T)
    mel_spectrum = np.where(mel_spectrum == 0, np.finfo(float).eps, mel_spectrum)  # Avoid zero division
    mel_spectrum = 20 * np.log10(mel_spectrum)  # dB

    # Cepstral系数计算
    dct_filter = dct(mel_spectrum, type=2, axis=1, norm='ortho')[:, :num_ceps]

    return dct_filter
  1. 调用get_mel_spectrum函数并绘制对数Mel谱图:
代码语言:txt
复制
# 加载音频文件
sample_rate, signal = wav.read("audio.wav")

# 获取对数Mel谱图
mel_spectrum = get_mel_spectrum(signal, sample_rate)

# 绘制对数Mel谱图
plt.imshow(mel_spectrum.T, cmap='hot', origin='lower', aspect='auto')
plt.xlabel('Frame')
plt.ylabel('Mel Filter')
plt.title('Log Mel Spectrogram')
plt.colorbar(format='%+2.0f dB')
plt.tight_layout()
plt.show()

以上代码中,假设音频文件为"audio.wav",需要提前准备好。

对数Mel谱图可以通过将音频信号进行预加重、分帧、加窗、快速傅里叶变换、Mel滤波器应用、对数化等一系列处理得到。这种谱图常用于语音识别、音频信号处理等领域。

腾讯云相关产品和产品介绍链接地址:

  • 腾讯云音频处理服务:https://cloud.tencent.com/product/aaas
  • 腾讯云机器学习平台:https://cloud.tencent.com/product/tiia
  • 腾讯云内容分发网络(CDN):https://cloud.tencent.com/product/cdn
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

音频知识(二)--MFCCs

时域和频域可以用下图表示,上篇文章的一些变换也是时频域的转换。 image.png 波形和声谱 常说的波形是指时域分析,横轴是时间,纵轴是信号的变化。...倒和梅尔频率倒的区别在于,梅尔频率倒的频带划分是梅尔刻度上等距划分的,它比用于正常的对数倒频谱的线性间隔的频带更能近似人类的听觉系统。...MFCCs获取的一般流程: 预加重 通常高频能量比低频能量小,预加重滤波器主要为了放大高频,消除发声过程声带和嘴唇的效应,来补偿语音信号受到发音系统所抑制的高频部分,也为了突出高频的共振峰。...功率 对语音信号的频谱取模平方,得到语音信号的线能量 提取mel刻度 计算Mel滤波器组,将功率通过一组Mel刻度(通常取40个滤波器,nfilt=40)的三角滤波器(triangular filters...Mel刻度的目的是模拟人耳对声音的非线性感知,较低的频率下更具辨别力,较高的频率下则不具辨别力。

4K91
  • 深度学习工具audioFlux--一个系统的音频特征提取库

    目录 时频变换 频谱重排 倒谱系数 解卷积 特征 音乐信息检索 audioFlux是一个Python和C实现的库,提供音频领域系统、全面、多维度的特征提取与组合,结合各种深度学习网络模型,进行音频领域的业务研发...算法除提供标准的mel/bark/erb等频谱外,还支持mel这些刻度类型的复数,同时支持mel等刻度频谱的重排。...erb - 等效矩形带宽频谱,比巴克刻度更符合人耳听觉。 octave - 八度刻度频谱,符合乐音对数刻度的频谱。 log - 对数刻度频谱。...频谱按值的类型abs、平方、log等非线性运算称为幅值、功率对数/dB,深度学习中一般使用对数多一些。...特征 audioFlux,包括数十种spectral相关的特征,包括基于音色相关特征,基于统计相关特征,基于光谱通量相关特征,基于奇异值相关特征,等等。

    2.2K110

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

    如果你像我一样,试着理解mel的光谱并不是一件容易的事。你读了一篇文章,却被引出了另一篇,又一篇,又一篇,没完没了。我希望这篇简短的文章能澄清一些困惑,并从头解释mel的光谱。 ?...FFT是信号的重叠窗口部分上计算的,我们得到了所谓的频谱。哇!需要接受很多东西。这里有很多事情要做。良好的视觉效果是必须的。 ? 您可以将频谱视为一堆相互堆叠的FFT。...当信号不同频率下随时间变化时,这是一种直观地表示信号响度或幅度的方法。计算频谱时,还有一些其他细节。y轴转换为对数刻度,颜色尺寸转换为分贝(您可以将其视为振幅的对数刻度)。...我们对频率执行数学运算,以将其转换为mel标度。 ? Mel mel是频率转换为mel标度的。使用python的librosa音频处理库它只需要几行代码就可以实现。...我们将y轴(频率)转换为对数刻度,将颜色尺寸(幅度)转换为分贝,以形成频谱。 我们将y轴(频率)映射到mel刻度上以形成mel频谱。 听起来很简单,对吧?

    5.1K21

    Python Matplotlib制作瀑布

    标签:Python,Matplotlib,瀑布 我们将用Python制作瀑布,特别是使用matplotlib库。瀑布显示了运行总数以及增减,这对于属性分析来说是很好的选择。...Matplotlib没有像“waterfall_chart()”这样的神奇函数,使我们能够用一行代码就绘制瀑布。然而,可以使用一点小小的技巧Python自定义自己的瀑布。...例如,第2行Expenses(费用),起点是110,终点是90。...数据num列随时可用,让我们创建一个新的color列来存储每个类别的适当颜色。...下面将完整的瀑布代码转换为一个方便的Python函数,以便以后可以重用它。该函数接受三个参数:包含数据的数据框架、要放置为x轴的数据列的名称以及要用作y轴的数据列的名称。

    2.7K20

    语音识别的声学特征提取:梅尔频率倒谱系数MFCC | 老炮儿改名PPLOVELL | 5th

    倒谱分析 对于一个语音的频谱,峰值表示语音的主要频率成分,也称为共振峰,而共振峰携带了声音的辨识属性,语音识别,我们需要把共振峰的位置和它们转变的过程提取出来,这个变化的过程是一条连接这些共振峰点的平滑曲线...倒(cepstrum)是一种信号的傅里叶变换经对数运算后再进行傅里叶反变换得到的。倒谱分析可用于将信号分解,两个信号的卷积转化为两个信号的相加。 ?...梅尔频率倒谱系数MFCC 梅尔频率倒谱系数MFCC考虑到了人类的听觉特征,先将线性频谱映射到基于听觉感知的Mel非线性频谱,然后转换到倒谱上。...即将频谱通过一组Mel滤波器就得到Mel频谱,公式表述就是log X[k] = log (Mel-Spectrum),这时候我们再在log X[k]上进行倒谱分析,Mel频谱上面获得的倒谱系数h[k]...(取对数,做逆变换,实际逆变换一般是通过DCT离散余弦变换来代替上文的IDFT,取DCT后的第2个到第13个系数作为MFCC系数),获得Mel频率倒谱系数MFCC。

    2.7K41

    声音处理之-梅尔频率倒谱系数(MFCC)

    最近做声音识别相关工作,故汇总整理一些声音的资料分享 梅尔(Mel)频率分析 语音识别(SpeechRecognition)和话者识别(SpeakerRecognition)方面,最常用到的语音特征就是梅尔倒谱系数...倒(cepstrum)是一种信号的傅里叶变换经对数运算后再进行傅里叶反变换得到的。倒谱分析可用于将信号分解,两个信号的卷积转化为两个信号的相加。...提取MFCC特征的过程: 1)先对语音进行预加重、分帧和加窗; 2)对每一个短时分析窗,通过FFT得到对应的频谱; 3)将上面的频谱通过Mel滤波器组得到Mel频谱; 4)Mel频谱上面进行倒谱分析(...取对数,做逆变换,实际逆变换一般是通过DCT离散余弦变换来代替上文的IDFT,取DCT后的第2个到第13个系数作为MFCC系数),获得Mel频率倒谱系数MFCC。...([1,w],A); xlabel('维数'); ylabel('幅值'); title('维数与幅值的关系') 运行上段代码需要用到matlab的语音处理工具箱,voicebox是一个MATLAB的语音处理工具箱

    1.4K20

    音频数据建模全流程代码示例:通过讲话人的声音进行年龄预测

    水平 x 轴上我们可以看到时间,而在垂直 y 轴上我们可以看到不同的频率。 3b 梅尔 作为 STFT 的替代方案,还可以计算基于 mel 标度的梅尔频谱。...计算 mel 标度,以便人类将由 mel 标度的 delta 隔开的两对频率感知为具有相同的感知差异。 梅尔的计算与 STFT 非常相似,主要区别在于 y 轴使用不同的刻度。...Hz 的频率 y 轴上占用的空间比 mel 图中要大得多 . 3c 梅尔频率倒谱系数 (MFCC) 梅尔频率倒谱系数 (MFCC) 是上面梅尔频谱的替代表示。...音乐也被称为音高。之前看到的图中,基频(也称为f0)是图像中最低的亮水平条带。而在这个基本音之上的带状图案的重复称为谐波。 为了更好地说明确切意思,下面提取基频,并在图中画出它们。...除了 words_per_second,这些特征分布的大多数都是右偏的,因此可以从对数转换获益。

    1.5K10

    音频数据建模全流程代码示例:通过讲话人的声音进行年龄预测

    水平 x 轴上我们可以看到时间,而在垂直 y 轴上我们可以看到不同的频率。 3b 梅尔 作为 STFT 的替代方案,还可以计算基于 mel 标度的梅尔频谱。...计算 mel 标度,以便人类将由 mel 标度的 delta 隔开的两对频率感知为具有相同的感知差异。 梅尔的计算与 STFT 非常相似,主要区别在于 y 轴使用不同的刻度。...虽然使用自定义过滤函数的更手动的方法可能是从音频数据中去除噪声的最佳方法,但在我们的例子,将推荐使用实用的 python 包 noisereduce。...音乐也被称为音高。之前看到的图中,基频(也称为f0)是图像中最低的亮水平条带。而在这个基本音之上的带状图案的重复称为谐波。 为了更好地说明确切意思,下面提取基频,并在图中画出它们。...除了 words_per_second,这些特征分布的大多数都是右偏的,因此可以从对数转换获益。

    1K40

    torchaudio必须熟练的14个函数

    文章目录 # -*- coding:utf-8 -*- # /usr/bin/python import torch import torchaudio import matplotlib.pyplot...频谱:从波形创建频谱。 GriffinLim :使用 Griffin-Lim 转换从线性比例幅度计算波形。 ComputeDeltas :计算张量(通常是声谱)的增量系数。...MelScale :使用转换矩阵将正常 STFT 转换为 Mel 频率 STFT。 AmplitudeToDB :这将频谱从功率/振幅标度变为分贝标度。 MFCC :根据波形创建梅尔频率倒谱系数。...MelSpectrogram :使用 PyTorch 的 STFT 功能从波形创建 MEL 频谱。 MuLawEncoding :基于 mu-law 压扩对波形进行编码。...TimeStretch :不更改给定速率的音高的情况下,及时拉伸频谱。 FrequencyMasking

    1.1K11

    使用 PyTorch 进行音频信号处理的数据操作和转换

    PyTorch 的好处可以 torchaudio 中看到,因为所有计算都通过 PyTorch 操作进行,这使得它易于使用并且感觉像是一个自然的扩展。...构建过程将在构建扩展之前获取并构建 libmad、lame、flac、vorbis、opus 和 libsox。此过程需要cmake和pkg-config。...OSX 和 Linux ,torchaudio 使用 SoX 作为后端来加载和保存文件。...:音频维度的速率(每秒采样数) specgram:具有维度(通道、频率、时间)的频谱张量 mel_specgram:具有维度(通道、mel、时间)的mel hop_length:连续帧开始之间的样本数...在这里,文档,我们使用省略号“…”作为张量其余维度的占位符,例如可选的批处理和通道维度。 贡献指南 请参考CONTRIBUTING.md 数据集免责声明 这是一个下载和准备公共数据集的实用程序库。

    3K20

    Python实现条形动态追赶动画效果

    plt.ylim(0, 100) plt.plot(x, y, color='green') plt.pause(0.01)plt.show()输出:同样,pause()函数也可以用于各种图形创建动画...以下是几个示例: 线性动画:在这个例子,我们创建了一个简单的线性,展示了线条的动画效果。通过FuncAnimation,我们可以定义动画的具体表现形式,然后将其传递给FuncAnimation。...的条形追赶动画在这个例子,我们展示了一个条形动画,每个条形都有自己的动画效果。...的散点图动画:在这个例子,我们使用随机函数Python创建了一个动画散点图。...:在这个例子,我们使用城市数据集中最高人口的城市创建了一个条形竞赛动画。

    31120

    VITS 论文笔记

    重构损失(RECONSTRUCTION LOSS) 对于目标数据,模型训练过程中使用 mel 代替原始声波,用 x_{mel} 表示。...采样 z,通过解码器得到 \hat{y} ,将 \hat{y} 转换到 mel 得到 \hat{x}_{m e l} 。...问题设置,我们旨在为后验编码器提供更多的高分辨率信息。因此,我们使用目标语音 x_{lin} 的线性尺度语作为输入,而不是 mel。注意修改后的输入并不违背变分推断的性质。...该算法使用动态规划来寻找最佳匹配,并且相邻的时间帧匹配的过程是单调递增的。换句话说,它不允许匹配过程跳过任何帧,这使得它能够更准确地匹配序列。...—— gpt3.5 直接在我们的设定应用 MAS 是困难的,因为我们的目标是 ELBO,而不是精确的对数似然。

    99340

    NumPyML 源码解析(四)

    滤波器组每个滤波器的(可能是均值归一化的)功率(即 Mel 频谱)。...计算每帧的功率 3. 将 Mel 滤波器组应用于功率以获得 Mel 滤波器组功率 4. 对每帧的 Mel 滤波器组功率取对数 5.... Mel 比例上,被听众认为感知/心理距离上相等的音高 Mel 比例上具有相等的距离。实际上,这对应于低频率具有更高分辨率,高频率(> 500 Hz)具有较低分辨率的比例。...# Mel 滤波器组的每个滤波器都是三角形的,在其中心具有响应为 1,两侧具有线性衰减,直到达到下一个相邻滤波器的中心频率。...librosa: Python的音频和音乐信号分析",*第14届Python科学会议论文集* # https://librosa.github.io # 参数 # N : int

    32410

    浅谈MFCC

    所以乘上汉明窗后,每帧还必须再经过快速傅里叶变换以得到频谱上的能量分布。对分帧加窗后的各帧信号进行快速傅里叶变换得到各帧的频谱。并对语音信号的频谱取模平方得到语音信号的功率。...将能量通过一组Mel尺度的三角形滤波器组,定义一个有M个滤波器的滤波器组(滤波器的个数和临界带的个数相近),采用的滤波器为三角滤波器,中心频率为f(m),m=1,2,…,M。M通常取22-26。...有了这些,我们计算每个滤波器的输出,计算公式如下: image.png 式的M指滤波器的个数,N指FFT的点数(上述的例子是257)。...其公式如下: image.png 将上述每个滤波器的对数能量带入离散余弦变换,求出L阶的Mel-scale Cepstrum参数。...因此,通常再加上一帧的对数能量(定义:一帧内信号的平方和,再取以10为底的对数值,再乘以10)使得每一帧基本的语音特征就多了一维,包括一个对数能量和剩下的倒频谱参数。

    1.6K10

    微软的FastSpeech AI加速真实声音的生成

    据开发团队温哥华的NeurIPS 2019会议上发表的论文介绍,该模型具有一个独特的体系结构,不仅能提高性能,还可以消除单词重复或跳过的问题。 ?...FastSpeech的长度调节器,可以调节mel-光谱序列和音素序列之间的差异。由于音素序列的长度总是小于mel序列的长度,所以一个音素对应几个mel。...然后,长度调整器根据持续时间扩展音素序列,使其与mel-光谱序列的长度相匹配。(一个互补的持续时间预测成分决定了每个音素的持续时间。)...最后,增加或减少与音素对齐的melb数量或音素持续时间,按比例调整语速。 为了验证FastSpeech的有效性,研究人员将其与开源的LJ语音数据集和相应的文本进行了测试。...将语料库随机分为12500个训练样本、300个验证样本和300个测试样本后,他们对语音质量、鲁棒性等进行了一系列详细的评估与检测。

    72030
    领券