ToepassingenHardware & Inferentie 🇷🇺 14.08.2026 14:04

Tymbal: neurale synthesizer op een enkele chip

Tymbal is een realtime polyfone synthesizer die draait op een enkele STM32N657-microcontroller (Cortex-M55 + Neural-ART NPU). Het gebruikt een TCN-neuraal netwerk als een residuele verfijner om een niet-lineair karakter toe te voegen aan een deterministisch harmonisch skelet, allemaal binnen strikte cyclebudgetten en zonder onderbrekingen. Het project beschrijft uitgebreide optimalisatie, van graaftransformaties tot geheugenbeheer, en bereikt de uiteindelijke realtime prestaties op het apparaat.
Tymbal is een polyfone real-time synthesizer op een enkele NUCLEO-N657X0-Q-kaart (STM32N657: Cortex-M55 op 800 MHz + Neural-ART NPU), bestuurd via MIDI-keyboard, met I2S-DAC-uitvoer. De audio wordt berekend in blokken van 4 ms; bij 800 MHz is dat 3,2 miljoen cycli per hop voor alles: stemmen, harmonische synthese, neuraal netwerk, filterbank, detune, limiter, met nul underruns. De architectuur gebruikt een PQMF-domein met vier subbanden (elk 12 kHz) om de kosten te verlagen en het netwerk een compacte invoer te geven. Het harmonische skelet wordt direct in subbanden weergegeven met behulp van complexe filterresponsies, met een anti-chiptune-laag (auto-unison, spectrale bloei, micro-drift). Een causaal TCN met 12 lagen, dilataties 1..32, C=88 kanalen draait op de NPU als een residuele verfijner, gekwantiseerd naar int8 via PTQ. Het belangrijkste inzicht was dat een netwerk dat naïef is getraind op residuele voorspelling verliest van een lineaire FIR van 520 coëfficiënten; de oplossing was om het lineaire deel als een 'nul-laag' te bevriezen (pred = FIR(x) + net(x)), zodat het netwerk alleen de niet-lineaire rest leert. Eindbeoordeling: FIR alleen geeft +11,25 dB onderdrukking, FIR+net fp32 +17,16, int8 +16,89, waarbij het netwerk +5,64 dB bijdraagt. Uitgebreide bevindingen tijdens het opstarten omvatten willekeurige inhoud van ECC na reset, uitgeschakelde AXISRAM-banken, problemen met het NOR-flashpad, onjuiste NPU-klokdeler (400 in plaats van 800 MHz) en een onjuiste assert. De budgetoptimalisatie begon bij 4,18M cycli/hop, en bereikte uiteindelijk 2,47M in het slechtste geval voor een akkoord, met 0 underruns. Technieken omvatten een meetlus (QEMU versus bordcycli), NPU-epoch-profilering, pompen (niet-blokkerende NPU-aanroepen afgewisseld met rendering), het verplaatsen van hot-tabellen naar DTCM, en op MVE gebaseerde geheugenkopie voor de statusring.
Bron: Habr — хаб ML — origineel
Eerdere berichten over dit onderwerp ↓
Vers nieuws