倒谱分析模拟器 返回
信号处理模拟器

倒谱分析模拟器 — 语音和振动分析基础

对对数幅度谱进行逆傅里叶变换计算实倒谱。通过改变基频、采样频率、谐波衰减,直观学习倒频率轴上音高检测的原理。

参数设置
基频 f_0
Hz
采样频率 F_s
Hz
谐波衰减率 α
噪声 σ

N = 1024,使用基数-2 FFT 计算。信号模型为 5 个谐波加白噪声,基频自动扫描(滑块设置扫描中心)。

暂停时,拖动滑块即可即时更新结果。

计算结果
倒谱峰值倒频率
对应时间 τ
估计基频 f_0
估计误差 |f_0 − 真值|/真值
信号、谱和倒谱

上:时序 x[n](蓝)/中:对数幅度谱 log|X[k]|(绿)/下:倒谱 c[n](红,黄竖线=峰值位置)

理论和主要公式

实倒谱是对信号对数幅度谱进行逆傅里叶变换的量。它能在时间(倒频率)轴上分离卷积结合的激励源和传输系统。

DFT。x[n] 是长度为 N 的输入信号,X[k] 是其频率分量:

$$X[k] = \sum_{n=0}^{N-1} x[n]\,e^{-j 2\pi k n / N}$$

实倒谱。对数幅度谱的逆 DFT(仅实部):

$$c[n] = \frac{1}{N}\sum_{k=0}^{N-1} \log|X[k]|\,\cos\!\left(\frac{2\pi k n}{N}\right)$$

基本周期的倒频率与估计基频:

$$\tau_\text{pitch} = \frac{F_s}{f_0}, \qquad \hat{f}_0 = \frac{F_s}{\tau_\text{peak}}$$

在语音中,在 2~20 ms(500~50 Hz)范围内搜索倒谱峰值,并从其倒频率估计音高。

倒谱分析模拟器是什么

🙋
倒谱不就是把"spectrum"的字母反过来拼写成"cepstrum"的名字吗?有什么用呢?
🎓
观察得好。"spectrum"反向得到"cepstrum","frequency"反向得到"quefrency"。简单来说,倒谱就是对频谱再次进行傅里叶变换,然后在时间轴上提取信号中的"周期"。在上面的模拟器中,当 f_0=200Hz、F_s=8000Hz 时,看下面的倒谱,会在倒频率 40 样本处出现尖锐尖峰。40/8000=5ms,即 1/200 秒的周期。
🙋
但是普通的 FFT 应该也能找到基频吧,为什么要用两层呢?
🎓
很好的问题。在频谱上,基频和各个谐波是并排显示的,而且"基波的幅度比各谐波小"的情况很常见,比如人的声音,容易选错峰值。但倒谱能将等间距排列的谐波都集中到"倒频率=周期"的一点上。试试在模拟器中把 α 从 0 改到 0.8,频谱上谐波的幅度关系会改变,但倒谱的峰值位置始终不变。
🙋
确实,峰值位置纹丝不动。那取"对数"是为了什么呢?
🎓
这就是倒谱的精妙之处。语音是"声带振动(激励)×声道滤波(传输系统)"的卷积产生的。频谱上是乘法关系,取对数后变成加法,再进行逆傅里叶变换,就能在时间(倒频率)轴上分离缓慢变化的声道成分(低倒频率)和有尖峰的音高成分(高倒频率)。通过"升举"技术分离这两部分,就能提取语音识别用的特征量。
🙋
我注意到在模拟器中增加噪声参数 σ 时,倒谱的峰值会逐渐降低。
🎓
正是这样。噪声均匀分布在频谱上,取对数后会在倒频率轴上均匀铺散。但对应音高周期的 40 样本处的尖峰还是保留下来,这就是倒谱的优势。这对机械振动诊断特别有效。齿轮损伤产生的等间距侧带波会在倒谱上压缩成一个峰值,从而能在噪声中找到损伤周期。语音分析和回转机械诊断看似完全不同,但数学原理是相同的。

常见问题

