图解智能座舱音频架构-电子硬件部分

图解智能座舱音频架构-电子硬件部分

        又到一年一度的广州车展,今年的车型似乎少了几分新意,多了几分相似。中国汽车行业仿佛正从曾经的创业时代,悄然步入守业阶段。不过是又一个行业的潮起潮落、沧海桑田罢了。只是作为亲历其中的一员,心头不免比旁人多生出一番感慨。

        本文将以高通SA8295平台为例,介绍2021至2025年间国内主流的智能座舱音频架构。尽管技术迭代迅速,但这些架构在未来几年内仍具备一定的参考价值。网络上同类资料已有很多,本文主要基于笔者亲身参与的实际项目,结合个人实践,记录一些技术思考与行业观察。

        在阐述中,我们将对关键术语进行解读,并围绕清晰的架构图展开讲解。因此,即便您是音频领域但非汽车行业的专家,也能轻松跟上本文的思路。

----------------------------------------话不多说,直接上图----------------------------------------

1.车机 within 内置功放

        所谓内置功放,是指将功放芯片(Amplifier,简称 AMP)与主控 SoC 芯片集成在同一块 PCB 板上,从而使车机能够直接驱动外接扬声器。

        这种方案的优势在于成本相对较低,但其缺点也十分突出:若车辆配备较多扬声器(例如二十个以上),则难以在车机内部集成足够数量的功放芯片。此外,音响系统本身功耗较大,因此对车机的散热设计与电源管理提出了更高要求。正因如此,内置功放方案通常多见于扬声器数量较少的低配置车型中

        该图示方案采用两块AMP芯片组构建了一套5.0音响系统。这里的5.0系统,本质上是标准的5.1声道系统去掉了低音炮部分——由于低音炮功耗较高,内置功放方案通常难以驱动。

        5.1声道系统包含左前、右前、中置、左环绕、右环绕及一个专属的低音炮。自2000年以来,它始终是最主流的家庭多声道音频格式。如今,我们在网络上下载的美剧,若配备多声道音轨,也仍以杜比5.1和DTS 5.1为主流。

        5.1声道标准的演进与普及,既源于用户对沉浸式环绕声效的不懈追求,也离不开杜比与DTS这两大巨头长期的竞争与合作。

        在我看来,5.1是实现环绕声效的最简且高效的配置方案。与传统立体声相比,它的优势在于:增加一个独立中置声道,能极大提升电影对白的清晰度与定位感;增设一对后环绕声道,则能创造出声音从身后而来的包围感,沉浸感倍增。

        至于低音炮,它专门负责重现20Hz至120Hz的极低频声音,使爆炸、雷鸣、鼓点等音效更具冲击力。由于普通扬声器难以有效下潜至120Hz以下,加之人类听觉对低频的方位感不敏感,因此行业普遍做法是:将前方三声道与环绕声道中120Hz以下的低频信号统一混合,交由独立的低音炮来集中播放,从而确保整体声音的力度与震撼感。

网图侵删

        图示方案中大量应用了I2S和TDM协议,不熟悉的读者可参考我之前的文章。

嵌入式音频开发入门:I2S和TDM数字音频接口实践

        关于车机的对外连线图例:使用实线代表模拟信号传输,例如功放直接输出模拟电信号以驱动扬声器;使用虚线则代表数字信号传输

        以收音功能为例:传统的 Tuner(用于接收AM/FM广播)处理的是模拟信号。当信号较弱时,我们会听到“沙沙”的噪音,这正是因为Tuner芯片在对模拟信号进行解调,干扰和失真会直接表现为音质劣化。

        而 DAB 则主要在欧洲普及,它从信源开始就是数字音频,在空气中传输的是经过调制的数字信号。这种方式的抗干扰能力强,只要信号强度达到解码门限,就能还原出无损的数字音频,因此不会出现模拟信号那样的音质破坏问题。

        高通SA8295芯片集成了多个ARM核心与三类专用的Hexagon DSP核心。其中,ARM核心主要承载QNX+Android Hypervisor操作系统,而Hexagon DSP则专注于运行各类数字信号处理算法。

        图示大小并不代表他们之间的算力差距,主要是方便我画图连线。

2.车机 connect to 外置功放

