2017年7月8日土曜日

KIK01 SPI制御VCAと演算による振幅変調の比較

振幅変調をCPUの計算でやったものと、SPI VCAでやったものの出音を比較してみた。


動画の最後のOver Driveは、Over Driveエフェクタではなく、NJM13600への入力レベルを大きめにして歪ませてみた。

処理時間の比較


SPI VCA



ch1:D3 ch2:D2

ch1:D3がHの区間はサンプリング周期でエンベロープ出力のみに使った時間。およそ11us~14us。

ch2:D2がHの区間は同じく、全処理に使った時間(エンベロープ出力+波形出力)。およそ13~16us。

サンプリング周期が20us(50kHz)なのでほぼほぼ処理に時間消費してしまっている。


ch1:D3 ch2:CS

ch2:CSがLの区間は、MCP4922とのSPI通信に費やしている時間。おおよそ7us~9us。

エンベロープ出力に11us~14usかかっているので、4~5us程度がSPI通信以外のエンベロープ生成に使っている時間。


サンプリング・レートが50kHz程度だと、F446でも1chでSPI通信だけで9us程度使ってしまうので、MCP4922に2ch出力するのはキツそうだ。これ以上SPIクロックを上げてもあまり効果はなさそう。(参考「Nucleo F446RE(mbed)の内蔵DACとSPI DACのMCP4922の速度を比較する」)

内部演算

振幅変調をプログラムで行った場合。


ch1:D3 ch2:D2

エンベロープ計算に3us。波形出力完了まで4.8us。


SPI VCAのエンベロープ


SPI VCAの回路図

回路図のD-3エリアのトリマのR6とC3で構成されるLPFでエンベロープ波形を滑らかにしている。ここの波形を見るためにトリマを回しながらR7入口側のポイントの波形を見てみた。

R6最小

R6中間

R6最大

振幅変調のエンベロープはプログラムで滑らかにしているので、R6最小がパキっとした感じで良さそう。動画はR6を最小にして録音している。