Tymbal:单芯片神经合成器
Tymbal是一款在单个STM32N657微控制器(Cortex-M55 + Neural-ART NPU)上运行的实时复音合成器。它使用TCN神经网络作为残差精化器,为确定性谐波骨架添加非线性特性,一切都在严格的周期预算内,零欠载运行。项目详述了从图变换到内存管理的广泛优化,最终在设备上实现了实时性能。
Tymbal 是一款在单个 NUCLEO-N657X0-Q 开发板(STM32N657:Cortex-M55 800 MHz + Neural-ART NPU)上运行的多音色实时合成器,通过 MIDI 键盘控制,并使用 I2S-DAC 输出。音频以 4 毫秒块计算;在 800 MHz 下,每个跳动周期为 320 万个周期,用于处理所有内容:音色、谐波合成、神经网络、滤波器组、去谐、限制器,且零欠载。架构使用 PQMF 四子带域(每个子带 12 kHz)以降低计算成本,并为网络提供紧凑的输入。谐波骨架直接使用复数滤波器响应渲染到子带中,并带有反芯片音乐层(自动齐奏、频谱绽放、微漂移)。一个具有 12 层、膨胀率 1..32、通道数 C=88 的因果 TCN 在 NPU 上作为残差精化器运行,通过 PTQ 量化为 int8。关键洞见在于,天真地在残差预测上训练的网络不如一个具有 520 个系数的线性 FIR;解决方案是将线性部分冻结为“零层”(pred = FIR(x) + net(x)),这样网络只学习非线性残差。最终评估:仅 FIR 提供 +11.25 dB 抑制,FIR+网络 fp32 提供 +17.16 dB,int8 提供 +16.89 dB,其中网络贡献了 +5.64 dB。广泛的启动调试发现包括:复位后 ECC 随机内容、禁用的 AXISRAM 库、NOR 闪存路径问题、NPU 时钟分频器不正确(400 而非 800 MHz),以及一个错误的断言。预算优化从 4.18M 周期/跳动开始,最终达到 2.47M 最坏情况和弦,零欠载。采用的技术包括测量循环(QEMU 与开发板周期对比)、NPU 时代分析、泵送(非阻塞 NPU 调用与渲染交错)、将热表移至 DTCM,以及基于 MVE 的状态环形内存复制。
来源: Habr — хаб ML —
原文
