Tymbal: Bộ tổng hợp thần kinh trên một chip duy nhất
Tymbal là một bộ tổng hợp đa âm thời gian thực chạy trên một vi điều khiển STM32N657 duy nhất (Cortex-M55 + NPU Neural-ART). Nó sử dụng mạng nơ-ron TCN như một bộ tinh chỉnh dư để thêm đặc tính phi tuyến vào khung hài hòa xác định, tất cả trong ngân sách chu kỳ nghiêm ngặt và không có sự cố tràn dưới. Dự án mô tả chi tiết quá trình tối ưu hóa, từ chuyển đổi đồ thị đến quản lý bộ nhớ, đạt được hiệu suất thời gian thực cuối cùng trên thiết bị.
Tymbal là một bộ tổng hợp thời gian thực đa âm trên một bo mạch NUCLEO-N657X0-Q (STM32N657: Cortex-M55 ở 800 MHz + NPU Neural-ART), được điều khiển qua bàn phím MIDI, với đầu ra I2S-DAC. Âm thanh được tính toán trong các khối 4 ms; ở 800 MHz tức là 3,2 triệu chu kỳ cho mỗi hop xử lý mọi thứ: giọng, tổng hợp hài, mạng nơ-ron, bộ lọc, detune, limiter, không có underrun nào. Kiến trúc sử dụng miền bốn dải con PQMF (12 kHz mỗi dải) để giảm chi phí và cung cấp đầu vào gọn cho mạng. Khung hài được render trực tiếp vào các dải con bằng cách sử dụng đáp ứng bộ lọc phức tạp, với lớp chống chiptune (tự động unison, spectral bloom, micro-drift). Một TCN nhân quả với 12 lớp, dilation 1..32, C=88 kênh chạy trên NPU như một bộ tinh chỉnh phần dư, lượng tử hóa int8 qua PTQ. Điểm mấu chốt là một mạng được huấn luyện một cách ngây thơ để dự đoán phần dư sẽ thua bộ lọc FIR tuyến tính có 520 hệ số; giải pháp là đóng băng phần tuyến tính như một 'lớp không' (pred = FIR(x) + net(x)), để mạng chỉ học phần dư phi tuyến. Đánh giá cuối cùng: chỉ FIR cho độ khử +11,25 dB, FIR+net fp32 +17,16, int8 +16,89, với mạng đóng góp thêm +5,64 dB. Các phát hiện trong quá trình bring-up bao gồm nội dung ECC ngẫu nhiên sau reset, các bank AXISRAM bị vô hiệu hóa, vấn đề đường dẫn NOR-flash, bộ chia xung nhịp NPU sai (400 thay vì 800 MHz), và một assert giả. Tối ưu hóa ngân sách bắt đầu ở 4,18 triệu chu kỳ/hop, cuối cùng đạt 2,47 triệu trong trường hợp hợp âm xấu nhất, không underrun. Các kỹ thuật bao gồm vòng lặp đo (so sánh QEMU với chu kỳ trên bo), lập hồ sơ epoch NPU, bơm (các lệnh gọi NPU không chặn xen kẽ với render), chuyển các bảng nóng sang DTCM, và sao chép bộ nhớ dựa trên MVE cho vòng trạng thái.
Nguồn: Habr — хаб ML —
bản gốc
