第1章:声音合成基础速览

本章将快速回顾声音合成的基础理论,为后续深入学习数字合成技术奠定基础。我们将从声波的物理本质出发,经过模拟合成器的经典架构,过渡到数字音频处理的核心概念。对于已有信号处理背景的读者,本章将帮助您快速建立声音合成领域的知识框架。

1.1 声波物理与傅里叶分析

声波的物理本质

声波是空气分子的压力波动,在标准大气压下以约343米/秒的速度传播。人耳可感知的频率范围约为20Hz到20kHz,这个范围定义了音频合成的基本工作域。

声压级可表示为:

p(t) = A·sin(2πft + φ)

其中:

  • A:振幅(决定音量)
  • f:频率(决定音高)
  • φ:初始相位

傅里叶级数与谐波分析

任何周期信号都可以分解为基频及其整数倍频率的正弦波之和:

x(t) = a₀/2 + Σ[aₙcos(nω₀t) + bₙsin(nω₀t)]

其中系数为:

aₙ = (2/T)∫x(t)cos(nω₀t)dt
bₙ = (2/T)∫x(t)sin(nω₀t)dt

这一分解揭示了音色的本质:不同的谐波组合产生不同的音色。

频谱表示与倍音结构

自然乐器的频谱通常包含:

  1. 基频(f₀):决定音高
  2. 谐波(nf₀):整数倍频率,决定音色明亮度
  3. 非谐波成分:打击声、噪声等,增加真实感

典型波形的谐波结构:

锯齿波:所有谐波,振幅∝1/n
方波:奇次谐波,振幅∝1/n
三角波:奇次谐波,振幅∝1/n²

相位的作用与感知

虽然人耳对静态相位关系不敏感,但相位在以下情况很重要:

  • 多个振荡器叠加时的相位抵消
  • 动态相位变化产生的梳状滤波效果
  • FM合成中的相位调制

1.2 模拟合成器基本架构

VCO(压控振荡器)原理

VCO是模拟合成器的声源,通过控制电压改变振荡频率:

f = f₀ · 2^(V_cv/V_oct)

其中V_oct通常为1V,实现1V/Oct标准。

经典VCO波形电路原理:

  • 锯齿波:电容充电/快速放电
  • 方波:比较器输出
  • 三角波:积分器输出
  • 正弦波:波形整形或查表

VCF(压控滤波器)类型与特性

滤波器通过频率选择性衰减塑造音色:

低通滤波器(LPF):最常用,模拟自然声音的高频衰减

H(s) = ω₀²/(s² + (ω₀/Q)s + ω₀²)

关键参数:

  • 截止频率(fc):-3dB点
  • 谐振(Q):在截止频率处的增益峰值
  • 斜率:12dB/Oct(2极点)、24dB/Oct(4极点)

经典滤波器类型:

  • Moog Ladder:24dB/Oct,温暖的谐振
  • Roland TB-303:18dB/Oct,独特的酸性音色
  • Oberheim SEM:可变状态,多模式

VCA(压控放大器)与动态控制

VCA控制信号的振幅,实现音量包络和调制:

V_out = V_in · V_control

线性与指数响应:

  • 线性:适合调制信号
  • 指数:符合人耳感知,适合音量控制

ADSR包络生成器

ADSR定义声音的时间演化:

     /\
    /  \___
   /       \
  /         \
 A    D S   R

各阶段的数学模型:

  • Attack:指数上升,τ_a决定速度
  • Decay:指数下降到Sustain电平
  • Sustain:保持电平(0-100%)
  • Release:指数下降到零

LFO(低频振荡器)与调制

LFO产生低于20Hz的周期信号用于调制:

常见LFO目标:

  • 音高(颤音效果)
  • 滤波器截止(哇音效果)
  • 振幅(震音效果)
  • 相位(合唱效果)

1.3 数字音频基础与采样定理

奈奎斯特-香农采样定理

连续信号的完美重建要求:

f_s > 2f_max

其中f_s是采样率,f_max是信号最高频率。

标准采样率:

  • 44.1kHz(CD音质)
  • 48kHz(专业音频)
  • 96kHz、192kHz(高清音频)

量化与位深度

量化将连续振幅映射到离散电平:

信噪比(dB) ≈ 6.02N + 1.76

其中N是位数。16位提供约96dB动态范围,24位提供约144dB。

量化误差可建模为均匀分布的白噪声:

σ²_q = Δ²/12

其中Δ是量化步长。

混叠与抗混叠滤波

当f > f_s/2时,高频成分折返到低频:

f_alias = |f - nf_s|

