DSPi:一款为树莓派 Pico(RP2040)和 Pico 2(RP2350)量身打造的全功能音频 DSP 固件

Lobsters Hottest 工具

摘要

DSPi 是一款开源固件,可将树莓派 Pico 变身为全功能数字音频处理器,支持房间校正、参数均衡器、矩阵混音等功能。

<p><a href="https://lobste.rs/s/bmlpaq/dspi_fully_featured_audio_dsp_firmware">评论</a></p>
查看原文
查看缓存全文

缓存时间: 2026/06/26 08:06

WeebLabs/DSPi 源代码:https://github.com/WeebLabs/DSPi

DSPi 固件

DSPi 将 Raspberry Pi Pico 或其他基于 RP2040 的电路板转变为一款功能强大且价格低廉的小型数字音频处理器。它作为一个带有板载 DSP 引擎的 USB 声卡,使您能够使用房间校正、有源分频、参数均衡、时间对齐、响度补偿和耳机交叉馈送等基本工具。我希望 RP2040 和 RP2350 能够赢得“不到一杯咖啡价格的多功能音频瑞士军刀”的美誉。欢迎加入官方 Discord 服务器 (https://discord.gg/RCyqxAQ5xS) 获取开发更新、讨论或寻求帮助!


目录


核心能力

  • USB 音频接口: 在 macOS、Windows、Linux 和 iOS 下即插即用。支持 16 位和 24 位 PCM 输入,采样率为 44.1、48 和 96 kHz。
  • 24 位 S/PDIF 或 I2S 输出: 最多四个独立立体声输出插槽(RP2350 上 8 个通道,RP2040 上 4 个通道)。每个插槽可在运行时在 S/PDIF 和 I2S 之间切换,从而直接连接任何标准 DAC。I2S 插槽共享共用 BCK/LRCLK,并可选择生成 128×/256× 主时钟。
  • 每通道前置放大器: 对每个 USB 输入通道(左/右)进行独立增益控制,作为 DSP 流水线的 PASS 1 在任何其他处理之前应用。
  • 矩阵混音器: 将任一或两个 USB 输入通道路由到任何输出,每个交叉点具有独立增益和相位反转。RP2350 上为 2x9,RP2040 上为 2x5。
  • 参数均衡: 每通道最多 10 个 PEQ 频段,6 种滤波器类型。RP2350 上总计 110 个滤波器频段,RP2040 上为 70 个。RP2350 采用混合 SVF/双二阶架构,在低频精度上更出色。
  • 音量均衡器: 基于 RMS、立体声联动、软膝向上压缩器,将较为安静的内容提升至目标电平,同时绝不放大响亮段落。可选 10 毫秒前瞻,可配置速度和最大增益上限,并带有 -6 dBFS 增益降低安全限制器。
  • 响度补偿: 基于 ISO 226:2003 等响曲线标准的音量相关 EQ。在低收听音量下自动增强低音和高音,以维持感知到的音调平衡。
  • 耳机交叉馈送: 基于 BS2B 的交叉馈送,带有耳间时间延迟 (ITD),可降低耳机收听时不自然的立体声分离度。三种经典预设加上完全自定义参数。
  • 主音量: 设备端输出上限(-128 至 0 dB,带有真正的静音哨兵),在信号链末端应用,独立于 USB 主机音量和 DSP 处理。两种持久化模式:独立于预设存储(默认——重启后保留,切换预设不受影响)或作为每个预设的一部分保存/恢复。
  • 每输出增益与静音: 每个输出通道的独立增益和静音控制。
  • 时间对齐: 每输出延迟(高达 85ms),用于扬声器/低音炮对齐,并在 S/PDIF/I2S 与 PDM 输出路径之间自动进行延迟补偿。
  • 低音炮输出: 专用单声道 PDM 输出通道,采用高性能二阶 Delta-Sigma 调制器,无需第二个 DAC 即可实现直接低音炮输出。
  • 双核 DSP: 在两种平台上,EQ 处理都分配到两个核心,以便在激活多个输出时实现最大吞吐量。
  • 可配置输出引脚: 所有输出 GPIO 引脚(包括 I2S BCK/MCK)可在运行时重新分配以适应自定义 PCB 布局,无需重新刷写固件。
  • 10 插槽预设系统: 保存、加载和管理多达 10 个完整的 DSP 配置,并带有用户定义名称。包括每通道命名、可配置启动插槽,以及用于快速状态同步的批量参数传输。
  • 诊断: 每通道峰值/削波表计、USB PHY 错误计数器(CRC、位填充、超时、溢出、序列)、缓冲区填充统计、每个输出插槽的 S/PDIF DMA 饥饿计数器以及每核 CPU 负载报告。
  • 通过 USB 更新固件: 一条供应商命令将设备重启至 UF2 引导加载程序,允许主机应用程序推送新固件,而无需物理按下 BOOTSEL。

平台支持

特性RP2040 (Pico)RP2350 (Pico 2)
系统时钟307.2 MHz (超频)307.2 MHz
核心电压1.15 V1.15 V
采样率44.1 / 48 / 96 kHz44.1 / 48 / 96 kHz
音频处理Q28 定点单精度浮点
EQ 频段每通道 10 (总计 70)每通道 10 (总计 110)
总通道数7 (2 主通道 + 4 S/PDIF·I2S + 1 PDM)11 (2 主通道 + 8 S/PDIF·I2S + 1 PDM)
输出插槽2 个立体声 (每个 S/PDIF 或 I2S)4 个立体声 (每个 S/PDIF 或 I2S)
输出位深24 位24 位
PDM 输出1 (低音炮)1 (低音炮)
最大延迟每输出 85ms每输出 85ms
数学引擎手工优化 ARM 汇编硬件 FPU (混合 SVF/双二阶 EQ)
双核 EQ是 (核心 1 处理输出 3-4)是 (核心 1 处理输出 3-8)
用户预设10 个插槽10 个插槽
状态生产就绪生产就绪

两种平台均已全面测试并准备就绪。RP2040 通过轻微提高电压达到 307.2 MHz;RP2350 在相同电压下达到相同频率。时钟是固定的(无速率相关切换),并且 PIO 分频器在每个支持的采样率下均为整数。RP2350 凭借其硬件浮点单元提供了显著更多的处理余量,从而支持更多输出通道和混合 SVF/双二阶滤波器架构,提高了低频精度。


音频信号链

DSPi 以线性、低延迟的流水线方式处理音频:

RP2350 (11 通道, 9 输出):

USB 输入 (16/24-bit PCM 立体声, 44.1 / 48 / 96 kHz)
|
PASS 1: 每通道前置放大器 (独立 L/R 增益) + USB 音量
|
PASS 2: 主 EQ (每通道 10 频段, 左/右)
|
PASS 2.5: 音量均衡器 (RMS 向上压缩, 可选)
|
PASS 3: 耳机交叉馈送 (BS2B + ITD, 可选) + 主峰值表计
|
响度补偿 (音量相关 EQ, 可选)
|
PASS 4: 矩阵混音器 (2 输入 x 9 输出, 每交叉点增益 & 相位)
|
PASS 5: 每输出 EQ -> 增益/静音 -> 延迟 -> 输出增益 × 主音量
|
+-- Out 1-2 --> S/PDIF 或 I2S 插槽 0 (数据: 默认 GPIO 6)
+-- Out 3-4 --> S/PDIF 或 I2S 插槽 1 (数据: 默认 GPIO 7)
+-- Out 5-6 --> S/PDIF 或 I2S 插槽 2 (数据: 默认 GPIO 8)
+-- Out 7-8 --> S/PDIF 或 I2S 插槽 3 (数据: 默认 GPIO 9)
+-- Out 9 --> PDM 低音炮 (数据: 默认 GPIO 10)

(I2S BCK/LRCLK 共用,默认 GPIO 14/15;可选 MCK,默认 GPIO 13)

RP2040 (7 通道, 5 输出):

USB 输入 (16/24-bit PCM 立体声, 44.1 / 48 / 96 kHz)
|
PASS 1: 每通道前置放大器 + USB 音量
|
PASS 2: 主 EQ (每通道 10 频段, 左/右)
|
PASS 2.5: 音量均衡器 (RMS 向上压缩, 可选)
|
PASS 3: 耳机交叉馈送 (BS2B + ITD, 可选) + 主峰值表计
|
响度补偿 (音量相关 EQ, 可选)
|
PASS 4: 矩阵混音器 (2 输入 x 5 输出, 每交叉点增益 & 相位)
|
PASS 5: 每输出 EQ -> 增益/静音 -> 延迟 -> 输出增益 × 主音量
|
+-- Out 1-2 --> S/PDIF 或 I2S 插槽 0 (数据: 默认 GPIO 6)
+-- Out 3-4 --> S/PDIF 或 I2S 插槽 1 (数据: 默认 GPIO 7)
+-- Out 5 --> PDM 低音炮 (数据: 默认 GPIO 10)

(I2S BCK/LRCLK 共用,默认 GPIO 14/15;可选 MCK,默认 GPIO 13)

信号链细节

  1. 输入 (USB): 16 位或 24 位 PCM 立体声音频,采样率为 44.1、48 或 96 kHz。通过 USB 备用设置选择位深;通过 USB Audio Class 速率设置请求选择采样率。
  2. 每通道前置放大器 (PASS 1): 对 USB 左和右输入通道提供以 dB 为单位的独立增益控制。在 DSP 链的最开始应用,因此其设置会影响所有下游处理。
  3. 主 EQ (PASS 2): 每通道(左/右)最多 10 个参数 EQ 频段。支持峰值、低架、高架、低通和高通滤波器类型。
  4. 音量均衡器 (PASS 2.5): 可选的前馈、立体声联动、单频段 RMS 压缩器,采用软膝向上压缩——安静内容被提升至目标电平,而高于阈值的内容则原样通过。可配置速度、最大增益上限和噪声门。可选 10 毫秒前瞻。一个 -6 dBFS 增益降低安全限制器防止输出过冲。
  5. 耳机交叉馈送 (PASS 3): 可选的 BS2B 交叉馈送,将每个通道经过滤波和延迟的部分混合到相反通道。使用互补滤波器设计,通过全通滤波器引入耳间时间延迟 (ITD)。三种预设(默认、Chu Moy、Jan Meier)加上自定义频率和馈送电平。ITD 可独立切换。主峰值表计在此阶段进行采样。
  6. 响度补偿: 可选的 ISO 226:2003 等响度 EQ,根据当前音量级别自适应调整。在低音量下,低音和高音被增强以补偿人耳灵敏度降低。可配置参考 SPL 和强度。由 USB 主机音量位置驱动,因此无论下游的主音量衰减如何,它都保持正确。
  7. 矩阵混音器 (PASS 4): 将两个 USB 输入通道(左/右)路由到所有输出通道。每个交叉点具有独立的启用、增益(-inf 至 +12 dB)和相位反转。输出可以单独启用/禁用以节省 CPU。RP2350 具有 2x9 矩阵(9 个输出),RP2040 具有 2x5 矩阵(5 个输出)。
  8. 输出 EQ (PASS 5): 两种平台上每个输出通道独立的 10 频段 EQ。非常适合分频滤波器和对每个驱动单元进行校正。在 RP2350 上,低于 Fs/7.5 的滤波器使用 SVF 拓扑以获得更高的低频精度;较高频率则使用传统的双二阶滤波器。
  9. 每输出增益与静音: 每个输出通道的独立增益(-inf 至 +12 dB)和静音。
  10. 时间对齐: 每输出延迟用于扬声器对齐,最高 85 ms(48 kHz 下为 4096 个采样点)。在 S/PDIF/I2S 和 PDM 输出路径之间自动进行延迟补偿。
  11. 主音量: 设备端输出上限,-128 至 0 dB,-128 处为真正静音哨兵。合并到 PASS 5 的每输出乘数中,因此在 CPU 方面几乎免费。独立于 USB 主机音量——两者相乘。不影响响度补偿行为。
  12. 输出: 每个编号插槽可配置为 24 位 S/PDIF 或 24 位 I2S(左对齐,MSB 优先)。I2S 插槽共用一对 BCK/LRCLK 时钟(由于 PIO 侧置约束,LRCLK 始终为 BCK + 1)。可选的主时钟 (MCK) 以 128× 或 256× Fs 路由到单独的 GPIO。PDM 低音炮始终在其专用输出和引脚上。

硬件设置

刷写固件

  1. 下载适用于您电路板的最新 DSPi.uf2 发布版本。
  2. 按住 Pico 上的 BOOTSEL 按钮,同时将其插入计算机。
  3. 将会出现一个名为 RPI-RP2 的驱动器。
  4. .uf2 文件拖放到此驱动器上。
  5. Pico 将重新启动并显示为 “Weeb Labs DSPi” 音频设备。
  6. 下载并启动 DSPi Console 应用程序来控制 DSPi。

接线指南

RP2350 (Pico 2) — 最多 8 个输出引脚:

功能引脚连接
输出插槽 0 (Out 1-2)GPIO 6 (默认)S/PDIF 或 I2S 数据,用于主 L/R 或多路分频对 1
输出插槽 1 (Out 3-4)GPIO 7 (默认)S/PDIF 或 I2S 数据,用于多路分频对 2
输出插槽 2 (Out 5-6)GPIO 8 (默认)S/PDIF 或 I2S 数据,用于多路分频对 3
输出插槽 3 (Out 7-8)GPIO 9 (默认)S/PDIF 或 I2S 数据,用于多路分频对 4
低音炮输出 (PDM, Out 9)GPIO 10 (默认)有源低音炮或 PDM 转模拟滤波器
I2S BCK (共用, 仅 I2S)GPIO 14 (默认)配置为 I2S 的任何插槽的位时钟
I2S LRCLK (仅 I2S)GPIO 15 (BCK + 1, 固定)字/帧时钟;始终为 BCK + 1
I2S MCK (可选)GPIO 13 (默认)启用 MCK 时为 128× 或 256× Fs 主时钟
USBMicro-USB主机设备 (PC/Mac/移动设备)

RP2040 (Pico) — 最多 6 个输出引脚:

功能引脚连接
输出插槽 0 (Out 1-2)GPIO 6 (默认)S/PDIF 或 I2S 数据,用于主 L/R 或立体声对 1
输出插槽 1 (Out 3-4)GPIO 7 (默认)S/PDIF 或 I2S 数据,用于立体声对 2
低音炮输出 (PDM, Out 5)GPIO 10 (默认)有源低音炮或 PDM 转模拟滤波器
I2S BCK (共用, 仅 I2S)GPIO 14 (默认)配置为 I2S 的任何插槽的位时钟
I2S LRCLK (仅 I2S)GPIO 15 (BCK + 1, 固定)字/帧时钟;始终为 BCK + 1
I2S MCK (可选)GPIO 13 (默认)启用 MCK 时为 128× 或 256× Fs 主时钟
USBMicro-USB主机设备 (PC/Mac/移动设备)

注意: S/PDIF 输出需要使用 Toshiba TX179 光学发射器或简单的电阻分压器。I2S 输出是标准的 24 位(位于 32 位框架内)左对齐帧——可直接连接到大多数 I2S DAC。PDM 输出是 1 位逻辑信号,需要电阻和电容构成低通滤波器以转换为模拟音频。

自定义引脚分配

上述所有默认引脚分配均可直接使用,但每个输出引脚——包括 I2S BCK 和 MCK——都可以通过 DSPi Console 应用程序在运行时重新分配。无需重新刷写。这在设计自定义 PCB 或适配默认 GPIO 不方便的电路板时非常有用。引脚分配保存到闪存,并在启动时自动恢复。有几个 GPIO 被保留,不能用于输出:GPIO 12 (UART TX) 以及 GPIO 23-25 (电源控制和 LED)。由于 PIO 侧置约束,LRCLK 始终固定为 BCK + 1。


DSP 特性

矩阵混音器

矩阵混音器将 USB 立体声输入路由到所有输出通道。RP2350 具有 2x9 矩阵(9 个输出),RP2040 具有 2x5 矩阵(5 个输出)。每个交叉点(输入/输出对)具有:

  • 启用/禁用: 路由激活或停用。
  • 增益: 每交叉点 -inf 至 +12 dB。
  • 相位反转: 极性翻转,用于驱动单元对齐。

每个输出通道还具有:

  • 启用: 禁用的输出跳过所有处理(EQ、延迟、转换)以节省 CPU。
  • 增益: 每输出增益(-inf 至 +12 dB)。
  • 静音: 每输出软静音。
  • 延迟: 每输出时间对齐。

输出可用性: 核心 1 在 PDM 低音炮调制器和处理较高编号 S/PDIF 输出的 EQ 工作线程之间共享。PDM 和 EQ 工作线程模式互斥:

RP2350:

模式可用输出核心 1 用途
PDM 启用 (Out 9 打开)Out 1-2 (S/PDIF 1) + Out 9 (PDM)Delta-Sigma 调制器
PDM 禁用 (Out 9 关闭)Out 1-8 (S/PDIF 1-4)Out 3-8 的 EQ 工作线程

RP2040:

模式可用输出核心 1 用途
PDM 启用 (Out 5 打开)Out 1-2 (S/PDIF 1) + Out 5 (PDM)Delta-Sigma 调制器
PDM 禁用 (Out 5 关闭)Out 1-4 (S/PDIF 1-2)Out 3-4 的 EQ 工作线程

相似文章

can1357/oh-my-pi

GitHub Trending (daily)

Oh My Pi 是一个基于 Pi 构建的开源编码代理,提供集成的 IDE,支持 40 多个提供商,内置工具,以及在多种模型上的显著性能提升。

基于RP2040/RP2350的DIY开源超声硬件

Hacker News Top

pic0rick是一款基于RP2040/RP2350微控制器的开源超声采集板,为DIY超声成像提供了一种低成本的替代方案,替代基于FPGA的设计。