SmartCross 工作日志 #0 – 项目概要

今天起在博客中新开一个“SmartCross 工作日志”分类,用来记录我在 Project SmartCross 项目工作中的思考、遇到的问题、调试过程和解决方法。SmartCross 是我已经断断续续折腾半年的项目,旨在创建一个开源的 Hi-Fi 数字音频分频器平台。我希望在 2022 年的上半年能够基本完成这个项目,达到“可售卖”的状态。

本文将大致介绍 SmartCross 项目的设计理念、架构、当前进展。

分频器

人耳能听到的频率范围是 20Hz-20kHz。要想忠实地还原整个听觉频率范围内的所有音频,靠单个扬声器单元是不够的,往往需要多个不同尺寸的喇叭(高音喇叭、中音喇叭、低音喇叭)组合起来,才能达到较好的效果。每个喇叭都有自己最佳的频率范围,在“最佳频率范围”内频率响应曲线较平坦、失真较小,而在范围外则失真较大、频率响应不平坦。因此,我们需要将完整的音频信号切分为多个频带,将不同频带送往不同的喇叭,这些喇叭组合在一起,达到完美的重放效果。进行“切分”操作的部件就被称作“分频器”。分频器有多种类型、实现方式,而 SmartCross 项目就希望实现一个智能、易于使用的数字分频器。为了说明 SmartCross 项目的存在意义,我们必须先了解各种分频方式的结构、优缺点。

功率分频

比较传统的方式,是采用无源器件实现分频器,称作“功率分频”(功分)、“无源分频”(Passive Crossover)、“被动分频”。在音频信号经过功率放大器放大后,使用电容、电感搭建滤波器,对较大幅度的功率信号进行滤波,实现频率的分配。功率分频器往往被直接安装在音箱内。

功率分频的系统结构

功率分频是目前使用最广泛的一种方式,也是“发烧友”最喜欢的一种方式。其具有以下特点:

  • 优点 1:只需要一个功放,在音箱上只需要两根接线柱(+和-),接线简单方便;功放和音箱相对独立,可以随意组合、更换、搭配;
  • 缺点 1:分频器的参数(分频点、斜率)由分频器元件参数决定,调整不便,想要做出调整,需重新焊接元器件;
  • 缺点 2:分频器在大功率状态下工作,失真较高,且分频效果受喇叭的阻抗曲线、谐振频率等影响;若想达到较低的失真,则使用的元件成本较高,比较“Hi-Fi”的电感或电容就高达数十元甚至几百元。

电子分频

与“功率分频”相对应的是“电子分频”(电分),又称“有源分频”(Active Crossover)、“被动分频”,是指在信号幅度较小时,使用有源电路(电容、电阻、运算放大器)进行滤波,实现频率的分配,分配后的信号单独进行功率放大,并送入对应的喇叭单元。

电子分频的系统结构

电子分频并没有功率分频应用得广泛,其主要被应用在有源音箱(即集成功放的音箱)中。电子分频具有如下特点:

  • 优点 1:分频器在小信号状态下工作,其无需处理功率信号,也不受喇叭本身阻抗变化的影响,处于比较理想的工作状态。这样,分频器可以具有较准确的频率、较低的失真。
  • 优点 2:由于分频器工作在有源模式下,其可以对信号的某些频段进行“扩大”,而不局限于功率分频的“衰减”,因此可以实现一些功率分频无法实现的信号处理,例如 Linkwitz Transform
  • 缺点 1:分频器的参数(分频点、斜率)仍然由分频器元件参数决定,调整不便,尽管可以使用像可变电阻这样的元件,但是调整范围依旧有限;
  • 缺点 2:如果要做 n 分频,则需要 n 台功放,成本较高;分频器与音箱绑定,必须搭配使用,每个型号音箱必须搭配其专用的电子分频器,更换不方便。

电子分频的优势,在一篇 90 年代的贴子中有所体现:

……一对售价为11000元的BOSE363组合音箱来与我设计的电子三分频有源音响系统进行试听对比。……在使用同一台CD机播放相曲子的情况下切换对比试听,……结果是大部分人分辩不出二者之间有差别,少数辨别出是电子三分频有源音响比BOSE 363无源音箱声音好。

数字分频

随着芯片技术的发展,对音频信号进行数字处理已不再困难。将电子分频技术与数字技术相结合,就出现了新的分频方式:数字分频。数字分频器直接从音源输入数字信号,使用软件算法进行处理,然后将处理后的信号以数字方式输出,再送入多路 DAC 转换为模拟信号,并送到功率放大器进行放大。

