第九章:Chowning的FM形态元音与高级调制合成

本章深入探讨John Chowning开创的FM合成理论,重点关注他在1970年代发展的形态元音(formant vowel)合成技术。我们将从FM合成的数学基础出发,逐步深入到复杂的多算子调制网络,并探讨如何利用这些技术创造富有表现力的游戏音色。

9.1 FM合成的数学基础回顾

基本FM公式

FM合成的核心公式:

y(t) = A × sin(2π fc t + I × sin(2π fm t))

其中:

  • fc = 载波频率(carrier frequency)
  • fm = 调制频率(modulator frequency)
  • I = 调制指数(modulation index)
  • A = 振幅

这个看似简单的公式隐藏着巨大的音色潜力。当调制信号作用于载波相位时,会产生瞬时频率的变化:

瞬时频率 fi(t) = fc + I×fm×cos(2π fm t)

频率偏移量在 ±I×fm 之间振荡,这就是为什么I被称为调制指数——它直接控制频率偏移的幅度。

频谱展开与贝塞尔函数

FM信号的频谱可以用贝塞尔函数展开:

y(t) = A × Σ[n=-∞ to ∞] Jn(I) × sin(2π(fc + n×fm)t)

关键洞察:

  • 边带位于 fc ± n×fm
  • 边带振幅由贝塞尔函数Jn(I)决定
  • 调制指数I控制频谱复杂度
  • 某些I值会使特定边带消失(贝塞尔零点)
频谱示意图(I=2, fc/fm=3):

     |     *
     |    * *
 A   |   * * *
     |  * * * *
     | * * * * *
     |___________f
     0 fm 2fm fc 4fm 5fm

贝塞尔函数的音色意义

贝塞尔函数Jn(I)决定了每个边带的振幅,具有几个重要特性:

  1. 能量守恒:Σ[Jn(I)]² = 1,总能量保持不变
  2. 零点特性:特定I值使某些谐波消失,如J0(2.405)=0
  3. 渐近行为:高阶边带按n!衰减,自然限制带宽
贝塞尔函数振幅变化(n=0,1,2):

J(I) |\    J0
1.0  | \  /\
     |  \/  \/\
0.5  |   X      X  \  J1
     |  / \  / \  \/\
0    | /   \/   \  X  \ J2
     |________________\___I
     0  2.4  5.5  8.7

Carson带宽规则

实用的带宽估算公式:

BW ≈ 2fm(I + 1)

这个规则表明:

  • I=0时,BW=2fm(仅载波和第一边带)
  • I增大时,带宽线性增长
  • 98%的能量包含在此带宽内

频率比的谐波性

fc/fm比值决定频谱的谐波特性:

整数比(谐波频谱):
fc/fm = 2/1 → 边带:fc, fc±fm, fc±2fm...
产生谐波列:200, 300, 400, 500Hz...

非整数比(非谐波频谱):
fc/fm = 1.41/1 → 边带:141, 241, 341, 41Hz...
产生金属音色的非谐波泛音

负频率与频谱折叠

当边带频率fc-n×fm<0时,会产生频谱折叠:

例:fc=200Hz, fm=150Hz, n=2
fc-2fm = 200-300 = -100Hz
折叠后:|−100Hz| = 100Hz(相位反转)

频谱折叠示意:
     0Hz
      |
  ←───┼───→ 
-100  |  100
  ↓   |   ↑
折叠  |  实际

这种折叠会产生额外的拍频和粗糙度,常用于金属打击音色。

9.2 Chowning的形态元音理论

人声形态的声学基础

人类元音由声带基频和声道共振峰(formants)决定:

元音形态频率表(Hz):
        F1    F2    F3
/a/    700   1220  2600
/e/    530   1840  2480  
/i/    320   2250  2890
/o/    570   840   2410
/u/    320   800   2200

声道作为一个复杂的声学滤波器,其共振特性由舌位、唇形和喉部形状决定。第一形态F1主要与舌的高低位置相关(舌位越低,F1越高),第二形态F2与舌的前后位置相关(舌位越前,F2越高)。

元音空间图(F1-F2平面):
F2(Hz)
2500 |  /i/
     |     \
2000 |      /e/
     |        \
1500 |         \
     |      /a/  \
1000 |    /       /o/
     |  /      /
500  |/u/────/
     |________________F1(Hz)
     300  500  700  900

FM形态元音合成原理

