第2章 声学基础与数字信号处理回顾:声音的物理特性、人耳听觉特性、采样定理、傅里叶变换、数字滤波器基础

各位同学,欢迎来到第二讲。做助听器算法,说白了就是跟声音打交道。你连声音的脾气都摸不透,怎么去驯服它?这一章我们快速回顾一下声学基础和数字信号处理的核心概念。别嫌基础,我敢说,很多坑都是因为基础不牢才踩进去的。

2.1 声音的物理特性:你得知道对手长什么样

声音的本质是什么?是机械振动在介质中的传播。在空气中,它就是疏密波。我们做算法,最关心的三个物理量:频率、幅度、相位。

  • 频率(Frequency):单位是Hz。决定了音调高低。人耳能听到的大概是20Hz到20kHz。助听器主要处理的是这个范围。
  • 幅度(Amplitude):决定了响度。我们通常用声压级(SPL)来衡量,单位是dB。
  • 相位(Phase):这个容易被忽略。但在多麦克风波束成形里,相位差就是命根子。

避坑指南: 我曾经在调试一个反馈抑制算法时,忽略了相位信息,结果滤波器设计出来,低频增益一加上就自激振荡。后来才发现,是相位裕度不够。嗯,相位这东西,你越晚重视,它坑你越狠。

2.2 人耳听觉特性:算法是为耳朵服务的

你设计的算法再漂亮,人耳听着不舒服,那就是废品。人耳有几个关键特性,你必须刻在脑子里。

2.2.1 等响曲线

人耳对不同频率的敏感度不一样。对3-4kHz最敏感,对低频和高频相对迟钝。这就是为什么助听器需要做多通道增益补偿。我个人习惯,在做初始增益配置时,一定会参考ISO 226标准的等响曲线数据。

2.2.2 掩蔽效应

一个强音会掩盖掉附近的弱音。这在助听器里既是麻烦也是机会。麻烦在于,环境噪声会掩蔽掉语音。机会在于,我们可以利用掩蔽效应来做心理声学模型,比如MP3压缩就是靠这个。我在做降噪算法时,就经常利用掩蔽阈值来动态调整降噪强度——听不见的噪声,何必费力去消?

2.2.3 听觉动态范围

正常人的听觉动态范围大约120dB。但听损患者这个范围会变窄,尤其是感音神经性耳聋患者。这就是为什么助听器需要做宽动态范围压缩(WDRC)。

2.3 采样定理:数字世界的入场券

模拟信号要变成数字信号,第一步就是采样。采样定理(Nyquist定理)说:采样频率必须大于信号最高频率的两倍。

公式很简单:fs > 2 * fmax

助听器里,语音信号最高频率一般到8kHz就差不多了。所以采样率通常用16kHz。为什么不用更高?功耗啊!你想想看,助听器那么小的电池,采样率翻倍,运算量翻倍,功耗也翻倍。16kHz是性能和功耗的一个平衡点。

注意: 采样前必须加抗混叠滤波器。我见过有人为了省成本,把抗混叠滤波器去掉了,结果高频噪声混叠到低频段,语音质量一塌糊涂。这个钱不能省。

2.4 傅里叶变换:把声音拆开看

时域信号我们看不懂,但频域信号一目了然。傅里叶变换就是把信号从时域变到频域的工具。

在嵌入式系统里,我们用的是离散傅里叶变换(DFT),实际实现用的是快速傅里叶变换(FFT)。

助听器里,FFT的典型配置:

参数 典型值 说明
FFT点数 256或512 点数越多,频率分辨率越高,但延迟越大
帧移 64或128 决定了处理延迟,一般要求小于10ms
窗函数 汉宁窗或海明窗 减少频谱泄漏

我的经验: 做FFT时,窗函数的选择很关键。汉宁窗频率分辨率好,但幅度精度差。海明窗则相反。我一般先用汉宁窗做分析,如果发现频谱泄漏严重,再换凯泽窗试试。没有银弹,只有试出来的经验。

2.5 数字滤波器基础:算法的核心武器

滤波器是助听器算法的基础。我们主要用两种:FIR和IIR。

2.5.1 FIR滤波器

FIR滤波器稳定,线性相位,没有反馈。但阶数高,计算量大。适合做分频、波束成形。

一个简单的FIR滤波器实现:

// FIR滤波器实现
float fir_filter(float input, float *coeffs, float *buffer, int order) {
    float output = 0.0f;
    // 移位
    for (int i = order - 1; i > 0; i--) {
        buffer[i] = buffer[i - 1];
    }
    buffer[0] = input;
    // 卷积
    for (int i = 0; i < order; i++) {
        output += coeffs[i] * buffer[i];
    }
    return output;
}

5.2 IIR滤波器

IIR滤波器阶数低,计算量小,但有相位失真,可能不稳定。适合做均衡、反馈抑制。

IIR滤波器设计时,我建议用双线性变换法。把模拟滤波器映射到数字域,效果比较稳定。

避坑指南: 我曾经在做一个多通道均衡器时,用了高阶IIR滤波器,结果在低频段出现了极限环振荡。后来查资料才发现,是系数量化误差导致的。解决办法:用双二阶节(Biquad)级联,每个节只做二阶,这样稳定性好很多。

2.6 小结

这一章内容不少,但都是基本功。声音的物理特性让你知道对手是谁,人耳听觉特性让你知道服务对象是谁,采样定理、傅里叶变换、数字滤波器则是你手里的工具。下一章,我们就要开始真正动手做多场景自适应模式了。到时候你会发现,今天讲的这些,每一个都会用到。

嗯,先消化一下。有问题随时问我。