一、声音的物理基础:频率、振幅、相位与采样定理

各位同学好,我是你们这门课的老朋友。咱们今天聊点最根本的东西——声音到底是个啥?

很多人觉得声音很玄乎,看不见摸不着。其实说白了,声音就是一种机械波。你敲一下桌子,桌面振动,挤压周围的空气,空气分子像多米诺骨牌一样一层层传出去,最后撞到你的耳膜。就这么简单。

但我们要做音频DSP,光知道“声音是波”可不够。你得能用数学把它描述出来,能用代码把它表示出来。今天这第一课,我就带大家把声音的四个核心概念掰扯清楚:频率、振幅、相位,还有那个让所有数字音频工程师又爱又恨的采样定理。

核心观点: 所有数字音频处理,本质上都是在跟频率、振幅、相位这三个参数打交道。采样定理决定了我们能处理的频率上限。

1.1 频率——声音的“高矮”

频率,单位是赫兹(Hz),表示一秒钟内振动了多少次。振动越快,频率越高,我们听起来音调就越高。

我记得刚入行那会儿,有一次调试一个语音降噪算法,发现女声总是被误伤,男声却好好的。查了半天,原来是滤波器设计时把高频截止点设得太低了。女声的基频和大部分谐波都在200Hz以上,直接被一刀切了。嗯,从那以后我设计滤波器前一定会先确认信号的频率范围。

人耳能听到的频率范围大概是20Hz到20kHz。但实际项目中,我们更关心的是:

  • 次声波(<20Hz): 地震、风暴会产生,人耳听不到,但某些传感器能捕捉到。
  • 可听声(20Hz–20kHz): 语音、音乐、环境声都在这个范围。
  • 超声波(>20kHz): 蝙蝠、医学超声,人耳听不到。

在DSP里,频率决定了滤波器的设计目标。比如你要滤除50Hz的工频干扰,那你的陷波滤波器就得精准地卡在50Hz上。

1.2 振幅——声音的“大小”

振幅,说白了就是振动的幅度。振幅越大,声音越响。在数字音频里,振幅通常用采样值的绝对值来表示,范围从0到最大值(比如16位整数的0到32767)。

但这里有个坑。振幅和响度不是线性关系。人耳对声音的感知是对数级的。所以我们在做音量控制时,用的不是线性滑条,而是指数或对数曲线。我曾经见过一个新手直接把采样值乘以0.5来做半音量,结果听起来像是声音被闷住了,而不是音量减半。为什么?因为人耳对低振幅区域的敏感度远高于高振幅区域。

在实际的音频DSP中,振幅通常用分贝(dB)来表示:

dB = 20 * log10(amplitude_ratio)

这个公式你以后会天天见到。记住它。

振幅比 分贝值 听觉感受
1.0 0 dB 原始音量
0.5 -6 dB 音量减半(感觉上)
0.1 -20 dB 明显变小
0.01 -40 dB 几乎听不见

小技巧: 在代码里做音量渐变时,不要直接线性改变振幅值。用dB值做线性变化,再转回振幅,效果会自然得多。

1.3 相位——声音的“时间差”

相位这个概念,很多初学者容易懵。我换个说法:相位就是波形在时间轴上的位置偏移。

想象两个完全一样的正弦波,一个从0点开始,另一个延迟了半个周期才开始。它们之间就有了180度的相位差。如果把它们叠加在一起,会发生什么?

  • 同相(0°): 振幅加倍,声音更响。
  • 反相(180°): 振幅抵消,声音消失。
  • 其他角度: 产生复杂的叠加效果。

相位在降噪滤波器里特别重要。比如自适应滤波器,就是通过调整信号的相位和振幅,让噪声信号和参考信号反相抵消。我做过一个车载降噪项目,麦克风放的位置差了几厘米,相位就全乱了,降噪效果直接从-20dB掉到-3dB。你想想看,几厘米的距离,在声速340m/s下,对应的时间差只有不到0.3毫秒,但已经足够让算法失效了。

注意: 相位是周期性的。0°和360°其实是同一个位置。所以在做相位计算时,一定要做模运算(mod 2π),否则会出现相位跳变。

1.4 采样定理——数字世界的“入场券”

好了,前面讲的都是模拟世界的概念。但我们要做DSP,得把模拟信号变成数字信号。这个过程叫模数转换(ADC)。

采样定理(也叫奈奎斯特-香农定理)告诉我们:要无失真地重建一个模拟信号,采样频率必须至少是信号最高频率的两倍。

fs ≥ 2 * f_max

其中fs是采样频率,f_max是信号中的最高频率分量。

为什么?我画个图你就明白了。

采样定理示意图:欠采样 vs 正常采样 原始模拟信号(高频) 欠采样重建信号(错误!频率变低) 原始信号 欠采样(混叠) 正常采样

你看,如果采样频率太低(红色点),重建出来的信号(红色虚线)频率完全变了,变成了一个低频信号。这就是所谓的混叠(aliasing)。混叠一旦发生,就再也无法恢复原始信号了。

我个人的习惯是,在设计任何数字音频系统时,采样频率至少留出20%的余量。比如你要处理20kHz的信号,别卡着40kHz的边,用48kHz甚至96kHz。为什么?因为现实世界中的抗混叠滤波器不是理想砖墙,需要过渡带。你留点余量,滤波器设计起来也轻松。

关键公式:

  • 奈奎斯特频率 = fs / 2(这是你能无失真表示的最高频率)
  • 混叠频率 = |f_signal - k * fs|(其中k是整数,使得结果在0到fs/2之间)

1.5 实际应用中的采样率选择

不同的应用场景,采样率的选择差别很大。我列个表,你以后做项目时可以直接参考:

应用场景 常用采样率 最高频率 说明
语音通信 8 kHz 4 kHz 电话质量,够用
语音识别 16 kHz 8 kHz 覆盖大部分语音信息
音乐CD 44.1 kHz 22.05 kHz 经典标准
专业音频 48 kHz 24 kHz 电影、广播常用
高采样率 96 kHz / 192 kHz 48 kHz / 96 kHz 高保真、后期处理

避坑指南: 我曾经在一个嵌入式项目里用了8kHz采样率做语音降噪,结果发现高频噪声根本滤不掉。后来一查,噪声频率在4.5kHz,已经超过了奈奎斯特频率(4kHz),混叠后变成了3.5kHz的信号,混在语音里根本分不开。从那以后,我每次选采样率都会先确认噪声频谱。

1.6 本章小结

好,咱们捋一遍今天的内容:

  • 频率决定音调,是滤波器设计的核心参数。
  • 振幅决定响度,用dB表示更符合人耳感知。
  • 相位决定时间对齐,是降噪抵消的关键。
  • 采样定理告诉我们,采样率必须大于最高频率的两倍,否则会出现混叠。

这些概念听起来简单,但我在实际项目中见过太多因为忽略它们而翻车的案例。你把这些基础打牢了,后面学滤波器设计、降噪算法,就会顺风顺水。

记住一句话:音频DSP的世界里,没有玄学,只有物理和数学。