防止混叠的方法:

  1. 模拟抗混叠滤波器:ADC前的陡峭低通
  2. 过采样:提高采样率,放宽滤波器要求
  3. 带限信号生成:从源头避免高频

过采样与降采样

过采样改善信号质量:

  1. 减少量化噪声(噪声整形)
  2. 放宽抗混叠滤波器要求
  3. 提高非线性处理的精度

降采样流程:

  1. 低通滤波(防止混叠)
  2. 抽取样本
  3. 可选:噪声整形

1.4 带限振荡器理论

数字振荡器的核心挑战是生成无混叠的经典波形。朴素方法产生的方波、锯齿波包含无限谐波,在数字域会造成严重混叠。

带限脉冲序列(BLIT)

BLIT方法生成带限脉冲串,通过积分得到其他波形:

BLIT(t) = sin(Mπt/T) / (M·sin(πt/T))

其中M = floor(f_s/2f) + 1是最大谐波数。

锯齿波通过BLIT积分获得:

saw(t) = ∫BLIT(τ)dτ - DC_offset

带限阶跃(BLEP)

BLEP在波形不连续点插入校正函数:

BLEP(t) = ∫sinc(t)dt

实现步骤:

  1. 生成朴素波形
  2. 检测不连续点
  3. 在不连续点加入BLEP校正

优点:计算效率高,适合实时应用。

polyBLEP算法

polyBLEP使用多项式近似BLEP函数:

polyBLEP(t) = {
    t² + 2t + 1,           -1 ≤ t < 0
    -t² + 2t - 1,           0 ≤ t < 1
    0,                      otherwise
}

实现锯齿波:

1. 生成朴素锯齿
2. 在跳变点应用polyBLEP
3. 缩放到[-1, 1]

差分抛物波(DPW)

DPW通过差分操作抑制高频:

1. x(n) = 2f/f_s · n (mod 1) - 1  // 朴素锯齿
2. y(n) = x(n)²                    // 抛物变换
3. z(n) = y(n) - y(n-1)           // 差分
4. 输出 = c·z(n)                   // 缩放

其中c = f_s/(4f)用于振幅补偿。

优点:

  • 极低的计算开销
  • 良好的频谱特性
  • 易于实现调制

1.5 离散信号处理与数字滤波器

Z变换基础

Z变换是分析离散系统的核心工具:

X(z) = Σx[n]z^(-n)

基本性质:

  • 延迟:x[n-k] ↔ z^(-k)X(z)
  • 线性:ax[n] + by[n] ↔ aX(z) + bY(z)
  • 卷积:x[n]*h[n] ↔ X(z)H(z)

系统传递函数:

H(z) = Y(z)/X(z) = (b₀ + b₁z^(-1) + ... + b_Mz^(-M))/(1 + a₁z^(-1) + ... + a_Nz^(-N))

IIR与FIR滤波器

FIR(有限冲激响应):

y[n] = Σb_k·x[n-k]

特点:

  • 线性相位
  • 无条件稳定
  • 高阶数需求

IIR(无限冲激响应):

y[n] = Σb_k·x[n-k] - Σa_k·y[n-k]

特点:

  • 低阶数实现陡峭响应
  • 可能不稳定
  • 非线性相位

双线性变换

将模拟滤波器转换为数字滤波器:

s = (2/T)·(1 - z^(-1))/(1 + z^(-1))

频率弯曲(预畸变):

ω_a = (2/T)·tan(ω_d·T/2)

实例:模拟RC低通到数字

H_a(s) = 1/(1 + sRC)
→ H_d(z) = (1 + z^(-1))/(1/K + 1 + (1/K - 1)z^(-1))

其中K = RC·f_s

数字滤波器设计

Butterworth低通设计:

1. 确定规格:f_c, f_s, 衰减
2. 计算阶数:N = log(ε)/log(f_s/f_c)
3. 放置极点:s_k = e^(jπ(2k+N-1)/(2N))
4. 双线性变换到z域

状态变量滤波器(SVF):

HP = input - LP - BP·Q
BP = HP·f + BP_z1
LP = BP·f + LP_z1

优点:同时输出低通、带通、高通。

1.6 从模拟到数字的演进

历史发展脉络

1960s-1970s:模拟黄金时代

  • Moog Modular(1964):定义了减法合成
  • Minimoog(1970):便携式合成器革命
  • ARP 2600(1971):半模块化设计

1980s:数字革命

  • Yamaha DX7(1983):FM合成普及
  • Fairlight CMI(1979):采样技术先驱
  • Roland D-50(1987):LA合成混合架构

1990s-2000s:虚拟模拟

  • Nord Lead(1995):虚拟模拟概念
  • Access Virus(1997):数字建模技术
  • 软件合成器兴起:计算能力解放创造力