数字分频系统架构

数字分频架构具有如下特点:

  • 优点 1:分频器由软件算法实现而非由模拟元器件实现,不受任何模拟元器件的非理想因素干扰,分频结果准确;
  • 优点 2:分频曲线非常容易调整,只需要在电脑中输入参数即可;
  • 优点 3:DSP 技术可以进行一些模拟电路无法实现的信号处理操作,如 FIR 滤波器(可以用来做房间校正或线性分频);
  • 缺点 1:系统组成部件多,成本高,连线麻烦;
  • 缺点 2:对于某些模拟音源,需要经过额外的 AD 转换,损失音质。不过现在的模拟音源非常少,此问题基本可以忽略不计。

数字分频器的特点使其成为比电子分频器更为理想的选择。使用数字分频器,我们可以用较低的成本构建出一套音箱系统(比较典型的例子是 LXmini)。

现有的数字分频器产品

数字分频器具有诸多优点,但是它也有许多“痛点”,这些痛点使得为它的普及带来了一定的障碍。我将市面上现有的数字分频器产品进行列举,看看这些产品各有什么特点。

BEHRINGER DCX2496(售价约 2350 元)

产品手册。该产品是百灵达公司出品的一款数字分频器。该产品原本主要面向专业音响、舞台音响领域,在 2007 年左右,该产品被一些尝试数字分频技术的音响爱好者发现,并在这个群体中推广。该产品具有 2 声道数字、模拟输入和 6 声道模拟输出(内置 DAC),内部采样率为 24bit / 96kHz。其内部的数字处理使用了 Analog Devices 的 SHARC 系列 DSP 芯片(具体型号不详)。

该产品是数字分频领域比较早的产品,其主要的缺点有:操作繁杂,需在面板上用较小的 LCD 显示屏进行设置;未提供数字输出能力,只能使用模拟方式输出,内置 DAC 的音频输出效果较差;输入方式较单一,只能接受 XLR 接口输入;数字处理能力较差,不支持 FIR 算法。

MiniDSP 2x4HD(售价约 1690 元)

产品手册产品介绍页面。MiniDSP 是近年出现的 DSP 公司,MiniDSP 2x4HD 是其较早期的产品。该产品提供了 2 通道输入、4 通道输出的 DSP 能力,其中输入可接受数字光纤、USB、模拟输入,输出提供 RCA 模拟输出(内置 DAC)。其内部数字处理也使用了 SHARC 系列芯片,具体型号为 ADSP21489。

该产品在数字分频玩家中使用较广泛,像 LXmini 项目就官方推荐了此产品。此产品的优点是可以在 PC GUI 界面上配置分频参数,使用较为方便;输入方式较多。其缺点是输出通道较少,只有 4 通道,无法用于 3 分频或 4 分频系统;不支持了蓝牙或 AirPlay 输入,需要外接树莓派等音源;模拟输出质量较差,无法让发烧友满意。

除了 2x4HD 外,MiniDSP 也推出了 4x10HD(约 3500 元)、10x10HD(约 4000 元),解决了通道过少的问题。

MiniDSP SHD(售价约 8260 元)

产品手册产品介绍页面。SHD 是 MiniDSP 公司较新的产品,其在 MiniDSP 2x4HD 的基础上增加了一个“4 核心 ARM 处理器”(具体型号未知),并升级了模拟部分的 AD/DA 芯片,提供了数字输出能力。增加处理器后,该产品可以运行 Roon、Volumio 等为音频串流而设计的 Linux 发行版,将“音源”部分集中到产品内。不过,其依旧未提供蓝牙输入的选项。在 DSP 部分,该产品也增加了 Dirac Live 房间校正系统,可以大幅度提升音频质量。Dirac Live 系统是专有的系统,需要收取不菲的授权费,不过网上有很多爱好者说可以自己用 FIR 滤波器达到类似 Dirac Live 的效果,不需要任何额外的费用。

除了 SHD 外,MiniDSP 还发布了 SHD Power(售价约 9850 元)。该产品相比 SHD 最大的特点是其内置了 2 声道功放功能,可以直接连接喇叭。

其他产品

dspNexus:售价约 19000 元,集成 DSP、蓝牙、以太网、8 通道模拟输出,基本上没有什么缺点(除了贵)。其内部结构基本上是一个树莓派 + DSP 芯片。