什么是外置功放

        所谓外置功放,是指车机本身不直接驱动扬声器,而是将音频信号交由一个独立的外部设备进行处理和功率放大。

        该外置功放模块通常集成A2B芯片用于高速音频数据传输,MCU负责处理CAN通信指令,并搭载专用的DSP以实现复杂的音频算法处理。由于采用独立设计,外置功放可以更充分地考虑散热与功率输出需求,从而提升系统稳定性。此外,该方案通常用于中高端车型,有助于在配置较高的系统中合理分摊成本。

        在工作流程上,车机通过车载音频总线(A2B Automotive Audio Bus) 将多通道PCM数字音频信号发送至外置功放;功放内的DSP则对音频信号进行音效处理后,最终驱动对应的扬声器出声。

        与车载主机内置功放有限的驱动能力不同,外置功放则多为7.1.4的音响系统。7.1.4指的是(前左、中置、前右、左环绕、右环绕、左后环绕、右后环绕)、一个低音炮声道,以及四个提升空间感的关键声道(左前天空、右前天空、左后天空、右后天空)。

        7.1.4声道已成为音响领域顶级沉浸式音频体验的代名词,这很大程度上得益于杜比全景声技术的普及。然而,杜比全景声的价值远不止于增加声道数量,它核心的“声音对象”理念彻底改变了音频的制作与回放方式。有兴趣深入了解的读者,可以参阅《Dolby Atmos杜比全景声混音指南》等专业资料。

        可以明确的是,追求超过7.1.4的更多声道意义不大。因为目前提供的杜比全景声内容,主要是基于7.1.4的声道布局进行优化的。即便硬件支持更多声道,也几乎没有相应的原生内容可供体验,实际提升极为有限

        除核心声道外,外置功放的驱动能力更扩展至每个座位的头枕扬声器乃至车外扬声器。当前主流外置功放所连接的扬声器总数动辄达到三四十个,其强大的输出与集成能力令人印象深刻。

        外置功放也是品牌音响厂商如哈曼卡顿、Bose 等的重要竞技场。这些厂商通常会在其外置功放的 DSP 中集成独有的音效处理算法,至于实际听感,则因人而异,各有所好。

车机和外置功放之间的音频传输

车机与外置功放通过A2B总线双向传输多通道PCM数据,上下行分工明确:

  • 上行(至车机)
    • 内容:外置功放各扬声器(如左前、右前、左后、右后、中置等)正在播放的音频信号。
    • 目的:主要为车机执行回声消除算法提供参考信号。
  • 下行(至功放)
    • 内容:通道数通常多达20路以上。例如,媒体音(7.1.4共12个通道),导航音(1通道),电话音(1通道),语音助手(1通道),仪表音(前后左右4通道)等。
    • 说明:此部分涉及具体功能设计,出于保密原因,不再展开。

实际场景介绍

最后,我们通过几个具体场景来结束对外置功放的介绍:

  1. 播放杜比全景声时的语音唤醒
    当车主通过网易云音乐播放杜比全景声内容,并通过语音助手唤醒车机时,系统会作出如下响应:
    • A2B 下行链路的前 12 个通道传输媒体音频,而上行各通道则传递外置功放的回传参考信号。
    • 车机语音助手持续运行回声消除算法,凭借准确的参考信号,即便在音乐音量较大的情况下,也能精准识别车主的人声唤醒指令。
    • 唤醒后,语音助手通过 A2B 下行链路中专门负责语音交互的通道播放“你好”回应。
  2. 蓝牙通话与头枕模式切换
    当车主通过蓝牙连接车机进行通话,并在涉及隐私内容时切换到头枕模式:
    • 通话过程中,A2B 下行的电话音频通道传输对方语音,由左前和右前扬声器播放。
    • 一旦车主切换到头枕模式,CAN 信号将发送至外置功放,指示其将通话音频切换至主驾驶头枕扬声器输出。
    • 值得注意的是,头枕模式下,A2B 下行的电话音频通道并未改变,仍使用原有通道。
  3. 露营时的外放模式
    车主在露营时希望将音乐播放至车外,开启外放模式后:
    • 外放模式的 CAN 信号发送至外置功放,功放将媒体音频路由至车外扬声器进行播放。

3.车机 connect to Booster外置功放

        Booster外置功放可视为普通外置功放的一种降本方案。其设计思路是:既然外置功放的核心功能是功率放大,那么可以移除其中所有的逻辑处理单元(如MCU和DSP),仅保留最基础的A2B收发器与功率放大器(AMP)电路,由此构成的简化版功放即为Booster。

        那么,Booster功放上AMP芯片的寄存器由谁来配置呢?这归功于A2B协议的另一项能力:它不仅能传输多通道PCM音频数据,还可通过隧道传输技术同时传递I2C控制信号。因此,只要车机与Booster之间建立了A2B连接,车机端就能直接远程配置Booster上AMP芯片的寄存器。

        正因其架构极度简化,Booster功放内部不含任何软件或复杂逻辑器件,成为一个完全由车机控制的“纯硬件”从设备。这种设计使得硬件部门无需软件团队支持,也能独立完成Booster的电路设计。

        当然,Booster在实际应用上与标准外置功放存在显著差异。由于其简化设计,车机与Booster之间通过A2B传输的多通道PCM数据,其各通道会直接对应到Booster所连接的各个扬声器。

        例如,若A2B链路的前12个通道被分配给车内扬声器,而第13个通道预留给车外扬声器。那么,当需要开启车外播放时,车机端的DSP只需将音频信号路由至第13个通道即可,所有相关的音频路由逻辑都将在车机端完成。

