一、声音的物理基础:频率、振幅、相位与采样定理
各位同学好,我是你们这门课的老朋友。咱们今天聊点最根本的东西——声音到底是个啥?
很多人觉得声音很玄乎,看不见摸不着。其实说白了,声音就是一种机械波。你敲一下桌子,桌面振动,挤压周围的空气,空气分子像多米诺骨牌一样一层层传出去,最后撞到你的耳膜。就这么简单。
但我们要做音频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是信号中的最高频率分量。
为什么?我画个图你就明白了。
你看,如果采样频率太低(红色点),重建出来的信号(红色虚线)频率完全变了,变成了一个低频信号。这就是所谓的混叠(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的世界里,没有玄学,只有物理和数学。