MiniSharc Controller:售价约 8000 元,功能与 dspNexus 差不多,但看其拆解图,内部做工较差,很多地方用杜邦线连接。这两款产品都没有评测视频,不知道软件做得怎么样。

在 AudioScienceReview 上的这篇帖子集合了一些人们自己 DIY 数字分频器或使用现有产品改造数字分频器的经验,可以看到人们对这个领域的兴趣还是比较大的。对比以上的产品及一些其他产品,可以总结出目前市场上产品的不足之处:

  • “音源”的集成度不够高。多数产品的输入方式较少,使用起来会更加麻烦。
  • “输出”的灵活度不高。很多产品都只有固定的输出结构(模拟输出),并且只有 SHD Power 一款产品搭配了功放,而且也只搭配了双声道功放,要实现多路系统则需外接功放。
  • 不够开放。软件全部闭源,没有二次开发的可能性。
  • 操作不够方便。只能在电脑上配置参数,无法在手机上配置。

SmartCross 系统结构

SmartCross 项目将提供“音源”、“DSP”、“输出”这三部分功能。下面将逐步介绍每个功能的结构。

项目逻辑结构

核心

SmartCross 产品的核心是一颗 Rockchip RK3308 处理器,该处理器具有 1.2GHz 四核 Cortex-A35 64 位内核,将承担整个设备的所有处理工作。选用这个处理器,有多方面的原因:

  • 首先,这个处理器具有较好的主线内核支持,SmartCross 项目所需的大部分外设都能在主线内核上直接工作,而少部分外设经过适配后也可以很好地工作。使用主线内核(而非厂商提供的内核)能够使设备使用到最新的 Linux 特性,也容易获得较好的社区支持。
  • 其次,SmartCross 项目需要用到的所有外设在 RK3308 上都有,包括比较关键的 8 通道 I²S 音频接口和 S/PDIF 接收器(这两个外设在树莓派上都没有,否则我肯定会选择 RPi CM4)。
  • 最后,该处理器的核心板能够直接在淘宝上买到,不需要签署任何神奇 NDA 协议,也不需要提供公司名称。

目前符合上述要求的芯片还有 Amlogic 的 S905 系列,其性能比 RK3308 更好,不过价格稍高。后续将考虑是否升级芯片方案。

音源

现代生活中,人们不仅仅从 CD 机或电脑播放音频,还经常需要从手机、互联网流媒体播放音乐。SmartCross 项目的目标是兼容所有这些音源,并能够在多个音源中自动选择或手动切换。具体来说,需要兼容的音源有以下几种(括号中给出了这些音源的通常使用场景):

  • AirPlay(iOS 设备)
  • 蓝牙(手机)
  • Spotify Connect 等互联网流媒体音源
  • USB Audio Class(电脑或手机)
  • S/PDIF 光纤(CD 机、电视机、机顶盒及电脑)
  • 模拟输入(黑胶播放器、收音机)
音源结构(虚线为软件)

