因为很多数学知识一段时间不用就老是会忘记,因此特开此节记录一些本领域会用到的一些数学基础知识
傅里叶变换
核心思想
任何信号都可以看作是若干个不同频率、不同幅值和相位的正弦波的叠加
复数与欧拉公式
对于一个复指数,有
复数(代数形式a+bi),r为模,为实部虚部的平方根;由欧拉公式可得:
数学定义
性质
线性性
时移性
频移性
卷积定理
时域卷积等价于频域乘积
对偶性
物理意义与理解
具体分析可以看:傅里叶变换后面的到底有什么小秘密 - 知乎
通过取不同的ω,傅里叶变换可以将一个时域信号分解为不同频率上的复数值。根据欧拉公式我们可以看出,将时域信号与复指数相乘,本质上就是:将时域信号 x(t) 投影到多组正交基上(因为cos和sin相位差90,正交),将信号分解为了实部(余弦波)和虚部(正弦波):
实部 (Real Part): 描述信号中与 cos同相的部分。
虚部 (Imaginary Part): 描述信号中与 sin 同相的部分(滞后 90°)。
当信号中存在与ω同频分量时,就会投影得到一个复数域矢量。而由于实部和虚部是线性无关、相互垂直的两根轴线,我们便可根据这组正交基描述复平面上的信号矢量的模长(幅值)和与参考轴的夹角(相位)
总结一下,就是:我们将信号与复指数进行内积(投影)计算,而由于欧拉定理,计算得到的结果可以被正交分解到复数域。而通过复数域性质,我们便可通过实部和虚部表达该矢量的幅值和相位。
补充,关于内积与互相关
内积是互相关函数在τ=0时的值,内积是一个值,互相关是一个函数,表示不同时间差时两个信号的相关程度。
而对于连续傅里叶变换,其是把信号与不同频的复指数在每一个时刻的内积值进行求和,而对于不同频的信号,其内积是为0的,(积分域满足周期区间),也就是正交,因此傅里叶变换可以区分不同频的信号
逆傅里叶变换
IFT和FT在算法架构上几乎完全一样:(以离散为例)
相当于在n时间点上,将该时间点对应的所有频率分量(矢量)进行相加
使用条件(狄利赫里条件)
绝对可积性
信号整体能量必须是有限的,即信号不能无限增长
函数在有限区间内连续或只有有限个第一类间断点
在一个周期内函数有有限个极大值或极小值
从FT到常用的FFT
已知连续傅里叶变换:
时间离散化(采样)
虽然一般我们处理的数据都是默认离散数据,但既然都到这里了,就顺便提一下这一块知识。
对于连续信号的采样,可以使用冲激函数表达:
因为时域相乘等价于频域卷积,而冲激串在频域上表现仍为等距(f_s)冲激串,因此原信号在频域上会表现为以f_s的距离复制出现,当信号的最大频率成分大于采样率f_s时就会出现混叠现象,因此也有了奈奎斯特定理:
这里2倍关系是由于对于声音等实信号,其傅里叶变换结果是一个双边谱(共轭对称),这点可以从欧拉公式体现出
离散傅里叶变换DFT
对频率同样进行离散化后,将其和x[n]带入FT公式中则有:
其中k,n=0,1,2…,k代表频率索引,n代表时间索引,N为时域总采样点数。
这里有一点需要提一下,对于离散复指数:(由欧拉公式得)
因此对于连续的X(w),其是2pi周期的,因此对频率离散采样中是2pi/N
也许你会有一个疑问:频域的采样规则要遵循时域采样数N吗?是的,且必须完全一致,这于正交频率基相关,不详细展开(其实我也看不懂),这也解释了为什么我们在使用一些FFT库函数的时候,输入参数n后,时域数据会首先被剪切为n长度,最终输出的频域bin数量也为n
(这也是我之前的一个误区,我一直以为输入的参数n只决定最终输出的频率bin数量,我还一直读取一个爆长的时域数据,结果最后函数只会使用前n个数据)
对于常用的FFT,其不是一种新的变换,而是DFT的高效计算算法,在结果完全等价的前提下,大幅降低了计算量
能量谱与功率谱
感觉没啥好说的,能量谱分析能量有限信号(冲击、单个脉冲等),功率谱(密度)则分析功率有限信号(大多数信号,包括平稳信号、周期信号等),因为功率谱会对能量除以时间T,因此更稳定
倍频程分析
频率比例关系
在倍频程分析中,相邻频带的频率呈指数比例关系。对于 1/n倍频程,其频率比例因子 G 定义为:
对于常见的1/3倍频程,G约为1.2599
中心频率与截至频率
对于不同的倍频程关系,在数学上,根据如下关系定义其滤波器的中心频率:
国际和国标均已规定了各频程中心定律
由滤波器的截止频率定义:
上下限的截止频率可以直接通过中心频率乘除倍频比例的1/2指数倍得到:
可以看出当倍频程确定时,仅中心频率影响截止频率大小。由于中心频率一直在增大,因此越高频的倍频程滤波器,其带宽就越大,由上述公式可以得到带宽:
并且带宽与中心频率的比例是固定的
综上,对于各频程关系,其中心频率和带宽都有严格的标准(也就是写死的),只用知道其对低频分的更细,高频滤波器则更加稀疏且宽大
应用于傅里叶变换
对于FFT得到的线性频率(离散值),直接将每个频率点与当前频程频带(滤波器范围)对应,直接对频带内能量求和(对于连续值则是功率求积分),即可得到倍频程谱图
Mel频谱
Mel 尺度(Mel Scale)在 STFT(短时傅里叶变换)的基础上核心解决了一个问题:计算机频率与人类听觉感知的非线性对应关系。STFT 得到的是线性频率谱,而 Mel 尺度将其转换为了仿生频率谱(低频放大,高频压缩)。
其主要计算流程如下:
使用对数映射对FFT的线性频率重新取值:
根据上一步得到的mel频率取值m,设计一组三角滤波器。该滤波器会:
- 引入带宽变化,低频区域的滤波器频率覆盖范围窄,且密集,有利于放大低频区的细节与变化。高频区则相反
- 能量加权,每个滤波器对其对应覆盖范围内的STFT功率谱进行加权求和,压缩FFT频点,并且可以减少随机噪声的影响
将滤波器用于STFT的结果
动态范围压缩,对功率谱的幅值取对数,放大低频
mel的核心就是通过一组三角滤波器(其数量就等于最终mel频率点数)对STFT进行再加工,放大低频
与倍频程的区别
都采用了“低频精细、高频粗糙”的非线性分段思想,但它们的出发点、数学定义以及应用领域有本质区别。
- 定义差别:倍频程基于明确的数学规律(对数频率),而mel尺度是基于心理声学实验数据得到的
- 滤波器设计:mel尺度的三角滤波器是有重叠的,因此在人耳听觉范围内(20Hz-20kHz),其有更多的通道
综上,mel适合捕捉语音细节,而倍频程适合分析环境噪声、设备振动等全频带任务
拉普拉斯变换
傅里叶变换具有一个很大的局限性,即其要求信号具有绝对可积性,这导致了很多在无穷处不收敛的函数不能使用傅里叶变换。
“这点难度当然拿不到聪明的数学家们,他们想到了一个绝佳的主意:把不满足绝对的可积的函数乘以一个快速衰减的函数,这样在趋于无穷 时原函数也衰减到零了,从而满足绝对可积。”
因此,在傅里叶变换的基础上:
为保证函数的衰减性,将时间轴缩减到正半轴(实际上我们也不关心负半轴)
将其整理即可得到拉普拉斯变换的数学定义式:
但是拉普拉斯变换的作用远不止对信号进行分析,其对绝对可积性限制的突破使其可以用于更多的函数(但其仍要求积分收敛),因此可以利用拉氏变换及其性质求解时域上的复杂的微分方程
性质
线性性
同傅里叶变换
微分性:
积分性:
时移性:
频移性:
小波变换
傅里叶变换的核心是使用不同频率的无限延伸正弦波与信号进行相关计算,这就导致其无法反映时域上的变化,因此不适用于分析非平稳信号(例如:一段音乐里,高音 C 只出现在第 3 秒,傅里叶变换能告诉你“有高音 C”,但它没法告诉你“在第 3 秒”)
为了解决这个问题,人们先发明了 短时傅里叶变换 (STFT),但 STFT 的窗口大小是固定的。窗口太窄,频率看不准;窗口太宽,时间看不准。这就是所谓的“海森堡测不准原理”在信号处理中的体现。
而小波变换巧妙地避开了固定窗口的尴尬。它的核心思想是:对高频信号用窄窗口(看清时间),对低频信号用宽窗口(看清频率)。:
由公式可以看出,其将傅里叶变换中的无限长度正弦波替换为了一个小波,相比于傅里叶的单一变量ω,该小波有两个控制变量:
尺度 a (Scale): 控制小波的“胖瘦”。a越小,小波越窄(对应高频);a 越大,小波越宽(对应低频)。
位移 b(Translation): 控制小波在时间轴上的移动,决定你观察哪一段信号。
由小波原理即可知道小波输出的尺度图(Scalogram)是一个多分辨率图,与STFT输出的频谱图相比:
STFT: 时频格点是大小一致的方块。
小波变换: 高频区方块“瘦长”(时间分辨率高,即更易看清时间变化),低频区方块“矮胖”(频率分辨率高,即更易看清频率成分)。
共振解调(时域包络分析)
当信号中存在固定频率的微弱脉冲时,直接看频谱(FFT)会被环境噪声和低频振动淹没。可以通过解调其引发的高频共振载波来提取该微弱脉冲的特征。对于包络分析,其核心逻辑是:
利用高频共振作为“载波”,通过提取该载波的振幅变化(包络),还原出低频的冲击特征。
包络分析由以下几个步骤组成:
1.带通滤波
使用滤波的原因是要尽可能地消除无关低频振动和高频随机噪声的影响。通常使用谱峭度 (Spectral Kurtosis/Kurtogram) 来自动寻找信噪比最高的频段进行带通提取。
2.希尔伯特变换(核心)
希尔伯特变换相当于一个全通滤波器,它保持信号幅度不变,但将所有频率成分的相位平移了 -90°。
那么这有什么用呢?
我们再回到欧拉公式:
这个公式说明,复指数信号可以表示成一个实数信号和一个虚数信号的和的形式。而且,这个实部和虚部是有关系的,一个是cos,一个是sin,两者相差pi/2,也就是相位相差90°
也就是说,在使用希尔伯特变换之后,我们就可以构造一个解析信号:
该信号可以被表示为:
此时,我们就获得了t时刻包络信号的瞬时幅度和瞬时相位
提取包络线,计算时域包络谱
包络线其实就是信号时域上的幅值连线:
该连线消除了高频载波的震荡,只保留了随时间缓慢变化的信号外壳。
对提取出的包络信号E(t)去除直流分量后进行傅里叶变换即可得到包络谱,根据以上分析,我们不难看出包络解调的优势就是可以观察到信号中的微弱、低频、冲击信号(低频解调),也就是说对于平稳信号,通常不需要该操作
倒频分离(频域包络分析)
首先,倒频的存在目的是为了分离激励源(高频载波)和系统响应(低频调制信号),和希尔伯特变换存在相似的地方。
希尔伯特变换是提取的时域包络,而倒频则是将频谱中的缓慢变化部分和快速振荡部分分开,也就是提取频域上的包络的频率
在物理世界中,我们观测到的信号 y(t)$往往是激励源 e(t)(如声带振动)与系统响应 h(t)(如口腔声道形状)的卷积:
在频域中,卷积变成了乘法:
如果我们想把两者分开,直接相减是不可能的。但通过取对数,乘法变成了加法:
- 低倒谱分量(Low-quefrency):对应log|H(f)|,即频谱的缓慢变化部分(包络),代表声道形状或机械结构。
- 高倒谱分量(High-quefrency):对应 log|E(f)|,即频谱的快速振荡部分,代表基音频率或周期性冲击。
通过取对数,频谱中的低频分量和高频分量就变成了加性关系,此时再进行IFFT后,我们就得到了倒频谱,倒频谱描述的是频谱中缓慢变化成分和振荡成分所对应的频率,因此我们对倒频进行滤波即可分开低频区和高频区
Fbank
Fbank其实就是上式中的频谱在mel尺度下的对数结果,其将频域转换为了加性结构,包含了频域包络和高频振荡的波形结构(倒频则是这个波形结构的频率值)
MFCC
现在语音识别中常用的MFCC就是基于梅尔频谱的倒频谱
在得到梅尔尺度上的频谱后:
对每个滤波器能量取对数(这一步得到的是Fbank特征,也是一种可以直接用的特征)
离散余弦变换DCT:将对数频域特征转换到倒频域上
为什么不像倒频一样用ifft?因为经过 Mel Filter Bank 后,我们已经不是完整的、均匀线性频率采样的频谱,而DCT 非常适合对这种离散的 Log-Mel 能量进行压缩和去相关(可以理解成两种“压缩频谱的方法”。
离散余弦变换理解:类似傅里叶变换,傅里叶变换是投影到多组复数正交基上,DCT是投影到多组不同频的余弦基上
保留低维:去掉倒频域的0阶系数和高频细节,保留低频包络信息