关键技术突破

  1. DSP芯片发展: - 专用乘累加单元 - 并行处理架构 - 实时处理能力

  2. 算法创新: - 高效抗混叠技术 - 非线性建模 - 机器学习应用

  3. 控制接口演进: - MIDI协议(1983) - OSC协议 - MPE(多维复音表达)

现代合成器架构

混合架构趋势:

数字控制 + 模拟信号路径
├── 数字振荡器(无限复音)
├── 模拟滤波器(温暖音色)
└── 数字效果器(灵活处理)

模块化复兴:

  • Eurorack标准统一
  • 数字模块与模拟模块共存
  • CV/Gate与MIDI互通

云端合成:

  • 分布式处理
  • 协作创作
  • AI辅助音色设计

本章小结

本章快速回顾了声音合成的基础知识,为深入学习现代数字合成技术奠定基础。

关键概念

  1. 傅里叶分析:任何周期信号都可分解为谐波之和,这是理解音色的数学基础
  2. 模拟合成器架构:VCO→VCF→VCA的信号流,加上ADSR和LFO调制
  3. 采样定理:f_s > 2f_max是数字音频的基本约束
  4. 带限振荡器:BLIT、BLEP、polyBLEP、DPW等技术解决数字域的混叠问题
  5. 数字滤波器:通过Z变换和双线性变换,将模拟滤波器移植到数字域
  6. 技术演进:从模拟到数字,从硬件到软件,合成技术不断创新

重要公式汇总

  • 傅里叶级数:x(t) = a₀/2 + Σ[aₙcos(nω₀t) + bₙsin(nω₀t)]
  • 采样定理:f_s > 2f_max
  • 量化信噪比:SNR ≈ 6.02N + 1.76 dB
  • BLIT函数:BLIT(t) = sin(Mπt/T) / (M·sin(πt/T))
  • 双线性变换:s = (2/T)·(1 - z^(-1))/(1 + z^(-1))
  • VCO频率:f = f₀ · 2^(V_cv/V_oct)

实践要点

  • 选择合适的采样率避免混叠
  • 使用带限技术生成基本波形
  • 理解模拟与数字的差异
  • 掌握基本的DSP概念

练习题

基础题

练习1.1 一个440Hz的锯齿波,其前5个谐波的频率和相对振幅是多少?

提示

锯齿波包含所有谐波,振幅与谐波次数成反比。

答案

频率:440Hz, 880Hz, 1320Hz, 1760Hz, 2200Hz 相对振幅(以基频为1):1, 1/2, 1/3, 1/4, 1/5

锯齿波的傅里叶级数为: saw(t) = (2/π)Σ[(-1)^(n+1)/n · sin(nω₀t)]

练习1.2 在44.1kHz采样率下,最高可以无混叠地表示多少Hz的正弦波?如果要合成一个10kHz的方波,至少需要包含几个谐波?

提示

使用奈奎斯特频率计算,方波只包含奇次谐波。

答案

最高频率:22.05kHz(奈奎斯特频率 = f_s/2)

10kHz方波的谐波:10kHz(基频)、30kHz(3次)、50kHz(5次)... 由于30kHz > 22.05kHz会产生混叠,所以只能包含基频。 这说明在44.1kHz采样率下,10kHz方波实际上退化为正弦波。

练习1.3 一个ADSR包络的Attack=10ms, Decay=20ms, Sustain=0.7, Release=50ms。如果按键持续100ms,描述包络的完整时间演化。

提示

分段考虑每个阶段的时间和电平。

答案
  • 0-10ms:Attack阶段,从0上升到1.0
  • 10-30ms:Decay阶段,从1.0下降到0.7
  • 30-100ms:Sustain阶段,保持在0.7
  • 100-150ms:Release阶段,从0.7下降到0

总时长:150ms

挑战题

练习1.4 推导polyBLEP算法中,为什么使用t² + 2t + 1和-t² + 2t - 1这两个多项式可以近似BLEP函数?

提示

考虑这些多项式的积分关系和边界条件。

答案

polyBLEP是对积分sinc函数的多项式近似。关键性质:

  1. 连续性:在t=0处,两个多项式都等于1
  2. 导数连续:在t=0处,两边导数都等于2
  3. 边界条件:在t=-1和t=1处,函数值为0
  4. 积分守恒:∫polyBLEP(t)dt = 0(保持DC平衡)

这些多项式是满足上述条件的最低阶多项式,提供了计算效率和精度的良好平衡。

练习1.5 设计一个2极点Butterworth低通滤波器,截止频率1kHz,采样率48kHz。给出差分方程系数。

提示