Chowning的关键发现:通过精心设计的载波/调制频率比和动态调制指数,FM合成可以模拟人声形态。这个发现革命性地改变了电子音乐,因为它用简单的算法实现了复杂的声学现象。

基本策略:

  1. 载波频率:对应目标形态频率
  2. 调制频率:通常为基频或其谐波
  3. 调制指数:控制形态带宽和谐波丰富度

Chowning的洞察在于,FM产生的边带群可以模拟形态的共振特性:

形态模拟原理:
自然形态:带通滤波器增强特定频率区域
FM形态:调制产生的边带群集中在载波附近

     自然形态           FM模拟
      ___               ***
     /   \             *****
    /     \           *******
___/       \___    ***********

单载波形态元音

最简单的形态元音使用单个FM对:

/a/元音合成:
fc = 700Hz (第一形态)
fm = 110Hz (基频)
I(t) = 2 + 1.5×envelope(t)

动态频谱演化:

时间 →
t0: |    *           纯正弦波
t1: |   ***          出现边带
t2: |  *****         形态展宽
t3: | *******        完整元音

形态带宽控制

形态的感知带宽对元音识别至关重要。Chowning发现调制指数I直接控制形态带宽:

带宽与调制指数关系:
BW_formant ≈ 2×fm×I

典型形态带宽:
F1: 60-130Hz
F2: 70-160Hz  
F3: 100-200Hz

对应调制指数:
I1 = BW/(2×fm) ≈ 0.5-1.2
I2 = 0.6-1.5
I3 = 0.9-1.8

多形态合成策略

真实的元音需要至少两个形态(F1和F2)才能被准确识别。Chowning提出了几种实现方法:

  1. 并行加法合成
y(t) = A1×sin(2π F1 t + I1×sin(2π fm t))

     + A2×sin(2π F2 t + I2×sin(2π fm t))
  1. 共享调制器
mod(t) = sin(2π fm t)
y(t) = A1×sin(2π F1 t + I1×mod(t))

     + A2×sin(2π F2 t + I2×mod(t))
  1. 级联调制(产生更复杂的交互):
mod1(t) = I1×sin(2π fm t)
mod2(t) = I2×sin(2π F1 t + mod1(t))
y(t) = A×sin(2π F2 t + mod2(t))

歌唱合成的振动效果

Chowning还研究了如何添加自然的颤音(vibrato)和震音(tremolo):

颤音实现(频率调制):
fc(t) = fc0 × (1 + depth_vib × sin(2π × 5Hz × t))

震音实现(振幅调制):
A(t) = A0 × (1 + depth_trem × sin(2π × 4.5Hz × t))

组合效果:
y(t) = A(t) × sin(2π fc(t) t + I×sin(2π fm t))

颤音和震音的频率略有不同(5Hz vs 4.5Hz)会产生更自然的效果,避免过于机械的周期性。

9.3 多载波FM网络

并行载波结构

更真实的元音需要多个形态:

     ┌─────┐
fm1→─┤ OP1 ├─┐
     └─────┘ │   ┌─────┐
             ├──→┤ Mix ├──→输出
     ┌─────┐ │   └─────┘
fm2→─┤ OP2 ├─┘
     └─────┘

OP1: fc1=700Hz, I1=2.0 (F1)
OP2: fc2=1220Hz, I2=1.5 (F2)

并行结构的优势在于每个形态可以独立控制,这对于模拟不同元音间的过渡特别有用。混合比例决定了各形态的相对强度:

形态振幅比例(典型值):
        F1   F2   F3
/a/    1.0  0.7  0.3
/i/    0.3  1.0  0.5
/u/    0.8  0.2  0.1

动态混合实现:
A1(t) = lerp(A1_start, A1_end, t/duration)
A2(t) = lerp(A2_start, A2_end, t/duration)

级联调制结构

Chowning的高级技术使用级联调制:

     ┌─────┐   ┌─────┐   ┌─────┐
fm→─┤ OP3 ├──→┤ OP2 ├──→┤ OP1 ├──→输出
     └─────┘   └─────┘   └─────┘

这种结构可以产生非谐波频谱,模拟声道的非线性特性。级联的数学表达:

第一级:y1(t) = I1 × sin(2π fm t)
第二级:y2(t) = I2 × sin(2π fc2 t + y1(t))
第三级:y3(t) = A × sin(2π fc1 t + y2(t))

等效调制指数:I_eff ≈ I1 × I2
频谱复杂度呈指数增长

DX7的算法系统

Yamaha DX7定义了32种算法,每种代表不同的6算子连接方式:

