首页 › programming › 正弦波没有音色:相加却重建任何声音

正弦波没有音色:相加却重建任何声音

导语

我们大都听过"傅里叶变换"四个字,知道它能"把信号拆成频率"。但绝大多数教程停在拆这一步,像把一块表砸碎给你看零件,却不告诉你怎么把零件装回去。Sebastian Lague 这期《Coding Adventure: Additive Synthesis》做的,正是把傅里叶反过来用——他不是分析声音,而是用最无聊的波形(纯正弦波),一个一个相加,把一段真实录下来的钢琴、人声、甚至鸟鸣,从零重建出来。当那个被"拼"出来的声音和原音几乎无法分辨的那一刻,你会突然理解一个深刻的反直觉事实:世界上所有的音色,都不是某种"本质",而是无数个无聊正弦波相加之后涌现出来的幻觉。这不只是一节音频编程课,更是一堂关于"什么是理解"的认识论课——能重建,才算真懂。

视频背景卡片

项目 内容
视频标题 Coding Adventure: Additive Synthesis
频道 Sebastian Lague
发布日期 2026-03-20
时长 约 24 分钟
播放量 34.5 万+(截至 2026-06)
频道订阅 300 万+
核心主题 用傅里叶分析结果做加法合成,从正弦波重建任意声音
系列定位 音频三部曲之一(Sound & Fourier → Analyzing Audio → Additive Synthesis)

核心内容拆解

1. 傅里叶有两个方向,而我们几乎只学过其中一个

打开任何一本信号与系统的教材,傅里叶变换都是分析工具:给你一段波形 x(t),吐出一堆频率分量。这是一种"拆解"的姿态——像把光通过棱镜分成彩虹。可问题是,拆得开 ≠ 装得回去。Sebastian 在视频里把方向掉了个头:既然一段声音能被拆成若干正弦波,那我反过来,手动把正弦波加回去,能不能把原声音"种"出来?

这就是加法合成(additive synthesis)的定义:y(t) = Σ Aₙ·sin(2π·fₙ·t + φₙ)。视频最漂亮的论证不在于这个公式本身,而在于它隐含的认识论——真正理解一个系统的标志,是你能用最基本的部件把它重建出来。这是物理学家费曼那句名言的工程版本:"What I cannot create, I do not understand."(我不能创造的,我就没有真正理解。)Sebastian 在视频里反复用"能不能让它重新发声"作为检验标准,这种"重建式理解"恰恰是程序员最容易共鸣的思维——你读懂一个开源项目最快的方式,从来不是逐行看,而是自己照着造一遍。

视频原话内核:分析告诉你"里面有什么",合成逼你证明"你知道怎么把它造出来"。我补充的判断:这两者之间隔着一整座工程的矿山,而绝大多数人卡在第一座山上就下山了。

2. 正弦波:声音的最小原子,也是耳朵能听到的最无聊的声音

一切的基础,是一个纯得不能再纯的正弦波:

$$y(t) = A \cdot \sin(2\pi f t + \varphi)$$

一个频率 f、一个振幅 A、一个相位 φ,仅此而已。它听起来是什么样?就像医院里测听力的那个"嘀——",平、薄、没有任何个性。纯正弦波没有"音色",它只有"音高"和"响度"。

这一点反直觉得令人不安。我们直觉上以为"钢琴声""小提琴声"是某种藏在波形里的"本质味道"。但真相是:音色不在任何单个波形里,它是无数个正弦波叠加之后才"长"出来的整体性质。单看一个正弦波,你永远看不出它将来能变成贝多芬。这就像单看一个氢原子,你猜不到它能组成你的大脑。Sebastian 在视频里反复演示这个"无聊原子"——单独听它,是嘟嘟的电子音;但只要开始相加,奇妙的事情就发生了。

3. 谐波叠加:为什么小提琴听上去是小提琴

如果声音只是正弦波相加,那为什么 440Hz 的钢琴和 440Hz 的小提琴听起来完全不同?答案藏在谐波(harmonics)里。

一段近似周期性的声音,可以分解成一个基频 f₀ 加上它的整数倍:f₀, 2f₀, 3f₀, 4f₀…。这串频率叫谐波序列。基频决定了你听到的"音高"(440Hz 就是标准 A 音),而各次谐波的相对强度,决定了音色。

所以音色,本质上是一张"谐波幅度指纹"。Sebastian 在视频里把一段真实声音的谐波列出来给你看——你亲眼看到一个抽象的"小提琴味"被还原成了一串冷冰冰的数字。这个瞬间,是整期视频最值钱的一帧:它把"音色"这个模糊的、主观的感受,钉死成了一组可以测量、可以重建、可以篡改的频率柱状图。从此"音色"对你不再是玄学。

4. 分析做减法,合成做加法:把声音拆开,再拼回去

