2. 车载音频基础

在车载Linux音频系统中,所有软件栈最终都要服务于一个目标:把存储在文件或网络中的数字音频数据,准确、实时地还原成车内乘客听到的声音。要理解ALSA、PulseAudio、PipeWire这些软件层的行为,必须先回到物理与信号层面,弄清楚声音如何被采样、量化、编码,以及它在车内如何被传输和改变。本章围绕声音物理特性、数字音频采样与量化、PCM编码、音频总线与接口、车载声学环境五个基础点展开,为后续驱动与调音打下共同语言。

一、声音的物理特性:频率、振幅与相位

声音本质是介质中的机械振动,在空气中以纵波形式传播。描述一段声音,工程上最关心三个物理量:频率决定音调高低,单位赫兹(Hz),人耳可听范围约20Hz~20kHz;振幅决定响度,通常用声压级dB SPL表示;相位描述同一频率下波形的时间偏移,多路扬声器之间相位不一致会造成抵消或声像偏移。车载环境中,低频噪声(如发动机二阶振动、路面激励)能量集中,而人耳对2~5kHz又最敏感,这直接决定了后续均衡与降噪策略的侧重点。

此外,声音在车内还会经历反射、吸收与驻波。玻璃、皮革、塑料对高频吸收差异很大,导致同一套扬声器在不同车型中听感完全不同。因此“音频调校”不是纯软件问题,而是物理声学与数字信号处理的联合问题。

二、数字音频采样与量化:把连续变成离散

要让计算机处理声音,必须经过采样和量化。采样是按固定时间间隔读取模拟波形幅值,采样率fs决定可表示的最高频率,依据奈奎斯特定理,可还原频率上限为fs/2。常见采样率有44.1kHz、48kHz、96kHz;车载系统因与视频、蓝牙、A2B等同步,48kHz最为普遍。

量化是把连续幅值映射到有限个离散电平,位深决定动态范围。理论上,位深每增加1bit,动态范围约增加6dB。16bit约96dB,24bit约144dB。车载功放与麦克风链路中,24bit可保留更多低电平细节,有利于后续降噪和回声消除。

采样率决定“能记录多高的音”,位深决定“能记录多轻的音”;两者共同决定数字音频的带宽与信噪比上限。

三、PCM编码:最基础也最重要的音频表示

PCM(Pulse Code Modulation,脉冲编码调制)是最直接的音频数字化形式:按时间采样、按幅度量化,再把每个样点用二进制表示。它不压缩,因此保真度高、编解码延迟低,是车载音频内部传输与ALSA设备节点的默认格式。PCM数据率可由下式估算:

数据率 = 采样率 × 位深 × 声道数
例:48kHz × 16bit × 2 = 1,536,000 bit/s ≈ 1.536 Mbps
例:48kHz × 24bit × 8 = 9,216,000 bit/s ≈ 9.216 Mbps

在Linux中,PCM设备通常表现为/dev/snd/pcmC0D0p(播放)和pcmC0D0c(录音)。ALSA的hw_params会协商格式、采样率、声道数和周期大小。若应用提交的PCM参数与硬件能力不匹配,就会出现-EINVAL或XRUN。理解PCM布局(交错interleaved或平面planar)对多声道车载系统尤其关键。

四、音频总线与接口:车内声音如何流动

车载音频不是一根线从主机到喇叭,而是多种总线协同。常见接口包括:

  • I2S/TDM:芯片间短距离数字音频,TDM可在一组时钟线上传多声道,常用于SoC到DSP、DSP到功放。
  • A2B:ADI主导的车载音频总线,用单对双绞线传多路音频、控制与电源,适合麦克风阵列、主动降噪和分区扬声器。
  • MOST:较早的车载多媒体骨干,带宽较高但成本与复杂度也高,逐步被以太网AVB替代。
  • CAN/LIN:不传音频,只传控制与状态,如音量、静音、功放使能。
  • USB/蓝牙:面向手机互联与免提,蓝牙音频需经过SBC/AAC/LDAC等编码,延迟与音质需权衡。

这些接口在Linux中对应不同的驱动与DAI(Digital Audio Interface)。ASoC框架把SoC侧DAI、Codec侧DAI和板级路由用machine驱动连接起来,形成完整的PCM链路。

车载音频信号链:声波 → 采样量化 → PCM → 总线 → 扬声器 声波 20Hz–20kHz 频率/振幅/相位 麦克风/拾音 模拟电压信号 MEMS / 模拟麦 ADC 采样量化 48kHz / 24bit 奈奎斯特 fs/2 PCM 数据 交错/平面 1.536–9.2Mbps SoC / CPU ALSA / ASoC pcmC0D0p DSP / 功放 EQ / 延时 / 分频 I2S / TDM A2B / MOST 麦克风阵列 分区扬声器 扬声器 DAC → 声波 车内声场 控制总线: CAN / LIN 传递音量、静音、功放使能、故障状态,不承载音频数据 关键约束: 采样率与总线时钟同步、PCM参数协商、XRUN与延迟控制

五、车载声学环境特点:为什么车内调音如此特殊

车内是一个狭小、强反射、非对称的封闭空间。主要特点包括:

  • 噪声底高且随车速变化:发动机、胎噪、风噪在不同车速下频谱不同,需要动态EQ与响度补偿。
  • 扬声器位置受限:高音单元常在A柱或仪表台,中低音在门板,听音位置偏离对称轴,必须用延时和增益修正声像。
  • 多座位差异大:主驾、副驾、后排听感不同,分区音频与独立音量成为高端车型卖点。
  • 混响时间短但驻波明显:低频在车厢内形成驻波,导致某些频率被强调或抵消。
  • 温度与器件漂移:扬声器阻抗随温度变化,功放保护与限幅策略必须考虑。
基础概念关键参数对车载Linux音频的影响
频率与振幅20Hz–20kHz、dB SPL决定EQ、响度补偿与限幅阈值
采样与量化48kHz、16/24bitALSA hw_params协商格式与周期
PCM编码交错/平面、数据率决定DMA缓冲布局与XRUN风险
音频总线I2S/TDM/A2B/MOST对应DAI驱动与machine路由
车内声学噪声、驻波、座位差异驱动DSP调音与分区策略

六、常见误区与工程复盘

误区一:认为“采样率越高音质一定越好”。实际上,若后端DAC、功放和扬声器带宽不足,96kHz只会增加数据率与功耗,听感未必提升。车载系统更应优先保证48kHz链路的时钟稳定与低抖动。
误区二:把PCM参数协商当成“应用随便设”。ALSA的hw_params必须落在硬件支持的区间内,否则会回退或报错。调试时可用aplay -D hw:0,0 --dump-hw-params查看设备能力,再决定period_size与buffer_size。

复盘一个典型场景:某车型蓝牙免提回声严重。排查发现,麦克风经A2B进入DSP,采样率48kHz,但蓝牙链路使用16kHz SBC,重采样引入额外延迟;同时ALSA播放缓冲设置过大,导致回声参考信号与麦克风信号时间不对齐。最终通过统一时钟域、缩小period、在DSP中启用AEC参考通道解决。这个案例说明:车载音频问题往往跨越物理声学、数字采样、PCM参数与总线拓扑多个层面,只有把基础概念串成一条链,才能在Linux音频栈中快速定位。

掌握本章内容后,再去看ALSA的PCM设备、ASoC的DAI与machine驱动,就不会把它们当成孤立的代码结构,而是看作“声波—采样—PCM—总线—扬声器”这条物理链路在软件中的映射。