Algorithm 1(经典电钢琴):
        [6]
         |
[3]→[2]→[1]  
         |
    [5]→[4]→输出

Algorithm 32(纯加法合成):
[1] [2] [3] [4] [5] [6]
 |   |   |   |   |   |
 +---+---+---+---+---+→输出

算法选择的音色影响:

  • 串行算法(1-5):适合钟声、金属音色
  • 分支算法(6-15):适合弦乐、管乐
  • 并行算法(16-32):适合复杂谐波音色

算子角色与功能

在FM网络中,算子可以扮演不同角色:

  1. 载波算子(Carrier):直接输出到音频
  2. 调制算子(Modulator):调制其他算子
  3. 自调制算子:通过反馈调制自身
算子参数配置示例:
OP  频率比  调制深度  包络类型   角色
1   1.00    -         Piano     载波
2   1.00    75        Decay     调制
3   3.51    50        Perc      调制
4   1.00    -         Sustain   载波
5   7.00    30        Attack    调制
6   14.00   20        Fast      调制

频率比例的设计原则

不同的频率比产生不同的音色特征:

谐波比例(整数比):
1:1 → 奇次谐波(类方波)
2:1 → 完整谐波(类锯齿)
3:1 → 缺失某些谐波
4:1 → 仅偶次谐波

非谐波比例(音色效果):
1.41:1 → 轻微失谐,温暖感
2.71:1 → 钟声音色
3.14:1 → 金属质感
0.5:1  → 次谐波,厚重感

反馈网络拓扑

更复杂的FM网络包含反馈路径:

交叉反馈网络:
     ┌────────┐
     ↓        │
  ┌─────┐  ┌─────┐
  │ OP1 ├─→┤ OP2 │
  └─────┘  └─────┘
     ↑        │
     └────────┘

参数空间:
β1: OP1→OP1 反馈量
β2: OP2→OP2 反馈量  
β12: OP2→OP1 交叉反馈
β21: OP1→OP2 交叉反馈

反馈产生的效果:

  • 低反馈(β<0.5):增加谐波丰富度
  • 中反馈(0.5<β<π):锯齿波特性
  • 高反馈(β>π):噪声、混沌

动态网络重配置

游戏中可以实时改变网络拓扑:

场景切换示例:
探索模式:Algorithm 1(温暖垫音)
  [6]→[5]→[4]→[3]→[2]→[1]→输出

战斗模式:Algorithm 17(尖锐主音)
  [6]→[3]→[1]→输出
  [5]→[2]→[1]
  [4]→[1]

过渡策略:

1. 交叉淡化:500ms渐变
2. 调制深度渐变:先减后增
3. 频率滑动:portamento效果

9.4 动态频谱造型技术

调制指数包络

元音过渡的关键在于调制指数的动态控制:

/i/→/a/过渡:
         I1(t)
    2.5 |     ___
        |    /   \
    1.0 |___/     \___
        |
        0   100  200  300 ms

         I2(t)  
    1.5 |      ___
        |  ___/   \
    0.5 |_/        \___
        |
        0   100  200  300 ms

频率漂移与颤音

自然人声包含微小的频率变化:

颤音实现:
fc(t) = fc0 × (1 + 0.01×sin(2π×5.5t))
fm(t) = fm0 × (1 + 0.005×sin(2π×6t + φ))

9.5 高级调制技术

反馈FM

算子自调制产生噪声特性:

     ┌──────────┐
     │          ↓
   ┌─┴───┐   ┌─────┐
   │ OP1 ├──→┤ Out │
   └─────┘   └─────┘

反馈量β控制从正弦到锯齿波的过渡

交叉调制网络

DX7风格的6算子网络:

算法示例(Algorithm 1):
     OP6
      ↓
OP3→OP2→OP1
      ↑   ↓
     OP5 OP4→输出

每个算子可以是载波或调制器,创造极其丰富的音色空间。

动态算法切换

游戏中可以根据场景动态切换FM算法:

战斗状态:Algorithm 32(金属音色)
探索状态:Algorithm 1(温暖垫音)
过渡时间:500ms交叉淡化

9.6 游戏应用实例分析

《异度神剑》的FM人声

分析其标志性的合成人声:

  • 使用4算子FM
  • 形态频率随音高缩放
  • 动态调制指数响应音量

《音速小子》的FM音效

经典的环收集音:

fc = 1046.5Hz (C6)
fm = fc × 1.5
I:从8快速衰减到0
产生明亮的金属撞击声