SmartCross 项目充分利用了 RK3308 SoC 的特性。RK3308 的 USB 主机控制器上会连接一个 USB WiFi+蓝牙网卡,搭配上 Linux 的网卡驱动,使其具有完整的无线连接能力。同时,其 USB Device 控制器和 S/PDIF 接收器外设也被利用起来。

  • 对于 AirPlay,在 Linux 上运行 shairport-sync,即可使 iOS 设备能够向主机播放音频。
  • 对于蓝牙设备,使用 bluez-alsa,即可实现蓝牙音频 A2DP 接收,并具有包含 SBC、AAC、aptX HD 在内的多种解码器支持。aptX 的解码器最早是我集成进 bluez-alsa 的(Pull Request #253),后来经过一些人的改进,最终被合并进入 bluez-alsa 项目。
  • 对于互联网音源,只需在设备上运行 Spotify Connect 等程序即可。
  • 对于 USB 音频,将 RK3308 中的 dwc2 USB 控制器配置为 device 模式,然后使用 Linux 的 USB Gadget 协议栈中的 f_uac1f_uac2 即可实现。我参与了这两个 USB Function 的改进,并向内核贡献了代码。
  • 对于 S/PDIF 输入,RK3308 内置了 S/PDIF 接收器 IP 核(spdifrx)。我为主线内核适配了 spdifrx 的驱动代码,目前工作正常。希望将来这个驱动可以被合并进主线。
  • 对于模拟输入,SmartCross 项目将提供一个高指标的 S/PDIF ADC,将模拟信号转换为 S/PDIF 数字信号,然后通过光纤送入 CPU。

整个音源部分高度依赖 Linux 的 ALSA 音频框架,此框架将不同输入抽象为统一的接口,极大加快了开发调试的进度。

DSP

DSP 是本项目的核心,将信号进行分频、处理。其他同类产品大多采用 Analog Devices 的 SHARC 系列芯片,但本项目采取相反的思路,直接使用 CPU 的算力进行 DSP 处理。能够采用这个设计,主要归功于 CamillaDSP,一个使用 Rust 编写的开源 DSP 项目。CamillaDSP 高效实现了音频处理常用的算法,并具有良好的 ALSA 支持。在 RK3308 上使用 CamillaDSP 进行音频处理,应该能达到高于 ADSP21489 芯片的性能。

DSP 处理流程

使用通用 CPU 而非专用 DSP 芯片,并使用 Linux 操作系统,可以降低学习成本。未来如果希望获得更高的性能,只需升级处理器即可,无需重写任何算法代码。毅力号火星车上带有的无人机也使用了 Linux 操作系统和通用的骁龙 801 芯片,SmartCross 与之思路相同。

输出

输出通道较少、输出不灵活、没有功放功能,是市面上一些 DSP 产品的弱点。为了解决这个弱点,SmartCross 在输出设计上下了较大的功夫。

RK3308 芯片内置了 8 通道 I²S 音频接口 IP 核,可以连接 4 路 DAC 模块。同时,这个 IP 核能够接受芯片外部的主时钟输入(而非用芯片内部 PLL 产生的时钟),达到较低的抖动性能。这两个特性相配合,使 RK3308 可以符合本项目的要求,输出多路高质量的数字音频信号。

我希望做到灵活的输出搭配,以适应不同人群的需求。为此,我设计了多种输出模块,每种输出模块与 CPU 侧相连的接口相同,且模块 PCB 尺寸也相同,可以自由组合搭配。

输出结构(虚线为软件)

SmartCross 项目一共计划设计 3 种输出模块,目前主要的两种模块已经设计好、测试通过。

第一种输出模块是 MA12070P 功放模块。MA12070P 是英飞凌公司推出的一款 I²S 数字输入的 D 类功放芯片,直接在芯片内将信号解码、放大,然后连接喇叭。该芯片能够提供约 2×50W 的低失真输出,在高功率输出下也能做到 0.007% 的 THD+N。该模块适用于不想外接功放的玩家,例如对于书架音箱而言,外接多个功放显然是不合适的,使用这个模块就可以免除外接功放的麻烦。目前这个模块已经完全设计制作通过。

第二种输出模块是 PCM1792A DAC 模块。PCM1792A 是 TI 公司生产的一款高保真音频 DAC 芯片,被许多“发烧级”DAC 使用,广受爱好者欢迎。该模块同时搭载了 OPA1612A 运放组成的 IV+LPF 电路,保证了高质量的音频输出。输出采用 RCA 单端接口,或可选 XLR 平衡接口。对于希望自己外接更高功率功放的玩家,这个模块可以满足需求。目前这个模块也已经完全设计制作通过。

第三种输出模块是 S/PDIF 发送模块。该模块将 I²S 音频转换为 S/PDIF 信号并传出,可以连接到其他商业 DAC。对于不满足自带 DAC 音质的玩家,该模块可以让他们取得更高的音质。

三种模块可以混合搭配使用。例如,如果认为低音功率不够,希望增加独立的放大器,则可以为高音、中音选用 MA12070P,而为低音选用 PCM1792A 模块,用较低成本实现较好效果,如下图所示。

硬件

目前硬件的开发工作已基本完成,关键部件的 PCB 版都已设计完成,并打样测试成功。后续将进行外壳的设计制作。

更多内容待补充……

软件

整个 SmartCross 的软件都运行在 RK3308 中的 Linux 环境上。Rootfs 未采用 Linux 发行版,而是直接由 Buildroot 生成,每次更新均需重写整个文件系统,避免系统由于更新不一致带来分裂。

实现 SmartCross 功能的主要软件部件如下:

SmartCross 主要软件

我希望所有在 SmartCross 设备上运行的代码均以开源方式发布,给用户较多的自由魔改空间。不过,Web 前端将以闭源形式发布,这样潜在的抄袭者无法获得本产品的全部功能。

CC BY-SA 4.0 本作品使用基于以下许可授权:Creative Commons Attribution-ShareAlike 4.0 International License.