EP42: Chord Recognition — From Chroma Vectors to Viterbi Decoding
前置知识
概述
你播放一首歌,App 在零点一秒内报出和弦名。这不是凭感觉猜测,也不是查数据库。 背后是一个隐马尔可夫模型(Hidden Markov Model, HMM),和一个格形图上的最短路径算法(Viterbi)。
本集从信号处理(STFT 色度向量)出发,经过模板匹配,建立 HMM 的三要素, 最终用 Viterbi 动态规划在 时间内精确解码最优和弦序列。
前置知识
- STFT 与相位声码器(EP35) — 短时傅里叶变换
- 全音程列与 (EP04) — 十二音类循环群结构
- 马尔可夫链与 AI 作曲(EP21) — 离散 Markov 链
- 人声分离(EP41) — 上游信号分离流程
定义
设音频帧的短时傅里叶变换幅度谱为 ,。 色度向量 的第 分量()定义为
其中 , 为第 个频率箱的中心频率, 为参考频率(通常取 C0 = 16.35 Hz)。
色度向量将所有八度的能量折叠到 上, 实现八度等价: 汇聚了 C4、C5、C6 等所有八度上音名为 的能量。
设 24 个和弦模板为 (12 个大调 + 12 个小调),每个模板 ,在和弦包含的音名处取 1,其余取 0(大三和弦取 3 个音名,小三和弦取 3 个音名)。
帧 属于和弦 的模板匹配得分定义为
逐帧识别结果为 。
一个隐马尔可夫模型 由三部分组成:
-
转移矩阵 :, 其中 (和弦数),满足 ,。
-
发射概率 :给定隐状态 ,观测 (色度向量)的概率。 常用 12 维高斯模型:
其中 为和弦 的理想色度模板。 -
初始概率 :,满足 。 实践中常取均匀分布 ,或从语料统计得到。
隐状态序列 对应 帧音频的真实和弦标签, 不可直接观测;观测序列 为色度向量序列。
主要定理
给定 HMM 和观测序列 , 定义 Viterbi 变量
则 满足递推关系
初始条件 。
令 为反向指针。 最优和弦序列由回溯得到:
该序列 最大化联合概率 , 时间复杂度为 。
正确性(最优子结构):
设 是最优序列。对任意 ,子序列 必是到达 的最优路径。 若否,设存在更优路径 到达 ,则将 与 拼接, 得到比 更优的序列,矛盾。
因此, 确实是到达 的最优路径的概率,递推正确。
复杂度:
对每个时刻 和每个状态 ,计算 需 。 共 个时刻、 个状态,总复杂度 。
对比暴力枚举所有路径: 条路径,对 、 即 , 远超宇宙原子数(),计算不可行。动态规划将复杂度从指数降为多项式。
设 (排除零概率情形)。令 ,则
该递推与原始 Viterbi 递推产生完全相同的最优路径: 。
对数函数 是严格单调递增函数,因此
对任何正值函数 成立。
又因 ,(严格单调性), 原始递推
取对数后恰好变为
乘法变加法,max 保持不变。
实际意义: 帧时概率连乘可达 ,超出 float64 下溢阈值(),
对数空间操作完全避免此问题。零概率存储为 (Python float('-inf')),
不影响 操作的正确性。
色度向量 是 -等变的:对频谱的整数倍频移(即移调 个半音), 色度向量循环移位 位。形式地,若 是信号 的色度向量, 是 移调 个半音后的信号,则
数值示例
暴力搜索的不可行性:
即 ,而宇宙可观测粒子数 。
Viterbi 规模:,,需要存储 个 值和同等数量的反向指针, 总空间 ,时间 次运算——实时可行。
音乐联系
音乐语法的数学编码
HMM 转移矩阵 将调性引力(tonal gravity)量化为概率。在 C 大调语境下, ,因为 G 大调(属和弦)是 C 大调最强的功能和声解决, 而 F♯ 大调(三全音关系)在古典和声中极少出现。
通过从巴赫众赞歌或流行歌曲数据集统计 ,模型自动学到和声语法规则。 这正是 EP21 中 Markov 链的直接推广:原 Markov 链建模可观测音符序列, HMM 在此之上增加了"隐层"——和声功能(属、主、下属)不可直接听到, 只能从声音特征(色度向量)推断。
识别局限与乐理边界
HMM 基于大/小三和弦的 24 个模板,无法处理:
- 异名同音:E♯ 与 F 色度位置相同,但在 B 大调(功能:增八度)和 C 大调(功能:自然四度)中作用不同
- 副属和弦:如 C 大调中的 D7(属于 G 的属和弦),激活两个模板
- 爵士变音:Cm(maj9)♯11 等高叠和弦激活 8 个以上音名位置
这些局限来自模型的生成假设:HMM 假定观测条件独立于过去, 而人类和声感知实际上对上下文高度敏感。条件随机场(CRF)的判别框架 可部分缓解此问题,但代价是失去 Viterbi 解码的精确性。
局限性与开放问题
-
调内识别 vs 调性识别:本集仅识别逐帧和弦,未处理全局调性(key)。 调性识别需要在更长时间尺度(整首曲子)上建模,Krumhansl-Schmuckler (1990) 用轮廓相关系数定义调性中心,这是 EP43 的主题。
-
多声部叠置:交响乐中多个声部同时演奏不同和弦,色度向量叠加, 单和弦 HMM 无法分解。需要多和弦联合 HMM 或源分离(EP41)前处理。
-
实时系统延迟:Viterbi 需要完整序列后向回溯。实时系统需改用在线 Viterbi(滑窗回溯)或前向算法(给出边际概率,无需回溯),代价是识别精度下降。
-
深度神经网络发射估计:现代系统(如 ACE-Chroma, 2022)用 CNN 估计 , 取代高斯模型,精度显著提升,但丢失了 Viterbi 解码的可解释性。
参考文献
-
Rabiner, L. R. (1989). A tutorial on hidden Markov models and selected applications in speech recognition. Proceedings of the IEEE, 77(2), 257–286.
-
Viterbi, A. J. (1967). Error bounds for convolutional codes and an asymptotically optimum decoding algorithm. IEEE Transactions on Information Theory, 13(2), 260–269.
-
Müller, M. (2015). Fundamentals of Music Processing. Springer. Ch. 5 (Chord Recognition).
-
Bello, J. P., & Pickens, J. (2005). A robust mid-level representation for harmonic content in music signals. Proceedings of ISMIR, 304–311.
-
Harte, C., Sandler, M., Abdallah, S., & Gómez, E. (2005). Symbolic representation of musical chords: A proposed syntax for text annotations. Proceedings of ISMIR.
-
Krumhansl, C. L. (1990). Cognitive Foundations of Musical Pitch. Oxford University Press.
-
Cho, T., & Bello, J. P. (2014). On the relative importance of individual components of chord recognition systems. IEEE/ACM Transactions on Audio, Speech, and Language Processing, 22(2), 477–492.