4.A2B很强大

        A2B总线实现了音频、数据与供电的三位一体:它能传输多通道PCM音频和I2C控制指令,并可提供远程微小电力。

        我曾实施的这套最复杂A2B方案(如下图)即是典型例证。系统中的A2B麦克风直接从总线取电,无需任何额外供电线路。

另外,A2B造成的音频延时只在几十us的级别,也是非常牛逼了。

A2B的开发主要使用ADI的图形化界面:

ADI Sigma Studio

感兴趣的小伙伴可以下载玩一下

以上就是全部内容了,如果大家感兴趣的话,我将另开一篇《图解智能座舱音频架构-软件架构》。

Read more

C++ 多态详解:从概念本质、语法规则到底层实现,结合实战代码的全方位指南

C++ 多态详解:从概念本质、语法规则到底层实现,结合实战代码的全方位指南

🔥草莓熊Lotso:个人主页 ❄️个人专栏: 《C++知识分享》《Linux 入门到实践:零基础也能懂》 ✨生活是默默的坚持,毅力是永久的享受! 🎬 博主简介: 文章目录 * 前言: * 一. 多态的概念:从“多种形态说起” * 1.1 多态的概念解析 * 1.2 生活中的多态示例 * 二. 多态的构成条件和核心语法 * 2.1 条件 1:虚函数的定义 * 2.2 条件 2:虚函数的重写(覆盖) * 2.3 多态场景的一个笔试选择题(重要): * 三、虚函数重写的特殊情况 * 3.1 协变(了解) * 3.2 析构函数的重写(重点)

By Ne0inhk
Java毕设项目推荐-基于SpringBoot的小区水资源管理系统基于springboot的小区水务系统设计与实现【附源码+文档,调试定制服务】

Java毕设项目推荐-基于SpringBoot的小区水资源管理系统基于springboot的小区水务系统设计与实现【附源码+文档,调试定制服务】

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围::小程序、SpringBoot、SSM、JSP、Vue、PHP、Java、python、爬虫、数据可视化、大数据、物联网、机器学习等设计与开发。 主要内容:免费开题报告、任务书、全bao定制+中期检查PPT、代码编写、🚢文编写和辅导、🚢文降重、长期答辩答疑辅导、一对一专业代码讲解辅导答辩、模拟答辩演练、和理解代码逻辑思路。 特色服务内容:答辩必过班 (全程一对一技术交流,帮助大家顺利完成答辩,小白必选) 全网粉丝50W+,累计帮助2000+完成优秀毕设 🍅文末获取源码🍅 感兴趣的可以先收藏起来,还有大家在毕设选题,

By Ne0inhk
C++ 智能指针完全指南:原理、用法与避坑实战(从 RAII 到循环引用)

C++ 智能指针完全指南:原理、用法与避坑实战(从 RAII 到循环引用)

🔥草莓熊Lotso:个人主页 ❄️个人专栏: 《C++知识分享》《Linux 入门到实践:零基础也能懂》 ✨生活是默默的坚持,毅力是永久的享受! 🎬 博主简介: 文章目录 * 前言: * 一. 智能指针的核心:RAII 设计思想 * 1.1 为什么需要智能指针? * 1.2 RAII:智能指针的设计灵魂 * 二. C++ 标准库智能指针:用法与场景 * 2.1 unique_ptr:独占式智能指针(推荐优先使用) * 2.2 shared_ptr:共享式智能指针(支持拷贝,重点了解) * 2.3 weak_ptr:弱引用智能指针(解决循环引用) * 2.3.1

By Ne0inhk
【C++笔记】模板初阶

【C++笔记】模板初阶

前言:         C++模板是C++中实现泛型编程的核心工具,允许程序员编写与类型无关的代码,从而提高代码的复用性和灵活性。模板在编译时进行实例化,根据实际使用的类型生成具体的代码,因此不会带来运行时开销。          一、模板基础          1.1 为什么需要模板?          在编写函数或类时,如果希望它们能处理多种数据类型(如int、double、string),传统方法是使用函数重载,但这样会产生大量重复代码或失去类型信息。 模板允许将类型作为参数,编译器根据调用时传入的具体类型生成对应的代码。          场景:需要编写一个求两个数最大值的函数,支持 int、double 和 string(按字典序)。          ①传统方法:函数重载 #include <iostream> #include <string> using namespace std; // 为 int 重载 int max(int

By Ne0inhk