2019年10月27日日曜日

STM32F4で高SPS

 フォン・ブラウンのフォンって、最近流行りのファンタジーでよく出てくる貴族の「フォン」と同じ意味なんですね。知らなかった。この世も意外とファンタジーだなぁ(この世を基準にファンタジーを書いてるんだから、そりゃそうだろ、という気もするけど)。

***

 さて、STM32F4のトリプルインターリーブを使うと、ADCで最大7.2Mspsまでサンプリングできます。簡単に使うなら、7.2Mspsが上限となります。
 一方で、別の方法を使うと、最大で8bit時に9Mspsまでサンプリングできます(実際には9.818..MHzまでサンプリングできますが、内部処理の都合上特性が悪化すると予想されるので、最大で9Mspsと扱っています)。
 6bit時であれば10.8Mspsまで行けそうですが、今回は分解能が足りないので8bitのみで動作確認を行っています。


 試しに9MspsでNTSC(コンポジット映像信号)をサンプリングしてみました。



 歪んではいますが、一応バーストサイクルもそれらしく受信できるようになりました。
 バーストに対して約2.5倍のサンプリングレートなので、正弦波の再現性は良くありませんが、信号処理でなんとかできそうな程度にはなっているかな、という気がします。

 メモリの容量的にあまり長時間はサンプリングできませんが、まぁ、7.2Msps超えを目指すという点では、一応達成したかな、と思っています。

***

 試しにNTSCを画像化してみました。



 なかなかいい感じですね。

 1ラインあたり572.01pxくらいになり、詰め物をしなくてもほぼ垂直になります。水平ブランキングを除くと、横解像度は474pxくらいです。

 今の所、72kポイントのメモリを確保していますが、これで縦解像度126ライン分くらいになります。
 78kポイントほど確保しておけば、ちょうど0.5フレーム分くらいになるので、0.5フレームずつSDカードに保存し、その後で1フレームにまとめる、みたいな処理をすれば、いい感じに画像化できそうです。
 SPIの8ピンDIPなSRAMだと64KBくらいの容量なので、これを3個使えば1フレーム分がバッファできるし、1bitSDカードよりは早そうなので、オンボードで画像化するならそのほうがいいかもしれません。
 例えば、缶サットに乗せて上空から画像を撮影するだけなら、オンボードでの画像化は不要で、あとからPCで処理すれば良いので、楽そうです。一方、画像解析等を行って特定の色の場所へ誘導する、みたいな使い方の場合は、オンボードで画像化する必要があるので、なかなか大変そうです。まぁ、色情報を読み出そうとすると位相振幅変調をデコードしなきゃいけないので大変だし、そういう場合はJPEGカメラを使ったほうがいいでしょうけども。


 とりあえず、もうちょっとカラフルなNTSCが得られるように工夫してデータを取り直して、PCで色情報のデコードを試してみようと思います。

***
追記
 一つ前のサンプルとの差の数をカウントしてみた。



 一番数が多いのは0で、ピークの7サンプルで全体のデータの6割を占める。それ以外のサンプルはピークより1桁低い回数しか出てこない。スペクトルの外側は2-3桁少ない。±128を超えると1回も出てこない。
 ハフマン符号で圧縮したらかなりの圧縮率が稼げそう。
 ただ、ループも含めて1バイトあたり16サイクル未満で圧縮する必要があるし、ハフマン符号はビット数が可変なので、それを効率よく詰め込んでいく必要がある。
 まぁ、まずはデコード処理を作らなくちゃ。。

***
追記
 そういえば、リンク集を読んでて思い出したけど、IKAROSの分離カメラが、NTSCカメラで、アナデバの素子で復調してるみたい。うろ覚えだけど、TRICOMのカメラも同じ大学が扱ってた気がするので、それもそうかな?

 あと、今はNTSCとADCを直結だけど、適当なピンにLPF経由で接続して、アナログWDで前置等価パルス期間に割り込みかけて、そこからメインのADCを回す、みたいな処理にすれば、フレーム先頭をキャプチャできそう。タイマを1個挟めば任意のラインを読み込めるし。気が向いたら試してみよう(まずはデコードだ!!)。

0 件のコメント:

コメントを投稿