音频处理6_时频谱

音频处理6_时频图

介绍 时频表征-分析 (time-frequency representation/analysis) 常用的 时频图

将时变信号的 “时域”(time domain)和 “频域” (frequency domain)放在一张图上称为:时频图(spectrogram)
具体方法是:

  • 将连续信号划分为足够短的离散序列(通过滑动窗口sliding windowns)
  • 序列前后会有重叠以保证信号不失真
  • 计算序列中的每一个片段的频谱(Spetrum)
  • X轴是时间序列,Y轴是频率范围,另外加一个颜色条代表某一频率的强度(值)

1. 概念

1.1 时频图

  • amplitude(振幅):

振幅指时域信号的瞬时强度或波的高度,它表示信号的最大偏离平均值的程度。
对于一个正弦波信号,振幅是从波的中心线到波峰(或波谷)的距离。

  • magnitude(幅值)

幅值是频域信号的强度,是傅里叶变换后,频谱中每个频率分量的大小。
幅值可以看作是复数频谱的模,即实部和虚部的平方和的平方根。

因此,时频图没有振幅信息,只有时间t,频域范围和频域强度

librosa库自带小号音频的代码样例:

y, sr = librosa.load(librosa.example('trumpet')) #  y.shape = (117601,)  sr = 22050

n_fft = 2048
hop_length = 512
D = librosa.stft(y, n_fft=n_fft, hop_length=hop_length)  #计算STFT D.shape = (1025, 230)  

S_db = librosa.amplitude_to_db(np.abs(D), ref=np.max) # 计算幅值谱 S_db.shape = (1025, 230)

total_duration = len(y) / sr # 总时长
time_steps = np.arange(D.shape[1]) * hop_length / sr # 时间步长

librosa.display.specshow(S_db, sr=sr, hop_length=hop_length, x_axis='time', y_axis='linear') 
#  y_axis=‘log’

x 轴:

  • 总时长(秒) total_duration = len(y) / sr = 117601/ 22050 = 5.33 seconds
  • 时间帧数 frame = signal_length/ hop_length(向上取整) = 117601/512 = 230
  • 时间步长: time_steps = total_duration / frame = 0.23 sec

y 轴:

  • 线性最大频率(Hz) = sr / 2 = 22050 / 2 = 11025 (log会被压缩,并放大低频刻度)
  • 频率点 = n f f t / 2 + 1 = 2048 / 2 + 1 = 1025 n_{fft} / 2 + 1 = 2048 / 2 + 1 = 1025 nfft/2+1=2048/2+1=1025 (y轴内的刻度数量)
  • 频率分辨率 = sr / n f f t n_{fft} nfft = 22050 / 2048 = 10.766

如果是log对数刻度,低中频范围更宽

结果1(stft的能量谱D, y为复数矩阵的绝对值):
在这里插入图片描述

结果2(计算幅值转分贝, 即y轴是S_db):

需要librosa.amplitude_to_db, 即

dB = 20 l o g 10 a m p l i t u d e n p . m a x 20log_{10}\frac{amplitude}{np.max} 20log10np.maxamplitude

np.max表述输入信号的最大值,用于归一化
在这里插入图片描述

结果3(y轴由线性linear,改为对数log):
在这里插入图片描述

中低频在y轴内更宽 (0-512Hz占一半,512-8192Hz占另一半)

1.2 梅尔时频图

梅尔尺度是一种非线性频率尺度,更接近于人耳的听觉感知。具体步骤如下:

  • 频谱平滑:应用梅尔滤波器组对 STFT 结果进行加权和求和,以得到梅尔频谱。

  • 频率分辨率:梅尔滤波器在低频部分有较高的分辨率,在高频部分有较低的分辨率,符合人耳对不同频率的感知特性。

  • 鲁棒性:平滑处理去除了频谱中的微小波动和噪声,使得提取的特征更加稳定和可靠。

包含冗余信息,反映频率能量分布,符合人耳听觉感知, mel谱如下:

在这里插入图片描述

2.梅尔频率倒谱系数

2.1 倒谱(Cepstrum)

首先区分频谱和倒谱

  • Spectrum(频谱)

频谱是信号在频域中的表示,通过傅里叶变换将时间域信号转换为频域信号,包含不同频率成分的幅度和相位信息。
频谱可识别周期性信号、诊断噪声。

  • Cepstrum(倒谱)

倒谱是对频谱的傅里叶变换的对数进行逆傅里叶变换得到,包含频谱中的周期性结构信息。
倒谱适用于分析回声延迟、声源与声道分离等特征提取。

2.2 MFCCs

梅尔频率倒谱系数(Mel-frequency cepstral coefficients, MFCCs)用于语音识别和音频分类中的常用特征。计算 MFCC 包括:

  1. 对音频信号进行短时傅里叶变换(STFT),得到频谱(即切割为小段,每段转为频谱)。

  2. 应用梅尔滤波器组,将频谱转换为梅尔频谱(用三角滤波器, 转换为Mel-scale的刻度)。

  3. 取对数梅尔频谱,再离散余弦变换(DCT)得到MFCCs。

相比mel丢失一些信息, MFCCs对非线性关系敏感,维度更低,特征独立,传统模型适用性强

整合预处理和Mel谱的转换步骤如下:

  • 预加重滤波(Pre-Emphasis),
  • 音频切片 (Slide / Framing)
  • 窗口函数 (Window)
  • mel滤波转换(Filter Bank)
  • 离散余弦变换(DCT)
  • 均值归一化 (Normalize)

注:前4步都是“mel时频图”计算,且取了对数单位将频率强度换为分贝dB单位

3. 离散余弦变换

3.1 公式

离散余弦变换 (Discrete cosine transform)的公式如下:

X [ k ] = α ∑ n = 0 N − 1 x [ n ] cos ⁡ ( π N ( n + 1 / 2 ) k ) X[k] = \alpha \sum^{N-1}_{n=0}x[n]\cos(\frac{\pi}{N}(n+1/2)k) X[k]=αn=0N1x[n]cos(Nπ(n+1/2)k)

其中:

  • α \alpha α是归一化系数,如保证变化正交性
  • x [ n ] x[n] x[n]是变换前的序列
  • 余弦项是DCT的核心变换函数

3.2 MFCCs解析

区别于一般倒谱,MFCCs使用DCT,而不是逆傅立叶变换,因此得到的是实数,而非复数

MFCCs的特点如下:

  • MFCCs用DCT目的是将信号能量进一步压缩到少数几个系数

  • MFCCs是mel时频图的进一步压缩

  • MFCCs以提取周期性特征,弱化频率特征。

下一节讲将音频从时序wave信号,变为mel时频图,最后到MFCCs的代码和可视化。

Reference

  • https://github.com/disanda/d_code/tree/master/3.Audio/5_mel_num
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值