デジタル版Frequency Shifterの検討 その2 まずはSTM32で
■まずはSTM32F103で
マイコンとしては、Armtheremin Live の音源モジュールとして STM32F103搭載のBluePillを、STM32duinoとして使っていたので、とりあえずこれで検討。
参考→
http://hyamasynth.web.fc2.com/ArmThereminLIVE/ArmTerminLIVE_Root.html
しかし、音源モジュールとは異なり今回のお題は、いわばエフェクターなので、今まで未経験のオーディオ入力も考える必要がある。
目標としては、
(1) 歪やノイズなどはアナログ版並
(2) キャリア漏れや周波数シフトの精度はアナログより高精度
(3) 高音域はアナログのように伸ばせないのは許容するが、エイリアシングノイズは極力避ける
とします。
少なくともアナログ版と比較できるレベルの音質を狙うには、エイリアシングに注力が必要なので、ひょっとしたらFrequency Shifterのデジタル実装よりも、高品質のA/DとD/Aを持つ適切なマイコンシステムの開発が重要になりそう。
そこで、「入力フィルタ→ A/D → マイコン → D/A → 出力フィルタ」のような「無処理」の系で音質を評価することにします。
この際の、A/Dの速度も調査が必要。Armtheremin Liveでも、D/A周りのS/Nでは苦労したので、A/Dも含めるなかなか難しいことが予想されます。
■外付けD/AとA/Dが必要
実際アームテルミンの開発用の改造基板で、STM32F103チップの内蔵12bitA/D と、2チャンネルPWMのアナログ合成で実質12bit精度以上のはずのD/Aで試しましたが、アナログフィルタや、電源グランド周りのアナログ処理のS/Nや歪等とても今回の用途には心もとなく、外付けD/Aを使う必要がありそうです。
また、STM32M3チップの内蔵A/Dは、オーディオで使えるように変換クロックを上げると変換精度が落ち、複数のA/D 入力チャンネル間で大きなクロストークが生じました。(これは、後にADのサンプリング幅の設定が適切でなかったからかもしれない・・)
他に複数個のPOTの読み込みなどにもA/Dは必要なので、オーディオ入力専用とはできず、内蔵A/DはPOT読み込みに回して、オーディオ入力には、外付けA/Dを探すことにします。