Tymbal: Synthesizer Neural pada Satu Chip
Tymbal adalah synthesizer polifonik real-time yang berjalan pada satu mikrokontroler STM32N657 (Cortex-M55 + NPU Neural-ART). Ia menggunakan jaringan saraf TCN sebagai penyempurna residual untuk menambahkan karakter non-linear ke kerangka harmonik deterministik, semua dalam batas siklus ketat dan tanpa underrun. Proyek ini merinci optimasi ekstensif, dari transformasi grafik hingga manajemen memori, mencapai kinerja real-time akhir di perangkat.
Tymbal adalah synthesizer real-time polifonik pada satu papan NUCLEO-N657X0-Q (STM32N657: Cortex-M55 pada 800 MHz + NPU Neural-ART), dikendalikan melalui keyboard MIDI, dengan output I2S-DAC. Audio dihitung dalam blok 4 ms; pada 800 MHz itu berarti 3,2 juta siklus per hop untuk semuanya: suara, sintesis harmonik, jaringan saraf, bank filter, detune, limiter, dengan nol underrun. Arsitekturnya menggunakan domain empat-subband PQMF (masing-masing 12 kHz) untuk mengurangi biaya dan memberikan input yang ringkas bagi jaringan. Kerangka harmonik dirender langsung ke subband menggunakan respons filter kompleks, dengan lapisan anti-chiptune (auto-unison, spectral bloom, micro-drift). TCN kausal dengan 12 lapisan, dilasi 1..32, C=88 kanal berjalan di NPU sebagai pemurni residual, dikuantisasi ke int8 melalui PTQ. Temuan kuncinya adalah bahwa jaringan yang dilatih secara naif pada prediksi residual kalah dari FIR linear dengan 520 koefisien; perbaikannya adalah membekukan bagian linear sebagai 'lapisan nol' (pred = FIR(x) + net(x)), sehingga jaringan hanya mempelajari residual non-linear. Evaluasi akhir: FIR saja memberikan penekanan +11,25 dB, FIR+net fp32 +17,16, int8 +16,89, dengan jaringan memberikan kontribusi +5,64 dB. Temuan ekstensif selama bring-up mencakup konten acak ECC setelah reset, bank AXISRAM yang dinonaktifkan, masalah jalur NOR-flash, pembagi clock NPU yang salah (400 bukannya 800 MHz), dan asersi palsu. Optimasi anggaran dimulai pada 4,18M siklus/hop, akhirnya mencapai 2,47M kasus terburuk untuk akor, 0 underrun. Teknik yang digunakan termasuk loop pengukuran (QEMU vs siklus papan), profil epoch NPU, pumping (panggilan NPU non-blocking yang disisipkan dengan rendering), memindahkan tabel panas ke DTCM, dan salinan memori berbasis MVE untuk ring state.
Sumber: Habr — хаб ML —
asli
