【音频特征】语谱图的matlab提取和python提取

本文详细介绍了语谱图的原理及其在MATLAB和Python中的实现,包括非官方代码示例和官方函数的使用。同时,讨论了nfft参数、频率分辨率和自定义输出尺寸等关键点,并对比了宽带和窄带语谱图的特点。最后,引入了librosa库进行梅尔频谱图的提取,探讨了梅尔滤波器对频谱图的影响。

1. 前言

语谱图(spectrogram或specgram),也叫声谱图,可以简单看做一个二维矩阵,其纵轴表示频率,横轴表示时间,矩阵的值表示能量强弱。由于它拥有着频率和时间两个维度的信息,所以是比较综合地表示原语音信息的一种特征。另外,我将其看做语音和图像的一种连接,因为图像领域的模型发展得较快,所以通过这种方式把语音转换成一种特殊的图像再进一步处理。

2. 语谱图流程简介

  1. 将语音可交叉地分成多帧(由于语音的短时平稳性)
  2. 各帧加窗
  3. 各帧通过快速傅里叶变化(fft)得到频谱向量
  4. 沿着时间轴并联各频谱向量得到语谱图

3. 语谱图的提取

3.1 语谱图的matlab提取

先看一段非官方代码,结合上述步骤进行理解。

[x,Fs,nBits]=wavread('audio.wav');

s=length(x);    % 信号长度
w=256;            % 窗长
n=w;            % nfft,表示做fft变换需要的点数,一般为刚大于w的2的幂。举例,w=250,则n一般设为256
ov=w/2;            % 分帧的交叉程度,常见设为窗长的二分之一或四分之一
h=w-ov;            % 不重叠点数
win=hamming(n)';% 选了常见的汉明窗,并设置nfft
c=1;            % 指向当前帧的指针
ncols=1+fix((s-n)/h);    % 计算总共有多少帧
d=zeros((1+n/2),ncols);    % 语谱图初始化

for b=0:h:(s-n)    % 以下处理各帧
    u=win.*x((b+1):(b+n));    % 各帧加窗
    t=fft(u,n);                % 各帧进行fft,内容为u,nfft=n。对于fft,输入n个时域点,输出n个频域点
    d(:,c)=t(1:(1+n/2))';</
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值