本章小结

关键概念:

  1. 贝塞尔函数决定FM频谱的边带分布
  2. 形态元音通过匹配人声共振峰频率实现
  3. 调制指数包络控制音色的动态演化
  4. 多算子网络提供丰富的音色可能性
  5. 反馈FM产生噪声和非谐波频谱

重要公式:

  • 基本FM:y(t) = A×sin(2πfct + I×sin(2πfmt))
  • 边带频率:fc ± n×fm
  • 边带振幅:Jn(I)
  • 调制指数与带宽:BW ≈ 2fm(I+1)

练习题

基础题

  1. 贝塞尔函数计算 给定fc=440Hz,fm=110Hz,I=2,计算前5个边带的频率和相对振幅。
提示 使用贝塞尔函数表或近似公式,边带位于fc±n×fm
答案 边带频率:220Hz, 330Hz, 440Hz, 550Hz, 660Hz 相对振幅(查表J0(2)≈0.22, J1(2)≈0.58, J2(2)≈0.35, J3(2)≈0.13, J4(2)≈0.03)
  1. 形态匹配 设计一个FM参数集来合成/e/元音(F1=530Hz, F2=1840Hz)。
提示 使用两个并行FM对,每个对应一个形态
答案 OP1: fc1=530Hz, fm1=110Hz, I1=1.8 OP2: fc2=1840Hz, fm2=110Hz, I2=1.2 混合比例约为1:0.7
  1. 调制指数与带宽 如果需要产生2kHz带宽的频谱,fm=100Hz,需要多大的调制指数?
提示 使用Carson带宽规则:BW ≈ 2fm(I+1)
答案 2000 ≈ 2×100×(I+1) I ≈ 9
  1. 频率比的影响 比较fc:fm = 1:1 和 fc:fm = 2:1 产生的频谱差异。
提示 考虑边带位置和谐波/非谐波特性
答案 1:1产生奇次谐波频谱(类似方波) 2:1产生完整谐波列(类似锯齿波) 频谱密度和音色明亮度不同

挑战题

  1. 元音渐变设计 设计一个从/i/到/a/的平滑过渡,时长500ms。
提示 需要同时控制多个载波频率和调制指数
答案 F1: 320Hz→700Hz,使用指数曲线 F2: 2250Hz→1220Hz,使用对数曲线 I1: 1.0→2.0,线性插值 I2: 2.5→1.5,线性插值 基频保持110Hz不变
  1. 反馈FM分析 推导反馈系数β=π/2时的输出频谱特征。
提示 考虑相位的递归关系和稳态解
答案 产生类似锯齿波的频谱 奇偶谐波都存在 高频谐波按1/n衰减 出现轻微的频率偏移
  1. 6算子音色设计 使用DX7的算法1,设计一个"水晶钟声"音色。
提示 钟声需要非谐波泛音和长衰减
答案 OP1(载波): fc=基频, 长衰减 OP2(调制): fm=fc×1.41, I=3, 快衰减 OP3(调制): fm=fc×3.14, I=1, 中等衰减 OP4(载波): fc=基频×2.73, 长衰减 OP5(调制): fm=OP4×1.73, I=2 OP6: 关闭或用作LFO
  1. 实时性能优化 游戏中需要同时运行32个FM音源,如何优化计算?
提示 考虑查表、SIMD、渐进式精度
答案 - 正弦查表(4096点,线性插值) - SIMD并行计算4个声音 - LOD系统:远处音源用简化算法 - 预计算调制信号,多载波共享 - 固定点数学代替浮点 - 音频剔除:静音时跳过计算

常见陷阱与错误

1. 混叠问题

错误:高调制指数产生超过奈奎斯特频率的边带 解决:限制I×fm < fs/2 - fc,或使用过采样

2. 相位不连续

错误:改变频率时产生咔嗒声 解决:使用相位累加器而非直接计算2πft

3. 调制指数突变

错误:I值阶跃变化导致频谱不连续 解决:对I值应用平滑滤波或包络

4. 数值精度问题

错误:深度调制时相位累积误差 解决:定期重置相位或使用双精度

5. CPU开销低估

错误:实时计算多个正弦函数 解决:使用查表、差分算法或波表合成

调试技巧

  • 使用频谱分析器实时监控输出
  • 从简单比例(1:1, 2:1)开始测试
  • 记录并可视化调制指数包络
  • 分离测试每个算子的输出
  • 使用A/B对比测试微小参数变化