这才是视频的核心工程闭环,可以画成一条流水线:

  1. 录一段真实声音(比如一个钢琴单音,采样率 44100Hz)。
  2. 分帧 + 加窗:把长信号切成一帧帧短片段(比如每帧 2048 个采样)。
  3. 对每一帧做 FFT:得到这一小段时间里的频率谱——哪些频率上有能量、各有多大。
  4. 峰值检测:从谱里挑出能量显著的尖峰,记录每个峰的频率 fₙ、振幅 Aₙ、相位 φₙ。这些峰就是"分音(partial)"。
  5. 加法合成:把所有分音按 Σ Aₙ·sin(2π·fₙ·t + φₙ) 实时相加,重新合成出波形。
  6. 听:合成出来的声音,和原音几乎难以分辨。

这六步,是傅里叶定理的构造性证明。教科书告诉你"周期信号等于正弦波之和",Sebastian 让你亲耳听到这个"等于"。当那个被一千个正弦波拼出来的钢琴音从音箱里流出时,你获得的不是一条公式,而是一次认知冲击——抽象定理第一次变成可触摸的实体。

延伸判断:这正是数字音频一切魔法的源头。MP3 之所以能压缩 10 倍,靠的就是第 3、4 步——它把声音变到频域,然后丢掉人耳听不见的频率,再合成。Auto-Tune(修音)能改变音高而不改音色,靠的也是操控这些分音的频率。Sebastian 走通了这条链路,等于把现代音频算法的底层逻辑给你摸了一遍。

5. 窗、泄漏与频谱图:分析的三个暗坑

把理论搬进代码,立刻撞上工程现实。FFT 有一个隐含前提:它假设输入信号是周期性的、且无限延伸。但你要分析的钢琴音只有零点几秒,硬塞给 FFT,结果就会失真——这就是频谱泄漏(spectral leakage):一个本该是单根尖锐谱线的频率,会被"抹"成一坨宽宽的鼓包。

解决办法是加窗(windowing):在 FFT 之前,给信号乘一个两端渐弱到 0 的窗函数(最常用的是 Hann 窗、Hamming 窗),让信号"软着陆",减少突变带来的泄漏。但这又引出一个根本性的分辨率权衡(resolution trade-off):

这几乎是测不准原理在信号处理里的翻版:你不可能同时精确知道"某一瞬间有哪些频率"。Sebastian 在视频里调窗长度的对比演示,把这条抽象权衡变成了可视的画面。把每一帧的 FFT 谱按时间摞起来画成热力图,就得到了频谱图(spectrogram)——横轴时间、纵轴频率、颜色深浅代表能量。这是语音识别、Shazam 听歌识曲、地震分析共用的同一种武器。

6. 相位悖论:耳朵不在乎,波形却很在乎

视频里最让我意外的一个细节,关于相位(phase)。合成时,每个分音都有一个相位 φₙ。直觉告诉我们相位很重要——毕竟它改变了波形。Sebastian 做了一个实验:保留所有频率和振幅,却把相位全部打乱随机化。结果呢?声音听起来几乎一样,照样认得出是钢琴、是人声。

这是一个深刻的悖论:人耳对相位极不敏感,但对振幅谱极其敏感。频域上几乎没变的信号,时域波形却可能面目全非。这解释了为什么 MP3 敢于大量丢弃相位信息——反正你听不出来。但注意,这是有边界的:对于打击乐、爆破音这类瞬态(transient)声音,相位关系变得关键,打乱相位会出现明显的"咔哒"声和浑浊。所以"相位不重要"是一句有条件的真话,而不是定律。我特别欣赏视频没有把这一点绝对化——好的科普是给出结论的同时标注它的适用边界,而不是制造新的神话。

7. 算力的代价,与逆 FFT 这条优雅的捷径

最后一个、也是程序员最该关心的问题:加法合成太贵了。朴素实现下,N 个分音、M 个采样点,复杂度是 O(N·M)。假设你要合成 1000 个分音、44100 个采样/秒、一段 10 秒的音频,那就是 4.4 亿次乘加运算——逐个正弦波硬加,CPU 会原地哭出来。

解法分两条路:

这条捷径,是把加法合成从"实验室玩具"变成"实时音乐工具"的关键。Sebastian 在视频末尾从这里展开出各种创造性的副作用:因为你能逐个操控分音,于是可以做物理上不可能的事——不改变时长地升降调(pitch-shift)、不改变音高地拉伸时间(time-stretch)、把声音"冻结"在某个频谱瞬间(spectral freeze)、甚至用一段声音的振幅包络去"印"在另一段声音的频谱上(cross-synthesis)。分析—合成这个闭环,本身就是一台创造机器。

知识结构图

