定义

我们说的「调制」指的是对信号(波形)进行编辑,使得它能够携带信息,从而方便信息的传递和交流,的这么样的一个过程。相对而言,「解调制」或者解调指的是从调制了的信号中恢复出原先调制进去的信息。调制就好像是把信塞进信封里,解调就是把信拿出来。承载着被调制信息的信号称为载波 (carrier), 被调制进去的信息本身作为一个信号称为基带 (baseband). 基带信号和载波信号之间的关系就好比信和信封的关系。

我们说的「信号」,物理上它指的是一个物理量,它可以被观测,它的观测结果可能随时间 t 的变化而变化;逻辑上,一个「信号」指的是一个函数 y(t), y(t) 的输出值至少是可以比较的。除非特别说明,在本文中我们说的信号一般指的是逻辑上的信号,而且经常会直接用函数符号表示。

我们说的「数字信号」指的是这么样的一类信号:y(t), 它的输出范围是 {0, 1} 集合内的整数。另外,我们还把数字信号叫做「比特流」、「字节流」或者「符号流」,一个二进制整数构成的序列(或有序元组),我们称之为「符号」,例如 1001 是一个符号,010101 也是一个符号。

一个「比特」是一个物理的或者逻辑的可观测实体,它只有两种可观测到的状态,在纸面上,我们把一个比特的两种可能的观测得到的状态(结果)分别记录为 0 和 1. 例如,办公室中的一个电灯开关可以看作是一个比特,因为它一般只有「开」和「关」这两种状态,并且可以把「开」状态记做 1,「关」状态记做 0.

「模拟信号」指的是连续变化的信号。相对而言数字信号一般都是不连续的。声音信号(音频信号)可以看作是模拟信号,因为我们一般认为空气中风压的变化是连续的,就算观测到了不连续,也是因为采样率不够高(从而出现了锯齿)的缘故。

「样本」是信号的一次观测结果,在数学上它就是一个值,例如把 $t_0$ 带入 $y(t)$, 得到 $y(t_0)$, 这就是一个样本。为了能够在计算机中对信号进行处理,需要拿到信号的离散形式,这就需要对信号进行观测。一般来说计算机更擅长分析的是离散形式的信号,而不是解析式的(例如信号的数学表达式)。采样的频率称为「采样率」,它指的是一个观查者在单位时间内对一个信号做了多少次观测,一组样本数据一般要结合它的采样率一起才有分析的意义。

目的

我们希望在这篇文章中演示一遍如何把一个数字信号调制到声音信号中,使得该数字信号得以以另外一种方式进行传递。

理论普及

在开始具体的编码工作之前,我们需要在一些基础知识上达成共识(一致)。

调制方式

调制方式(制式)影响着,或者说跟要传递什么类型的数据有关系。例如,假如我们希望在一个载波中调制音频信号,或者说把声音信息调制到一个载波中,我们可能会选用 AM/PM/FM/SSB 等作为调制方式,因为,在这类调制方式中,基带信号和载波信号都是模拟的。当调制方式确定了,解调方式一般也就顺理成章地确定了。

调制方式的选择,除了跟基带信号有关系外,跟载波信号,也就是跟它是怎样被传递的,也有关系,不过我们点到为止。

而当我们要调制进载波的基带信号本身是数字信号,那么可能会选用(不止)FSK/PSK/ASK 等调制方式,在本文中,我们选用 PSK 调制方式(Phase Shift Keying). 在 PSK 制式中,基带信号是数字的,而载波信号是模拟的。

要理解 PSK 制式,首先你得理解 PM 制式 (Phase Modulation), PM 制式,和 AM 制式、FM 制式某种程度上来说都是类似的:在调制时,都是只对其中的一个参数进行修改,这几个参数无非就是振幅/频率/相位。

模拟形式的载波本身一般都是正弦波(或正弦波的累加),它可以写成下列形式,对于时间变量 t:

$$ y = A(t) \sin ( 2 \, \pi \, f(t) \; t + \theta(t)) $$

对于 AM 制式而言,f(t), $\theta(t)$ 都是常量,变化的只有 $A(t)$, 也就是说只有幅度 (amplitude) 在变化,这也是调幅这个名称的由来。类似的,对于 FM, 只有 f(t), 也就是频率在变。对于 PM(调相),只有 $\theta(t)$ 在变。