2019年10月20日日曜日

NTSC

 NTSCとNTSBの覚え方。「BはBroadcastじゃない」

***

 NTSCってどんなもんだろ、と思ってちょっと調べてみた。
「いまさらNTSCかよ!?」って感じだけど。

 NTSC出す機器なんていくらでもあるだろ、と思って探してみたけど、意外と無いなぁ。デジカメに変換ケーブル挿せばNTSCが出せたはずだけど、変換ケーブルが見たらない。JPEGカメラモジュールにNTSC出力があるはずだけど、モジュールが見当たらない。ブルーレイレコーダーの背面を見ても、NTSC入力はあれど、出力はない。そりゃそうか。
 ということで、Xbox360S(One X買う前に360が壊れて買い足したやつ)に、その前の360に付属してたケーブルを突き刺して、無事NTSCが得られた。といっても、こんどはNTSCを表示する画面が無いので、本当に正しい映像が出てるのかはわからんが。ブルーレイレコーダにはNTSC入力があるけど、ケーブル刺すのも面倒だし。。。
 オシロで見てみると、ちゃんとウネウネした信号が出てるし、オシロのNTSCトリガでちゃんと固定できるので、少なくともNTSCっぽい信号は出てるはず。

 都合のいいことに、Xbox 360Sから出てくるNTSCはDC結合で、しかも-40IREがGNDレベルの信号だった。やったね!AC結合せずにマイコンに直結できる!!
 出力75Ω、入力75Ωで1Vppだけど、オープンなら2Vppになるので、反射とか無視するならマイコンのADCに直結して8bitでも最低限の分解能は得られそう。

 試しにSTM32F4のトリプルADCを使ってみたら、思ったよりあっさりと動いた。
 最初、動かねーなーと思ってググったら、昔自分で書いたエントリが出てきて、「今の所サポートされてない」と書いてあったので、その後にサポートされたんだと思う。先にスレーブのADCをONにしなきゃいけないのがハマりどころかな。

 それでも、トリプルADCでも最大7.2Mspsだから、NTSCの3.6MHzを受けるにはかなり厳しい。それに、7.2Mspsでも3フレームをキャプチャするには360kポイントくらい必要になるから、内蔵RAMじゃ全く足りない。
 逆に言えば、0.3フィールド分くらいはキャッシュできるわけだから、うまいことタイミング合わせて6回キャプチャすれば、少なくとも2フィールド分は取れる。とはいえ、サンプリングレートの問題とか、処理時間の問題は残るわけだが。


 STM32に限らず、市販のマイコンボードって、たいていは外部RAMが乗ってないので、大量にデータ取り込んでゴリゴリ、みたいなことやろうとすると苦労する。
 HUB75とか、計算能力は大して必要ないけどRAMが大量にほしい、みたいなことは結構あるので、もーちょっと使いやすくなってればなぁ。そもそもSTBee F4じゃ外部RAMインターフェースはないわけだが。とすると、STBeeにSRAMを増設するボードを作ればいいのか? いやぁ、さすがに今更F1は……
 F7Discoveryだと16MBくらいのRAMが乗ってるらしいけど、さすがにオーバースペック。というか予算オーバー。そもそもDiscoveryとかNucleoはST-Linkが邪魔。Nucleo64とか144ならST-Linkは割れるけど、Discoveryはできないし、144は秋月で扱ってないし。たまにSTM32F303RE使いたくなるけど、Nucleo32はST-Linkを割れないからなぁ。
 STBee F3miniとか、STBee F4fullが欲しいなーと思ったり。


 とりあえず、トリプルADCが動いたので満足。特に使いみちは思いつかないけど。7.2Mspsって結構微妙だよなー。

***
追記
 [PIC AVR 工作室 ビデオ表示のツボ](http://picavr.uunyan.com/making_p_ntsc.html)
 [PIC AVR 工作室 AVRでコンポーネントカラービデオ表示](http://picavr.uunyan.com/avr_m_component.html)
 [PIC AVR 工作室 VHDL CPLDでコンポジットビデオ表示 (ネコ8)](http://picavr.uunyan.com/vhdl_composite.html)

 このあたりを読むと、NTSCというかコンポジットというか、信号の表現方法がなんとなくわかる。


 ADCは、そういえばビット深度減らせばサンプリングレート上がるよな、と思ったけど、そう簡単じゃないようだ。というかそもそも最短ADCホールド+2サイクルが必要だから3サイクルでホールドしても、取り込みに5サイクルがかかる(ので、ADCのディレイも最短が5まで)。

 外部のLPFで3.6MHzを切って輝度信号だけ受けようか、とも思ったりするけど、受動素子だけで高性能なLPFを作るのは結構面倒。試しに5.1kΩと15pF(←PIC使ってた頃に水晶の負荷に買ったやつ)を使って1段のCR LPFを作ってみたけど、多少は衰退するとはいえ、若干残る。それに輝度信号も鈍る。まぁ、色情報を捨ててる段階で実用性も捨ててるわけで、お遊びで動作確認ができればいいという話なら、輝度情報だけあれば十分なんだが。


 ちなみに、コンポジット信号を直接ADCで読み込むと、こんな感じになります。



 縦軸は電圧[V]、横軸はおおよそ1ライン(水平同期サイクル)に合わせてあります。
 ほぼHiZで受けているので、2Vppの信号になっています。
 ぱっと見ではそれらしい信号ですが、バーストサイクルの振幅が大きく変化していることからもサンプリングレート不足が伺えます。LPFを通して輝度信号だけを取り出せればいいのですが、機器側の出力インピーダンスやマイコン側の入力インピーダンスの影響もあって、また手持ちのコンデンサの種類の少なさもあって、定数選びには苦労しそうです。

0 件のコメント:

コメントを投稿