音频入门: 最全面详细的Mel频谱和MFCC讲解
目录
- 前言
- 算法流程
- 1. 预加重(Pre-emphasis)
- 2. 分帧(Frame)
- 3. 加窗(Window)
- 4. 短时傅里叶变换(STFT)
- 5. 滤波器组过程(Filter bank)
- 6. 非线性校正(Rectification)
- 7. 离散余弦变换(DCT)
- 8. 能量和delta
- 相关细节
- 1. weight-A计权
- 2. overlap重叠
- 3. window窗函数
- 4. rectification非线性校正
- 各种刻度
- 1. 其它刻度
- 2. Gammatone filter
- 3. 刻度频谱
- 4. 可能的问题
- 滤波器组
- 1. 概念
- 2. 归一化
- 3. 不同的窗
- 4. 加窗方式
- 倒谱系数
- 1. 概念
- 2. 倒谱应用
- 3. 延展
- 总结
前言
在音频领域,mel频谱和mfcc是非常重要的特征数据,在深度学习领域通常用此特征数据作为网络的输入训练模型,来解决音频领域的各种分类、分离等业务,如端点侦测、节奏识别、和弦识别、音高追踪、乐器分类、音源分离、回声消除等相关业务。
当然,针对深度学习音频领域的业务,不是用下这两个特征、选几个网络、打个标签,放数据训练就完事了, 仅仅基于mel频谱和mfcc这两个特征,解决好上述业务某些情况下还是远远不够的,熟悉这些特征的内在逻辑性、衍生细节和延展,才能更好的结合深度学习解决业务问题。
下面讲解mel频谱和mfcc特征的算法流程和一些细节、延展,这些细节从局部角度来看,都会影响到最终特征呈现的细节差异,这些差异放大到模型训练结果的准确性、鲁棒性上怎么样是非常值得研究的,某些情况下可能会有质的变化,质的变化无论正向还是负向都是值得关注的,最怕的是没变化;同时,一些问题的延展从广义角度来看,带来不同的特征组合、网络结构设计思考等也是解决业务问题非常重要的思想源泉。
注: 文中一些图例来自开源项目audioFlux: https://github.com/libAudioFlux/audioFlux
算法流程
设 sr 为采样率,fftLength 为帧长度,slideLength 为滑动长度
下面是一张mel频谱和mfcc的大概算法流程图。
1. 预加重(Pre-emphasis)
如流程图所示的第1步,属于信号的预处理,补偿高频分量损失,提升高频分量,一般情况下可以忽略此步骤,属于信号的简单增强,对特征有一定的提升效果。公式如下
x [ n ] = x [ n ] − α x [ n − 1 ] x[n]=x[n]-\alpha x[n-1] x[n]=x[n]−αx[n−1]
α \alpha α一般取0.97
公式属于差分一阶即高通滤波器。
2. 分帧(Frame)
现实中大多数信号都是非平稳的,但大多数短时间内可以近似看做是平稳的,可以用短时傅里叶变换表现非平稳信号频域特征。 一般语音中采用10ms~30ms左右,乐音中可以更长一些64ms~256ms。
分帧涉及到前后重叠(overlap),一般情况下以滑动帧长的1/4或1/2(前后重叠3/4或1/2)进行,即 s l i d e L e n g t h = f f t L e n g t h 4 或 f f t L e n g t h 2 slideLength=\cfrac{fftLength}4或\cfrac{fftLength}2 slideLength=4fftLength或2fftLength。
3. 加窗(Window)
加窗目的是减少频谱泄露,降低泄漏频率干扰,提升频谱效果,默认不处理即加矩形窗(Rect),干扰泄漏较严重,一般情况下加Hann窗,针对大多数信号都有不错的效果。公式如下
w ( n ) = 0.5 ( 1 − cos ( 2 π n N ) ) , 0 ≤ n ≤ N w(n)=0.5\left( 1-\cos \left(2\pi \cfrac n{N} \right)\right) , 0 \le n \le N w(n)=0.5(1−cos(2πNn)),0≤n≤N
Hann为余弦窗,N表示阶数。
4. 短时傅里叶变换(STFT)
分帧加窗傅里叶变换即短时傅里叶变换。公示如下
X ( τ , f ) = ∫ − ∞ ∞ x ( t ) w ( t − τ ) e − j 2 π f t d t X(\tau,f)=\int_{-\infty}^\infty x(t)w(t-\tau)e^{-j2\pi f t}dt X(τ,f)=∫−∞∞x(t)w(t−τ)e−j2πftdt
X ( m , k ) = ∑ n = 0 N − 1 x [ n ] W [ n − m ] e − j 2 π k n N X(m,k)=\sum_{n=0}^{N-1} x[n]W[n-m]e^{\frac{-j2\pi kn}{N} } X(m,k)=n=0∑N−1x[n]W[n−m]eN−j2πkn
设数据长度为 dataLength,
t = { ( d a t a L e n g t h − f f t L e n g t h ) s l i d e L e n g t h + 1 , 无填充 d a t a L e n g t h s l i d e L e n g t h + 1 , 填充 f f t L e n g t h t=\begin{cases} \cfrac{(dataLength-fftLength)}{slideLength}+1, &无填充 \\ \cfrac{dataLength}{slideLength}+1 , &填充fftLength\end{cases} t=⎩ ⎨ ⎧slideLength(dataLength−fftLength)+1,slideLengthdataLength+1,无填充填充fftLength
STFT属于标准的数学变换,为复数域,尺寸为 t ∗ f f t L e n g t h t*fftLength t∗fftLength,为表示区分,一般的如 ∣ X ( m , k ) ∣ |X(m,k)| ∣X(m,k)∣取模,尺寸为 t ∗ ( f f t L e n g t h / 2 + 1 ) t*(fftLength/2+1) t∗(fftLength/2+1) 表示为STFT频谱,有以下类型频谱。
∣ X ( m , k ) ∣ |X(m,k)| ∣X(m,k)∣,STFT幅值频谱
∣ X ( m , k ) ∣ 2 |X(m,k)|^2 ∣X(m,k)∣2,STFT功率频谱
log ( ∣ X ( m , k ) ∣ ) \log(|X(m,k)|) log(∣X(m,k)∣),STFT dB(分贝)频谱
20 log ( ∣ X ( m , k ) ∣ f f t L e n g t h ) 20\log\left(\cfrac{|X(m,k)|}{fftLength}\right) 20log(fftLength∣X(m,k)∣),STFT标准dB频谱
注:
- dB频谱属于相对谱,加减乘除对频率相对dB值没影响,标准dB频谱相当于建立一个基准参考线,方便分析频谱和量化,大多数频谱示例都是此种类型。
- 深度学习中使用dB谱训练大多数要优于其它数值类型的频谱。
5. 滤波器组过程(Filter bank)
此过程是计算mel频谱关键部分和mfcc的重要一步。流程图如下
mel刻度(scale)是一种基于人耳听觉设计的log压缩刻度,人耳针对低频比较敏感,高频不太敏感,比如110hz和116hz一般人都能区分出来,但4000hz和4100hz大部分分不出来。mel刻度和hz的转换公式如下
{ m e l = 2595 log 10 ( 1 + h z 700 ) h z = 700 ( 1 0 m e l 2595 − 1 ) \begin{cases} mel=2595\log_{10}(1+\cfrac{hz}{700}) \\ hz=700(10^{\frac{mel}{2595}}-1) \end{cases} ⎩ ⎨ ⎧mel=2595log10(1+700hz)hz=700(102595mel−1)
图中前三个步骤即根据业务fre边界和num频带个数计算mel刻度下所映射的freBandArr。
接下来就是STFT频带如何映射到mel刻度的频带,用频带加三角窗进行计算mel刻度的filterBank matrix,三角窗公式如下
w ( n ) = { 2 n N , 0 ≤ n ≤ N 2 2 − 2 n N , N 2 ≤ n ≤ N w(n)=\begin{cases} \cfrac{2n}N, & 0 \le n \le \cfrac N{2} \\ 2-\cfrac{2n}N, & \cfrac N{2} \le n \le N \end{cases} w(n)=⎩ ⎨ ⎧N2n,2−N2n,0≤n≤2N2N≤n≤N
如下图
当然这个是对称的,线性频带用对称的没问题,mel刻度产生的频带log比例,左右不会对称,这时候使用三角窗就是非对称的,下面是mel刻度的filterBank matrix公式
w ( k , h ) = { h − f k − 1 f k − f k − 1 , f k − 1 < h ≤ f k f k + 1 − h f k + 1 − f k , f k < h ≤ f k + 1 0 , o t h e r w(k,h)=\begin{cases} \cfrac{h-f_{k-1}}{f_k-f_{k-1}}, & f_{k-1}<h\le f_k \\ \cfrac{f_{k+1}-h}{f_{k+1}-f_k} , & f_{k}<h\le f_{k+1} \\ 0, & other \end{cases} w(k,h)=⎩ ⎨ ⎧fk−fk−1h−fk−1,fk+1−fkfk+1−h,0,fk−1<h≤fkfk<h≤fk+1other
下面给出一个简单的示意图
最后,一般使用STFT功率频谱和filterBank matrix做矩阵乘法运算即得出mel功率频谱。
6. 非线性校正(Rectification)
对上一步mel功率频谱取log运算,即mel dB频谱就是通常所使用的“mel频谱”,一般情况下5、6步作为一个整体看待,合到一块可以理解为mel频谱的计算。
下面是STFT频谱和mel频谱(num=128)的效果对比图。
注: 图例来自开源项目audioFlux: https://github.com/libAudioFlux/audioFlux
7. 离散余弦变换(DCT)
离散余弦变换,即数据为偶函数的实数傅里叶的变换,有去相关和能量集中特点。公式如下
X [ k ] = ∑ n = 0 N − 1 x [ n ] e − j 2 π k n N = ∑ n = 0 N − 1 x [ n ] [ cos ( 2 π k n N ) − j sin ( 2 π k n N ) ] X[k]=\sum_{n=0}^{N-1}x[n]e^{\frac{-j2\pi kn}{N} }=\sum_{n=0}^{N-1}x[n] \left[ \cos(\frac{2\pi kn}{N} )-j\sin( \frac{2\pi kn}{N} ) \right] X[k]=n=0∑N−1x[n]eN−j2πkn=n=0∑N−1x[n][cos(N2πkn)−jsin(N2πkn)]
当 sin ( θ ) = 0 \sin(\theta)=0 sin(θ)=0,即DCT变换, cos ( θ ) = 0 \cos(\theta)=0 cos(θ)=0,即DST变换。
DCT变换,属于数据高度去相关后的特征反映,由于能量集中的特点,在数据压缩领域广泛常用,一般的,DCT考虑到数据解析延拓时中间点选取、边界、方式等情况有8种对应变换,常用的为DCT-II变换,公式如下
X ( k ) = ∑ n = 0 N − 1 x [ n ] cos [ π N ( n + 1 2 ) k ] X(k)=\sum_{n=0}^{N-1}x[n]\cos\left[\frac \pi{N}(n+\frac{1}2)k\right] X(k)=n=0∑N−1x[n]cos[Nπ(n+21)k]
mel频谱经过DCT变换后得到倒谱系数(cepstral coeffs)即MFCCs。
8. 能量和delta
能量和delta的计算属于mfcc特征体系下的可选操作。
能量特征相当于给mfcc加上bias偏置,具有一定抗噪作用,公式如下
e n e r g y = ∑ n = 1 N x 2 [ n ] = 1 N ∑ m = 1 N ∣ X [ m ] ∣ 2 energy=\sum_{n=1}^N x^2[n] =\frac{1}{N}\sum_{m=1}^N |X[m]|^2 energy=n=1∑Nx2[n]=N1m=1∑N∣X[m]∣2
根据公式,可以从时域计算,也可以基于频域计算,很明显,这样计算出的结果动态范围太小,一般针对结果取log运算即 e n e r g y = log ( ∑ n = 1 N x 2 [ n ] ) energy=\log(\sum_{n=1}^N x^2[n] ) energy=log(∑n=1Nx2[n]),又称log能量,可以替换首个mfcc直流分量值或首位置追加。
delta是计算数据的变化,基于当前点区域的局部斜率最小二乘近似值,公式如下
d e l t a = ∑ k = − M M k x [ k ] ∑ k = − M M k 2 delta=\cfrac{\sum_{k=-M}^Mkx[k]}{\sum_{k=-M}^Mk^2} delta=∑k=−MMk2∑k=−MMkx[k]
M为阶数,为奇数,一般取9
针对mfcc计算其delta,然后再计算delta的delta,可以侦测mfcc状态的变化,变化的变化,可以作为mfcc的两组辅助特征参与网络模型的训练,某些情况下起到更好的准确性和泛化能力。
mfcc相关效果图如下
注: 图例来自开源项目audioFlux: https://github.com/libAudioFlux/audioFlux
综上所有,详细描述解释了算法流程中每一步计算流程,下面将对一些步骤流程涉及到的细节思考点和延伸点做深入的展开。
相关细节
1. weight-A计权
针对上面预加重方式而言,本质上是一个高通滤波器,是衰减低频的,本身并不会提升高频,“补偿高频分量损失,提升高频分量”并不太严谨但比较形象,衰减低频相对来说就是变相提升高频,是缩减高低频动态范围的。
为什么要缩减高低频动态范围,有没有更好的方式,答案就是weight-A计权。
上面有提到“人耳对低频比较敏感,高频不太敏感”,这个敏感是针对频率分辨而言的,针对频率的强度而言,这句话是反过来的即人耳对高频比较敏感,低频不太敏感,以吉他乐器为例,用同样力度拨最粗和最细的弦发出的音,即物理上两者强度(振幅)是一样的,但听觉上高频比低频要响的多,人们用weight-A计权来量化这种“响度”的心理指标,数学上表示不同频段的log函数加减,效果如下图。
如图所示,整个频段不仅有衰减、还有真正的提升区域。
针对一些业务的深度学习模型训练,加weight-A计权能提升4%~5%左右精度。
2. overlap重叠
数据分帧涉及到帧长和重叠两个问题,帧长决定频域的频率分辨率和时域的时间分辨率,帧长越长,频域分辨率越精确,时域分辨率越模糊,但受限大多数信号本身非平稳特点不可能无限长,帧长越短,时域分辨率越精确,频域分辨率越模糊。
重叠问题,就是相对当前帧滑动的问题,如上面分帧流程所述一般情况下滑动帧长的1/4或1/2,当然,滑动长度也可以等同帧长(前后重叠为0),甚至超过帧长(没有重叠,前后跳跃)。
重叠多少还是不重叠还是跳跃,本身并不会提升时域分辨率,可以理解为频谱t维度的不同时间间隔采样,滑动小相当于频谱图的插值升采样,滑动大相当于频谱图的抽取降采样,针对端点侦测业务频域的相关算法,滑动太小或跳动过大都不会有好的效果,如下面效果对比。
如图所见,紫色和绿色是滑动极小和跳动过大效果。
针对端点侦测相关业务,选择合适帧长后,前后滑动一般没有重叠或少许跳动效果相对好一些。
3. window窗函数
时域加窗目的是减少频谱泄露,上述算法流程描述中,一般情况下加Hann窗,但窗函数有很多,如Triang,Hann,Hamm,Guass,Kaiser,Flattop,Blackman等等。
不同窗如何选择,在深度学习一些业务中,不同窗的选择对模型的训练和结果影响是怎样的,或者哪些窗在业务中是值得做尝试的。
Guass,Kaiser非常值得尝试,公式如下
{ g u a s s ( n ) = e − n 2 / 2 σ 2 = e − 1 2 ( α n ( N − 1 ) / 2 ) 2 , − ( N − 1 ) / 2 ≤ n ≤ ( N − 1 ) / 2 k a i s e r ( n ) = I 0 ( β 1 − ( n − N / 2 N / 2 ) 2 ) I 0 ( β ) , 0 ≤ n ≤ N \begin{cases} guass(n)=e^{-n^2/2\sigma^2} =e^{ -\frac12 \left( \alpha \frac{n}{ (N-1)/2 } \right)^2} , -(N-1)/2 \le n \le (N-1)/2 \\ kaiser(n)=\cfrac {I_0 \left( \beta \sqrt{1- \left( { \cfrac {n-N/2}{N/2} } \right)^2 } \right) } {I_0(\beta)} , 0 \le n \le N \end{cases} ⎩ ⎨ ⎧guass(n)=e−n2/2σ2=e−21(α(N−1)/2n)2,−(N−1)/2≤n≤(N−1)/2kaiser(n)=I0(β)I0 β1−(N/2n−N/2)2 ,0≤n≤N
针对Guass:
σ = ( N − 1 ) / ( 2 α ) \sigma=(N-1)/(2\alpha) σ=(N−1)/(2α), 两者之间互为反比
默认 α = 2.5 \alpha=2.5 α=2.5
针对Kaiser:
I 0 ( β ) I_0(\beta) I0(β)为零阶第一类修正贝塞尔函数,可有下面公式级数计算,
I 0 ( β ) = 1 + ∑ k = 1 ∞ [ 1 k ! ( β 2 ) k ] 2 I_0(\beta)=1+\sum_{k=1}^{\infty} \left[ \cfrac1{k!} \left (\cfrac \beta 2 \right)^k \right] ^2 I0(β)=1+∑k=1∞ k!1(2β)k 2,一般取 15 15 15项左右
默认 β = 5 \beta=5 β=5
Gauss,Kaiser相比其它大多数窗而言,属于窗口可变窗,一般窗口宽度越大,分辨率越细,过渡带越小,但阻带衰减偏大;一般窗口宽度越窄,分辨率越大,过渡带越大,但阻带衰减偏小。
针对Guass和Kaiser这两种可以调整宽度的窗,在一些业务中可以选择最大化旁瓣衰减,用相应的频谱特征训练深度学习业务模型时,可能会有不错的表现。
4. rectification非线性校正
上述算法流程描述中,一般而言5、6步合到一起是标准的频谱呈现结果,但从功率频谱非线性校正角度而言,
不止log函数一种,当然log是最重要最常用的一种,可以用cubic root(三次开方),类Relu等其它方式。
从深度学习角度来看,可以把类mel频谱当做一种网络层计算,log、cubic root等非线性操作当做激活函数。
从这个角度来看,针对不同的业务,激活函数的不同选择设计,对模型的训练和结果的影响有可能是天翻地覆的,在研发业务中是很值得关注测试的一个点。
各种刻度
1. 其它刻度
mel频谱如此知名,难道做音频领域深度学习就只有mel频谱?当然不是,有些情况mel频谱不一定是最优的。
如上面算法流程描述中mel刻度的解释,是一种基于人耳听觉设计的log压缩刻度,后面发展出更准确人耳听觉模型刻度,Bark和ERB刻度,公式如下
b a r k = 26.81 h z 1960 + h z − 0.53 , h z = 1960 ( b a r k + 0.53 26.81 − b a r k ) bark=\frac{26.81hz}{1960+hz}-0.53, \quad hz=1960(\frac{bark+0.53}{26.81-bark}) bark=1960+hz26.81hz−0.53,hz=1960(26.81−barkbark+0.53)
e r b = A log 10 ( 1 + 0.00437 h z ) , h z = 1 0 e r b A − 1 0.00437 \quad erb=A\log_{10}{(1+0.00437hz)}, \quad hz=\frac{10^{\frac{erb}A}-1}{0.00437} erb=Alog10(1+0.00437hz),hz=0.0043710Aerb−1
A = 1000 ln ( 10 ) ( 24.7 ) ( 4.37 ) A=\frac{1000\ln(10)}{(24.7)(4.37)} A=(24.7)(4.37)1000ln(10)
2. Gammatone filter
g ( t ) = a t n − 1 e − 2 π b t cos ( 2 π f c t + ϕ ) g(t)=at^{n-1}e^{-2\pi bt}\cos(2\pi f_ct+\phi) g(t)=atn−1e−2πbtcos(2πfct+ϕ)
公式中 a t n − 1 e − 2 π b t at^{n-1}e^{-2\pi bt} atn−1e−2πbt 部分为 Γ \Gamma Γ 形式函数, cos \cos cos 理解为tone,称之为gammatone。
一般情况下,人耳听觉模型中的ERB刻度和gammatone filter的bandwidth相关联,即b为ERB刻度的bandwidth。
基于这个滤波器求频响非常复杂,只能给出近似公式,论文公式推导足足有20多页,已超过大部分人的研究上限,即使拿论文的结果公式直接编程实现也不轻松。幸运的是audioFlux开源项目有比较标准的实现,感兴趣的朋友可以研究一下。
3. 刻度频谱
除了上述刻度以外,还有基于乐音八度的octave刻度,更通用的log刻度等等,基于上面算法流程,mel刻度产生mel频谱和mfcc特征,同样的流程,bark/erb等刻度产生对应的bark/erb频谱和相应倒谱系数,一些不同刻度频谱的对比图如下
注: 图例来自开源项目audioFlux: https://github.com/libAudioFlux/audioFlux
更多的不同刻度频谱类型可尝试使用audioFlux库测试。
4. 可能的问题
在一些业务中,比如乐器相关业务中,上面所有的刻度中,可能都会有一些小问题,针对低频的频带,可能有些已经小于STFT的最小分辨率,这时候显然没意义,额外的造成干涉发散效果;针对中频的频带,有些可能过大,分辨不够细;针对高频的频带,可能还不够大,分辨还是相对过小。
上述情况下,在一些业务中,特定的一些网络结构中,中低频的分辨率差可能会导致训练模型的欠拟合,很难达到一定准确度,或者高频的分辨率过小可能会导致训练模型的欠拟合,泛化能力差,出现这种情况后可以尝试以下方式:
1,适当的增加数据集、调整网络结构和参数等通用方式。
2,增加不同维度的特征输入,让网络找到最优解或跳出局部最优解。
3,自定义刻度,既然明确原因,从特征本身优化上入手。
综上,不同scale下产生的频谱数据高低频细节、能量聚集、对比度都会有不同的差异,这种差异放大到一些业务实践中,模型的准确度和鲁棒性怎么样,就非常有尝试研究价值。
在深度学习一些业务中,如果mel刻度下的相关特征可以出结果,使用bark相关特征替换,往往有一定的效果提升。
滤波器组
1. 概念
数字信号中,滤波器有基础的高通滤波器和低通滤波器, 带通滤波器可以有低通和高通串联而成,Filter bank可以理解为多个带通滤波器。
滤波器组是一个映射矩阵,表示STFT线性频带和不同刻度下的频带映射关系,至于怎么映射,就是算法流程描述第5步中的三角窗函数法,三角窗的Filter bank如下图所示
2. 归一化
如上图所示,一般刻度产生的频带,低频带宽小,高频越来越大,意味着高频区域很长的一段频带都会参与当前频率分量的映射计算,相对低频而言显然不太合理,这时候需要对Filter bank进行归一化处理。
归一化方式有以带宽和面积区域两种方式,以带宽方式归一化效果如下图
3. 不同的窗
针对Filter bank的计算,难道就只有三角窗函数法,当然不是,可以使用Rect,Hann,Hamm等等这些窗函数,Gammatone也是一种特殊的窗函数,某种角度上讲甚至可以不计算,下面是几种不同窗下Filter bank的对比图
下面是不同窗下的频谱对比图
注: 图例来自开源项目audioFlux: https://github.com/libAudioFlux/audioFlux
图中Slaney和ETSI是两种不同类型的三角窗,其它更多窗类型测试可尝试使用audioFlux库。
4. 加窗方式
窗函数重叠处处理有很多细化方式,频带前后窗都是有重叠的,一般的处理方式是重叠点后面不再参与之前计算,重叠点之前不再参与之后计算,如下面图所示
如果各个频带窗函数可以等比例缩放,这样的话对不同刻度下的频带都变成可调整的,窗函数不同的宽度选择,对应时频分辨率不同的变化,结合PWT(伪小波变换),就是另外一种CWT效果的同等变体,不同于CWT对波函数的限定要求,可以用更广泛的窗函数研究CWT。
综上,针对Filter bank的计算,**加什么窗?怎么加窗?何种归一化方式?**使用这些组合产生出更多细粒度的不同特征,训练出模型准确性和鲁棒性如何,是非常值得尝试研究的。
倒谱系数
1. 概念
什么是倒谱系数,为什么DCT计算后是倒谱系数?
倒谱的标准公式定义如下
C ( r ) = F { log ( F { f ( t ) } ) } C(r)=F\{\log(F\{f(t)\})\} C(r)=F{log(F{f(t)})}
数据经过FFT变换后取log后,再次FFT变换一般称为倒谱,更广义的讲即时域数据经过FFT变为频域数据,频域数据再次
FFT变换即倒谱变换。
DCT是DFT的特例,所以DCT针对之前FFT结果再次变换符合上述公式概念定义,也称倒谱系数;相比DFT,DCT能量较聚集,相当于频谱数据的再压缩,用小部分系数就能反映出数据的高度去相关的特征。
2. 倒谱应用
倒谱可以干什么?
可以估算音高,可以作为解卷积(deconv)的一种方式,分离信号,计算包络(envelope)/共振峰(Formant)等等,
解卷积推导公式如下
{ x ( t ) = g ( t ) ∗ h ( t ) F { x ( t ) } = X ( ω ) = G ( ω ) H ( ω ) log X ( ω ) = X ^ ( ω ) = G ^ ( ω ) + H ^ ( ω ) F − 1 { X ^ ( ω ) } = x ^ ( k ) = g ^ ( k ) + h ^ ( k ) \begin{cases} x(t)=g(t)*h(t) \\ F\{x(t)\}=X(\omega)=G(\omega)H(\omega) \\ \log X(\omega)=\hat X(\omega)=\hat G(\omega)+\hat H(\omega) \\ F^{-1}\{\hat X(\omega)\}=\hat x(k)=\hat g(k)+\hat h(k) \end{cases} ⎩ ⎨ ⎧x(t)=g(t)∗h(t)F{x(t)}=X(ω)=G(ω)H(ω)logX(ω)=X^(ω)=G^(ω)+H^(ω)F−1{X^(ω)}=x^(k)=g^(k)+h^(k)
3. 延展
分数傅里叶变换(FRFT)
根据倒谱的定义,延展一下,能否多次FFT,多次FFT的意义是什么,多次变换引申如下
F 2 = F ( F ( x ) ) F^2=F(F(x)) F2=F(F(x))
F n ( x ) = F ( n − 1 ) ( F ( x ) ) F^n(x)=F^{(n-1)}(F(x)) Fn(x)=F(n−1)(F(x))
设 n = 2 ϕ π n=\frac{2\phi}\pi n=π2ϕ,换元后定义
F ϕ ( x ) = F 2 ϕ / π ( x ) F_\phi(x)=F^{2\phi/\pi}(x) Fϕ(x)=F2ϕ/π(x)
引用 ϕ \phi ϕ后,FFT变换的次数可以非整数即分数傅里叶变换,物理意义的表现就是旋转频谱一定角度,可以多一个维度分析频谱,同时也带来其它概念的延伸,如分数卷积等等。
总结
本文大体上分四个部分,算法流程详细描述解释了每一步计算流程,相关细节算是简单步骤流程的细节点思考和延展,各种刻度、滤波器组、倒谱系数算是重要概念和重要步骤的细节点思考和延展。
音频入门: 最全面详细的Mel频谱和MFCC讲解相关推荐
- 数字信号处理实验三用fft对信号作频谱分析_机器学习中的音频特征:理解Mel频谱图...
如果你像我一样,试着理解mel的光谱图并不是一件容易的事.你读了一篇文章,却被引出了另一篇,又一篇,又一篇,没完没了.我希望这篇简短的文章能澄清一些困惑,并从头解释mel的光谱图. 信号 信号是一定量 ...
- 读 wav 音频画 mel 频谱图(python)
代码功能: 读取wav音频文件 以10s为一个单位截取音频,只截取每个音频的前60s 调用librosa音频处理函数对10s音频进行mel频谱操作 调用Matplotlib图像处理函数进行频谱图的绘画 ...
- mel频谱--学习笔记
信号: 是一定量随时间的变化. 对于音频,变化的量是气压. 可以随时间采集气压样本. 采样数据的速率可以变化,但是最常见的是44.1kHz,即每秒44,100个采样. 捕获的是信号的波形. 傅立叶变换 ...
- 语音处理:音频入门之基础概念总结
语音处理:音频入门之基础概念总结 基本概念 语音增强 基本概念 过采样:超过音频本身实际带宽的采样率,如音频带宽12kHz,用96kHz采样属于过采样,用24kHz采样则较为合理.上采样,也属于过采样 ...
- Postman:Postman简介、安装、入门使用方法详细攻略
Postman:Postman简介.安装.入门使用方法详细攻略 目录 Postman简介 Postman安装 Postman入门 1.图文教程 1.1.get案例 1.2.post案例 1.3.get ...
- HTML5div css入门案例,div+css教学教案(学习入门到精通~)详细讲解.doc
| div+cssHYPERLINK "/"教程(入门到精通) 目录: 一.div+css教程(入门到精通)详细讲解 二.DIV+CSS网页布局常用基础知识 三.div+css常用 ...
- HTML入门学习笔记+详细案例
✨HTML入门学习笔记+详细案例 作者介绍:
- 蚂蚁课堂 - springboot入门(非常详细)讲解人:(余胜军)
蚂蚁课堂 - springboot入门(非常详细)讲解人:(余胜军) http://www.mayikt.com/course/video/1172
- 【台大郭彦甫】Matlab入门教程超详细学习笔记二:基本操作与矩阵运算(附PPT链接)
Matlab入门教程超详细学习笔记二:基本操作与矩阵运算 前言 一.基本操作 1.把matlab当作计算器使用 2.变量 3.控制格式输出 二.矩阵运算 1.矩阵 2.矩阵索引 3.使用:创建向量 4 ...
最新文章
- Linux与云计算——第二阶段Linux服务器架设 第八章:FTP服务器架设—安装配置FTP服务和客户端配置...
- 掌握4个基本点 不被云计算忽悠
- 检测到目标服务器启用了trace方法_综述:目标检测中的多尺度检测方法
- python与其他编程语言对比优点_Python编程不同于其他编程语言的优点
- 2019年四月计算机语言排名,2019编程语言排行榜_编程语言排行榜2019年4月 TIOBE编程语言排行榜2019年最...
- php新订单提醒代码,PHP怎么实现新订单提醒功能
- 链表数据结构图解 和 代码实现
- 系统地学习JavaScript
- Toolbar详解 · Material Design Part 2
- senborn绘制混淆矩阵
- mysql中首字母大写的函数,如何借助MySQL函数将字符串的首字母大写?
- Multicarrier Interpretation of OTFS(OTFS的多载波解释)(7)⭐
- Unity3D游戏开发学习线路图附全套视频教程2019最新版
- HTML页面跳转的5种方法
- 人工智能杂记 人工智能简史
- WES分析1-外显子测序
- PR值与网站权重的关系
- h3c交换机重启_h3c交换机重置命令_h3c交换机如何初始化
- Opencv环境的配置与基本使用
- linux opengl配置编译,Linux下OpenGL的安装与cmake编译OpenGL程序