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

synthesizer_tutorial

第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

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

频谱表示与倍音结构

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

基频(f₀):决定音高

谐波(nf₀):整数倍频率,决定音色明亮度

非谐波成分:打击声、噪声等,增加真实感

典型波形的谐波结构:

锯齿波:所有谐波,振幅∝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|

防止混叠的方法:

模拟抗混叠滤波器:ADC前的陡峭低通

过采样:提高采样率,放宽滤波器要求

带限信号生成:从源头避免高频

过采样与降采样

过采样改善信号质量:

减少量化噪声(噪声整形)

放宽抗混叠滤波器要求

提高非线性处理的精度

降采样流程:

低通滤波(防止混叠)

抽取样本

可选:噪声整形

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

实现步骤:

生成朴素波形

检测不连续点

在不连续点加入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):数字建模技术

软件合成器兴起:计算能力解放创造力

关键技术突破

DSP芯片发展:

专用乘累加单元

并行处理架构

实时处理能力

算法创新:

高效抗混叠技术

非线性建模

机器学习应用

控制接口演进:

MIDI协议(1983)

OSC协议

MPE(多维复音表达)

现代合成器架构

混合架构趋势:

数字控制 + 模拟信号路径

├── 数字振荡器(无限复音)

├── 模拟滤波器(温暖音色)

└── 数字效果器(灵活处理)

模块化复兴:

Eurorack标准统一

数字模块与模拟模块共存

CV/Gate与MIDI互通

云端合成:

分布式处理

协作创作

AI辅助音色设计

本章小结

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

关键概念

傅里叶分析:任何周期信号都可分解为谐波之和,这是理解音色的数学基础

模拟合成器架构:VCO→VCF→VCA的信号流,加上ADSR和LFO调制

采样定理:f_s > 2f_max是数字音频的基本约束

带限振荡器:BLIT、BLEP、polyBLEP、DPW等技术解决数字域的混叠问题

数字滤波器:通过Z变换和双线性变换,将模拟滤波器移植到数字域

技术演进:从模拟到数字,从硬件到软件,合成技术不断创新

重要公式汇总

傅里叶级数: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;

调试技巧

频谱分析:使用FFT查看谐波结构和混叠

示波器:观察波形连续性和跳变

A/B测试:与参考实现对比

边界测试:极端参数值(0Hz、Nyquist频率)

性能剖析:识别CPU瓶颈

返回目录

下一章:FM合成原理

Copyright © 2022 网游活动资讯_新服开区公告_礼包兑换中心 - rizhaoppp All Rights Reserved.