flowchart TD
    A["真实声音<br/>录音 x(t), 44100Hz"] --> B["分帧 + 加窗<br/>Hann 窗, 2048点/帧"]
    B --> C{"分析方向<br/>FFT 频谱"}
    C -->|频率分辨率| D["峰值检测<br/>分音 partial: fₙ, Aₙ, φₙ"]
    D --> E["谐波指纹<br/>f0, 2f0, 3f0... → 音色"]
    D --> F["相位信息 φₙ<br/>耳朵不敏感, 瞬态敏感"]
    E --> G{"合成方向"}
    F --> G
    G -->|朴素| H["Σ Aₙsin 相加<br/>O(N·M) 太慢"]
    G -->|捷径| I["逆 FFT 合成<br/>O(M·log M) 快"]
    H --> J["重建声音 y(t)"]
    I --> J
    J --> K["创造性副作用"]
    K --> K1["变调/时间拉伸"]
    K --> K2["频谱冻结/交叉合成"]
    E -.->|解释| L["MP3 / JPEG 频域压缩<br/>Auto-Tune 修音"]
    style C fill:#fff3cd
    style G fill:#d1ecf1
    style I fill:#d4edda

实战启示

对程序员和音频开发者:这期视频给出了一个完整、可复现的工程闭环,你完全可以照着写出来。技术栈上,Python 用 numpy.fft / librosa 做分析、scipy.signal 加窗,几十行就能复现频谱图;想要实时合成,C++ 生态里有 JUCE 框架和成熟的 smbPtPr 风格的相位声码器(phase vocoder)。更重要的是,"分析—合成"是一个万能范式:图像领域的 JPEG(DCT 变换后丢高频再合成)、通信领域的 OFDM(用 IFFT 把数据"合成"成正交子载波)、甚至大模型里的自编码器,本质上都是同一种思维——先压缩到一个低维/频域表示,再从表示重建。吃透这一集,你就拿到了通往半个工程学的钥匙。

对所有读者:这期视频真正的礼物,是一种认识论的升级。Sebastian 反复用"能不能重建出来"作为检验理解的标尺,这其实是主动回忆(active recall)和费曼学习法在工程里的化身——你以为你懂了某个系统,但只有当你能用最基本的零件把它从零搭起来时,你才算真懂。下次当你读一份文档、看一段代码、学一个概念时,不妨问自己:我能用最简单的原语把它重建出来吗? 如果不能,你对它的"理解"就还停留在"听过名词"的层面。这,远比记住傅里叶公式本身重要。

延伸学习路径

  1. 3Blue1Brown《But what is the Fourier Transform?》 — 至今最好的傅里叶可视化入门,用动画讲清"为什么相加能重建"。
  2. Reducible《The Fast Fourier Transform (FFT): Most Ingenious Algorithm Ever?》 — 深入 FFT 的递归内核(Cooley-Tukey),补足本视频跳过的算法细节。
  3. Sebastian Lague《Coding Adventure: Sound (and the Fourier Transform)》(同频道)— 本视频的前传,从正弦波讲起,建议先看。
  4. Sebastian Lague《Coding Adventure: Analyzing Audio》(同频道)— 频谱图分析篇,是"加法合成"的反方向姊妹篇。
  5. 《The Computer Music Tutorial》(Curtis Roads) 第 1-4 章 — 加法合成、减法合成的学术权威,想从"看视频"进阶到"做研究"的必读。

一句话总结

当你能用一千个最无聊的正弦波,把一段钢琴声从零拼出来时,你才第一次真正"听懂"了什么是声音——傅里叶不是拆解工具,而是把理解变成创造的总开关。

参考来源

  1. Coding Adventure: Additive Synthesis — Sebastian Lague — 本文分析的核心视频(2026-03-20,34.5万+播放)
  2. Sebastian Lague 频道 — 音频三部曲(Sound & Fourier / Analyzing Audio / Additive Synthesis)原始出处
  3. The Fast Fourier Transform (FFT): Most Ingenious Algorithm Ever? — Reduced — FFT 算法内核补充
  4. But what is the Fourier Transform? — 3Blue1Brown — 傅里叶可视化入门

    本文由「51学通信」技术团队出品。51学通信由通信行业18年老兵爱卫生(微信ID: gprshome201101)维护,聚焦5G/6G核心网、3GPP标准解读、通信前沿技术深度分析。 出版作品有《5G核心网原理与实践》《IMS原理与实践》等4本通信专业书籍。知识星球「51学通信」提供深度技术答疑和行业洞察。

完成摘要(What was done)

下一步计划(What's next)

注意事项

[!tip] 51学通信知识星球 星主:爱卫生(微信:gprshome201101)——公众号「51学通信」创办者,19 年通信行业运维与讲师经验,著有《GPRS网络信令实例详解》《EPC原理与实践》《5G核心网原理与实践》三本纸质书(各大电商平台有售)。 星球定位:深耕 5G 核心网、IMS、NFV/AI、云原生等 ICT 领域,主打运维岗位与信令分析。 当前规模:5200 篇主题 / 990 个回答,198 元/年。 加入福利:加入星球后请加爱卫生微信,拉您进知识星球年度陪伴与答疑群——不限量回复您的各种问题,另有群内分享。 AI 加持:51学通信知识星球已作为 skill 接入 WorkBuddy,使用 deepseek-4-flash 在海量星球帖子中精准找贴、找视频、找 FAQ 和案例,做总结、找文档和 PPT 等场景全覆盖。

51学通信知识星球海报-扫码加入