2019年05月28日

FPUのアクティベーション

SDRの記事を読んでいる過程で、以前行ったはずのFPUのアクティベーションを失敗している可能性に気付き、今一度確認を行ったところ、arm_math.h file の該当する箇所に、#define __FPU_USED 0 と記述されていて、これはFPUのアクティベーションが行われていないことを示しているようだ。 つまり、期待していた浮動小数点演算が効率的に行われていなかったということになる。

作業の内容は、CMSIS v4.5.0 library のなかから該当するファイルをArduinoIDEに導入しつつ、arm_math.h file の記述を一部改変するだけなので、それほど手間は掛からない。

ファイルの導入後、スケッチに #include  を書き加えて実機で試験を行ったところ、96kHzのオーディオクロックでは動作不能だった項目を熟せたことから、処理が確実に行われていることを確認できた。

残念ながら、一番重い処理を完全に熟すことは出来なかったが、それでもモードを選択した瞬間に動作がフリーズしてしまう現象が全てのモード下で回避されるようになった。

導入以前は、低いサンプリングレートで運用している場合であっても「処理時間が足りない」状況が散見されていたが、強制的にインターラプトが掛かって処理が中断されていたところに余裕ができて「辻褄が合うようになった」結果、音質を向上させることが出来た。 この成果は非常に大きなものだ。

FPUによる処理が行われるようになって音質が安定したので、ベーシックな使い方(起動後にアクセスしやすいポイントという意味合いも兼ねて)を例示する動画を作成した。



パラメーターの操作は最小限に、左手の動きで出来る表現をクローズアップした画像で解説したつもり。

ディストーション(非線形処理)の過渡特性はアナログ回路であっても調整が難しいが、これをデジタルで再現するのはそこそこハードルが高い作業で、この動画ではその閾値辺りの運用例を示している。

弱音からの立ち上がりには、非線形処理のアルゴリズムを組む以前に、オシレーターの安定度や周波数検知回路のチューニングが絡んでくる。

難易度が高いオシレーターのチューニング・メソッドをなんとかまとめてみたが、ニュアンスが伝わっているだろうか。



デモジュレートされたPWM波形の周波数と出音の関係がイコールではないことに注意して欲しい。 オシレーターの差分から発生したビートの周波数の幅は、音階にして1オクターヴ程度しかない。 オシレーターの周波数の差分から生成されたビートを、あくまでも制御信号として使用している情況がよく解ると思う。

Transitionは実際に操作を行うと直感的にその効果を体験できる機能だが、殆ど世間では共有されていない概念なので、映像資料からはその動作原理を想像することが難しい。 これは特に波形を視認しないとその効果を理解できない要素かもしれない。



抽象的な動作原理をすこしでも理解できるように、一連の操作を行った時の出力波形の変化を記録した。
posted by Yasuski at 00:06| LaVoixski