颈脖Blog

关于音乐中的计算机原理

发烧友

最近入手了索尼的黑砖二代NW-WM1AM2,等了几个月终于拿到了。

很喜欢索尼的设计
很喜欢索尼的设计

我很喜欢索尼播放器的味道,虽然我说不出来到底是什么味道。也许是宗教的味道吧。 — 某网友

声波

声音是由物体振动产生。振动通过介质(通常是空气)传导到我们耳朵中引起耳膜振动,然后经过一系列复杂变化,细胞将振动机械能转换为生物电信号,由神经传输到大脑。大脑对这些信号进行处理,于是人就听见了“声音”。

对于某一固定点的振动可以用波形图来表示,x轴是时间,y轴是振动该点离开原点的距离。

对于一个振动,最重要的两个属性是频率和振幅。

频率是指一秒钟振动的次数,对于音高,频率越高越尖锐刺耳。

振幅是指最大的位移,对于音量,振幅越大音量越大。

计算机储存声音

声波是一个随时间变化的连续函数(模拟信号),任意两个时间点之间都有无数个值。

为了存储在计算机中,我们需要将连续函数变成离散序列(数字信号)。具体的方法是使用固定时间的间隔对函数进行采样

采样率(Sample Rate)

采样率表示每秒对模拟信号的采样次数。

A为低采样率 B为高采样率 图片来自Adobe
A为低采样率 B为高采样率 图片来自Adobe

采样率越高,数字波形的形状越接近原始模拟波形。但采样频率越高,样本越多,数据量越大,会增加储存压力。所以我们需要在接近原始信号与储存之间做一个平衡,找到能捕获连续信号的所有信息的离散采样信号所允许的采样频率的下限。

当采样率大于等于一段波形最高频率两倍时,我们就可以不失真的表示这段波形。 — 奈奎斯特–香农采样定理 简单版本 (完整版 里面数学证明超纲了)

人耳能感受到的振动频率范围约为20-20KHz,所以只要采样率超过40KHz即可保留所有人耳能听到声波的所有细节。所以无损音乐的CD采样率是44.1KHz

位深度(Bit Depth)

采样声波时,需要记录每个采样时刻对应的模拟信号值,记录每个信号值所用的比特个数即为位深度。比如16-bit即为用int-16来记录每个模拟信号值。位深度决定动态范围。较高的位深度可提供更多可能的值,产生更大的动态范围、更低的噪声基准和更高的保真度。

位深越高,提供的动态范围越大 图片来自Adobe
位深越高,提供的动态范围越大 图片来自Adobe

码率(Bit rate)

对于一段声波,有了采样率和位深度,我们即可以用一个数组在计算机中表示1秒中该声波的信息。

比如我们用 16bit 位深度和 44.1KHz 的采样频率,那么一段一秒钟的声音就变成了一个 44100 大小的 int16 数组。

而音乐往往由几个不同的声道的声音组成。

码率 = 位深度 * 采样率 * 声道数

码率即表示传输一秒的音乐所需要的比特数。

编码(Encode)

前面说到声音经过采样后在计算机里面的表现形式是数组。对于这些数组,我们可以直接存,也可以经过压缩存(压缩可以是无损压缩,也可以是有损压缩)。不同的方法对应着不同的编码,即各种各样的音频格式。

WAV 无压缩直接存

APE, FLAC, ALAC 无损压缩存

MP3, AAC 有损压缩存

傅立叶变换

在电影《无间道》里面有一个景点桥段是,梁朝伟和刘德华在一家音响店见面,梁朝伟说了一句很经典的话来形容Hifi设备。

高音甜,中音准,低音劲。

总之一句话,就是通透。

无间道
无间道

这里所说的高音,中音,低音其实是指音乐的频率。人怎么区分音乐中这些频率呢?其实是我们大脑对接受的到声波信号进行了傅立叶变换,将一个时域信号变成一个频域信号。

傅立叶级数

傅立叶告诉我们,任何一个周期性的函数f(t)可以用一组正余弦弦函数的和来表示。

[latex]\displaystyle f(t)= \frac{a_0}{2} + \sum_{n=1}^\infty(a_ncos(nt)+b_nsin(nt))[/latex]

其中𝑎𝑛和𝑏𝑛定义实频率分量𝑛𝑡的相位和振幅。

这个定理反过来很好理解,因为正余弦函数都是周期函数,所以他们的和也必定是周期函数,周期是所有正余弦函数周期的最小公倍数。

连续傅立叶变换

对于一个函数,我们怎么知道该函数在某个频率上的振幅和相位呢?

我们定义函数𝑓(𝑡),其连续傅里叶变换为:

[latex]\displaystyle F(\omega)=\textstyle \int_{-\infty}^{\infty}f(t)e^{i\omega t} dt[/latex]

𝑤为角频率,𝐹(𝑤)为复数,并且是信号在该频率成分处的相位和振幅。

那如何将一组频率信号变成时域信号呢?

[latex]\displaystyle f(t)=\frac{1}{2\pi}\textstyle \int_{-\infty}^{\infty}F(\omega)e^{i\omega t} d\omega[/latex]

离散时间傅立叶变换

计算机只能处理离散信号,所以对于声波的计算机处理,也是经过固定均匀间隔采样,然后对于不同采样片段进行傅立叶变换。

Subscribe
Notify of
guest

0 Comments
Inline Feedbacks
View all comments