DSPi:一款为树莓派 Pico(RP2040)和 Pico 2(RP2350)量身打造的全功能音频 DSP 固件
摘要
DSPi 是一款开源固件,可将树莓派 Pico 变身为全功能数字音频处理器,支持房间校正、参数均衡器、矩阵混音等功能。
查看缓存全文
缓存时间: 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) 获取开发更新、讨论或寻求帮助!
目录
- 核心能力
- 平台支持
- 音频信号链
- 硬件设置
- DSP 特性
- 矩阵混音器
- 参数均衡
- 响度补偿
- 耳机交叉馈送
- 音量均衡器
- 每通道前置放大器
- 主音量
- I2S 输出
- 低音炮 PDM 输出
- 用户预设
- 开发者参考
- 系统架构
- 性能调优
- USB 控制协议
- 系统遥测
- 数据结构
- 从源代码构建
- 详细规格
- 许可协议
核心能力
- 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 V | 1.15 V |
| 采样率 | 44.1 / 48 / 96 kHz | 44.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)
信号链细节
- 输入 (USB): 16 位或 24 位 PCM 立体声音频,采样率为 44.1、48 或 96 kHz。通过 USB 备用设置选择位深;通过 USB Audio Class 速率设置请求选择采样率。
- 每通道前置放大器 (PASS 1): 对 USB 左和右输入通道提供以 dB 为单位的独立增益控制。在 DSP 链的最开始应用,因此其设置会影响所有下游处理。
- 主 EQ (PASS 2): 每通道(左/右)最多 10 个参数 EQ 频段。支持峰值、低架、高架、低通和高通滤波器类型。
- 音量均衡器 (PASS 2.5): 可选的前馈、立体声联动、单频段 RMS 压缩器,采用软膝向上压缩——安静内容被提升至目标电平,而高于阈值的内容则原样通过。可配置速度、最大增益上限和噪声门。可选 10 毫秒前瞻。一个 -6 dBFS 增益降低安全限制器防止输出过冲。
- 耳机交叉馈送 (PASS 3): 可选的 BS2B 交叉馈送,将每个通道经过滤波和延迟的部分混合到相反通道。使用互补滤波器设计,通过全通滤波器引入耳间时间延迟 (ITD)。三种预设(默认、Chu Moy、Jan Meier)加上自定义频率和馈送电平。ITD 可独立切换。主峰值表计在此阶段进行采样。
- 响度补偿: 可选的 ISO 226:2003 等响度 EQ,根据当前音量级别自适应调整。在低音量下,低音和高音被增强以补偿人耳灵敏度降低。可配置参考 SPL 和强度。由 USB 主机音量位置驱动,因此无论下游的主音量衰减如何,它都保持正确。
- 矩阵混音器 (PASS 4): 将两个 USB 输入通道(左/右)路由到所有输出通道。每个交叉点具有独立的启用、增益(-inf 至 +12 dB)和相位反转。输出可以单独启用/禁用以节省 CPU。RP2350 具有 2x9 矩阵(9 个输出),RP2040 具有 2x5 矩阵(5 个输出)。
- 输出 EQ (PASS 5): 两种平台上每个输出通道独立的 10 频段 EQ。非常适合分频滤波器和对每个驱动单元进行校正。在 RP2350 上,低于 Fs/7.5 的滤波器使用 SVF 拓扑以获得更高的低频精度;较高频率则使用传统的双二阶滤波器。
- 每输出增益与静音: 每个输出通道的独立增益(-inf 至 +12 dB)和静音。
- 时间对齐: 每输出延迟用于扬声器对齐,最高 85 ms(48 kHz 下为 4096 个采样点)。在 S/PDIF/I2S 和 PDM 输出路径之间自动进行延迟补偿。
- 主音量: 设备端输出上限,-128 至 0 dB,-128 处为真正静音哨兵。合并到 PASS 5 的每输出乘数中,因此在 CPU 方面几乎免费。独立于 USB 主机音量——两者相乘。不影响响度补偿行为。
- 输出: 每个编号插槽可配置为 24 位 S/PDIF 或 24 位 I2S(左对齐,MSB 优先)。I2S 插槽共用一对 BCK/LRCLK 时钟(由于 PIO 侧置约束,LRCLK 始终为 BCK + 1)。可选的主时钟 (MCK) 以 128× 或 256× Fs 路由到单独的 GPIO。PDM 低音炮始终在其专用输出和引脚上。
硬件设置
刷写固件
- 下载适用于您电路板的最新
DSPi.uf2发布版本。 - 按住 Pico 上的 BOOTSEL 按钮,同时将其插入计算机。
- 将会出现一个名为
RPI-RP2的驱动器。 - 将
.uf2文件拖放到此驱动器上。 - Pico 将重新启动并显示为 “Weeb Labs DSPi” 音频设备。
- 下载并启动 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 主时钟 |
| USB | Micro-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 主时钟 |
| USB | Micro-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
Oh My Pi 是一个基于 Pi 构建的开源编码代理,提供集成的 IDE,支持 40 多个提供商,内置工具,以及在多种模型上的显著性能提升。
基于RP2040/RP2350的DIY开源超声硬件
pic0rick是一款基于RP2040/RP2350微控制器的开源超声采集板,为DIY超声成像提供了一种低成本的替代方案,替代基于FPGA的设计。
@isaacbmiller1:DSPy 3.2.0 发布!亮点速览:- dspy.RLM 在解析、工具执行与故障恢复方面的改进……
DSPy 3.2.0 优化了 dspy.RLM 的解析、工具执行与故障恢复,并持续推进与 LiteLLM 的解耦。
Raspberry Pi Pico W 作为 USB Wi-Fi 适配器
一个将 Raspberry Pi Pico W 转变为 USB Wi-Fi 适配器的项目,提供了一种通过 USB 为设备添加无线连接的简单方法。
@0xtotem: 已将 PEEK 移植到 @DSPyOSS。你可以将任何 DSPy 代理(ReAct、RLM 等)封装到这个新模块中,以受益于更好的性能……
已将 PEEK 方法移植到 DSPy,使任何 DSPy 代理都能受益于如论文所示的改进性能和成本降低。