使用双线性变换,先设计模拟原型,再转换到数字域。

答案

步骤:

  1. 预畸变:ω_c = 2π·1000 rad/s,ω_a = 2·48000·tan(π·1000/48000) ≈ 6283 rad/s
  2. 模拟原型:H_a(s) = ω_c²/(s² + √2·ω_c·s + ω_c²)
  3. 双线性变换:s = 96000(1-z^(-1))/(1+z^(-1))
  4. 化简得到:
b₀ = 0.00362
b₁ = 0.00724
b₂ = 0.00362
a₁ = -1.8227
a₂ = 0.8372

差分方程:y[n] = 0.00362x[n] + 0.00724x[n-1] + 0.00362x[n-2] + 1.8227y[n-1] - 0.8372y[n-2]

练习1.6 比较DPW和polyBLEP生成锯齿波的计算复杂度。在什么情况下选择哪种算法?

提示

考虑每采样点的运算次数和内存访问。

答案

DPW复杂度:

  • 每采样:1次模运算、1次平方、1次减法、1次乘法
  • 内存:1个延迟样本
  • 优势:固定低开销,适合所有频率

polyBLEP复杂度:

  • 每采样:基础锯齿生成 + 跳变检测
  • 跳变时:额外4-8次运算(多项式计算)
  • 内存:无额外需求
  • 优势:非跳变时开销极低,高频时效率更高

选择建议:

  • 低频振荡器(<100Hz):polyBLEP(跳变稀少)
  • 高频或FM调制:DPW(固定开销,无条件检测)
  • 实时性要求高:DPW(无分支,利于流水线)
  • 音质优先:polyBLEP(更接近理想BLEP)

练习1.7 【开放题】如果要设计一个现代软件合成器,你会如何平衡音质、CPU效率和灵活性?列出你的设计决策和理由。

提示

考虑多采样率处理、查表优化、SIMD指令等技术。

答案

设计决策建议:

  1. 多采样率架构: - 控制信号:1-2kHz(包络、LFO) - 音频信号:2x或4x过采样(非线性处理) - 理由:平衡质量与效率

  2. 振荡器策略: - 低音:DPW或polyBLEP(CPU效率) - 高音:波表+插值(避免混叠) - 理由:频率自适应优化

  3. 滤波器选择: - 主滤波器:SVF(多模式输出) - 特色滤波器:精确建模(如Moog ladder) - 理由:通用性与特色并重

  4. 优化技术: - SIMD向量化(并行处理多音) - 查表+插值(三角函数、包络曲线) - 编译期模板(避免运行时分支)

  5. 架构灵活性: - 插件式振荡器/滤波器 - 可编程调制矩阵 - 脚本化音色设计

这种设计在保证音质的同时,通过分层优化实现高效率,并保持足够的灵活性满足创作需求。

常见陷阱与错误

1. 混叠问题

错误:直接生成方波或锯齿波

// 错误示例
float naive_saw(float phase) {
    return 2.0f * phase - 1.0f;  // 包含无限谐波!
}

正确做法:使用带限技术

// 正确示例
float bandlimited_saw(float phase, float freq, float sr) {
    // 使用polyBLEP或DPW
    return dpw_saw(phase, freq, sr);
}

2. 相位累加器精度

错误:使用float累加相位

phase += freq / samplerate;  // 累积误差!

正确做法:使用定点或双精度

// 使用归一化频率和模1运算
phase = fmod(phase + freq/sr, 1.0);
// 或使用定点算术
uint32_t phase_inc = (uint32_t)((freq/sr) * 4294967296.0);

3. 滤波器稳定性

错误:直接使用高Q值

// Q=100 在某些频率可能不稳定
filter.setQ(100);

正确做法:限制Q值范围,检查极点位置

Q = clamp(Q, 0.5f, 20.0f);
// 确保极点在单位圆内

4. 包络点击声

错误:瞬时开始/停止

output = envelope * oscillator;  // envelope从0跳到1

正确做法:最小Attack/Release时间

min_attack = 0.5ms;  // 防止点击
min_release = 2ms;

5. DC偏移

错误:忽略DC分量

// PWM方波会产生DC
output = pwm_square(phase, pulsewidth);

正确做法:使用高通滤波器或DC阻断

// 简单的DC阻断器
dc_blocker = output - previous_output * 0.995f;

调试技巧

  1. 频谱分析:使用FFT查看谐波结构和混叠
  2. 示波器:观察波形连续性和跳变
  3. A/B测试:与参考实现对比
  4. 边界测试:极端参数值(0Hz、Nyquist频率)
  5. 性能剖析:识别CPU瓶颈

返回目录 | 下一章:FM合成原理