这个范围对应人类语音的音高。20 ms 对应 50 Hz(成年男性低音的下限),2 ms 对应 500 Hz(女性和儿童高音的上限)。低倒频率侧有来自声道滤波的大幅度成分,限制搜索范围可以避免误识别为音高。在机械振动诊断中,搜索范围需要根据目标机器的转速进行调整。
实倒谱只使用对数幅度 log|X[k]|,舍弃了相位信息。本模拟器计算的就是这个,对音高检测和谐波结构分析已经足够。复倒谱使用复数对数 log X[k],保留相位信息,可用于信号的完全重构(如最小相位分解)。但复数对数需要进行相位展开,实现比较复杂,应用范围也较局限。
本工具采用 log(|X[k]| + ε) 的方式,其中 ε=1e-10 是微小值。理论上由于噪声存在,|X[k]| 很难完全为 0,但对于某些合成信号如果确实出现零点,可能导致发散。实际应用中常见的方法是给信号加入微弱白噪声,或者用最大幅度的 1e-6 倍作为下限值。
对教学用途和 N=1024 这样的单次计算来说,直接 DFT 完全够用(O(N²)≈100万次运算,可实时计算)。但在实时处理、长信号处理或连续逐帧处理的应用中,FFT(O(N log N))是必需的。WebAudio API 和 DSP 库中都有标准 FFT 实现,把本模拟器的计算逻辑直接替换成 FFT 不会改变结果。

实际应用

语音分析和语音识别:倒谱是语音处理的中心工具。基频估计、有声/无声判定、共振峰(声道共鸣)提取等都可以通过"升举"技术对倒谱的低倒频率和高倒频率部分进行分离来实现。MFCC(梅尔频率倒谱系数)是其发展形式,在语音识别、说话人识别、语音合成等所有场景中都是标准特征量。

机械振动诊断和旋转机械预兆保全:齿轮掉齿或滚动轴承损伤会在频谱上出现多个等间距的侧带波。直接读取这些侧带波很困难,但倒谱会把它们压缩成单一尖峰,使得损伤的有无和周期一目了然。在风力发电机、涡轮机、大功率电动机的状态监测中广泛应用,是物联网时代预兆保全的基础技术。

地震学和反射波分析:在地震波和反射地震勘探中,地下反射面产生的多重反射会使相同波形以固定延迟重复出现。倒谱会在对应延迟时间的倒频率处出现尖峰,用于地层结构推断。在声学回声分析中也用同样原理测量房间混响时间和反射面距离。

生物信号分析:心音、呼吸音、肌电信号等生理周期信号的分析中也应用倒谱。心音的 S1、S2 周期、心率变异中的隐藏周期成分、吞咽音的模式分类等,用时域或频域分析看不出的结构都可以用倒谱显示。临床诊断支持和穿戴式生命体征传感器信号处理中正在推进应用。

常见误解和注意事项

最常见的误解是把倒谱的横轴当成频率。横轴是"倒频率"(样本数或秒),具有时间维度,数值越大表示"周期越长的成分",即对应越低的频率。在模拟器中把 f_0 从 200 Hz 增加到 400 Hz 时,倒谱的峰值不是向右移动,而是向左移动。这是因为周期 T_0=F_s/f_0 缩短了。"倒谱上向右=高频"这样的直觉在这里不适用,需要特别注意。

第二个常见错误是忽视峰值的整数倍。除了基本周期 T_0 对应的 n=T_0 处有峰值外,n=2T_0, 3T_0… 处也会出现较小的峰值。这不是基频的倍频,而是对数频谱的周期结构(基频的整数倍谐波排列)再次进行傅里叶变换时自然产生的现象。在模拟器中减小 α(强化谐波),可以看到倒谱的 2 倍、3 倍位置出现副峰。正确选择基峰而避免"倍音错误"是算法实现的重要课题。

最后,要明白倒谱不是通用的周期检测器。对于非平稳信号(基频随时间变化),用长分析窗会导致多个基频混合,峰值模糊。实际应用中通常用短窗(20~40 ms)分帧,逐帧计算倒谱来跟踪基频轨迹。对于无周期信号(爆破音、冲击响应),根本不会产生峰值。倒谱是对"周期性强的信号"有效的工具,需要在合适的场景下使用。

使用指南

  1. 用滑块设置基频 f_0(50~500 Hz),选择采样频率 F_s(8~48 kHz)
  2. 调整衰减系数 α(0.1~2.0)和加性噪声标准差 σ(0~0.5),模拟现实的语音和振动信号
  3. 点击"计算"按钮,对数幅度谱的逆傅里叶变换计算倒谱,从倒频率轴的峰值位置输出估计基频

具体计算示例

语音信号(f_0 = 120 Hz、F_s = 16 kHz、α = 0.8、σ = 0.1)输入时,倒谱峰值出现在倒频率 τ ≈ 8.33 ms,推计的基频 f_0_est = 1/τ ≈ 120 Hz。加工机振动(f_0 = 250 Hz、F_s = 10 kHz)中,从 τ ≈ 4 ms 的峰值精确提取 250 Hz,推计误差收敛到 0.5% 以下。

实际应用中的注意点