Skip to content

RTL2832Uドングルを使ってテレビを見る!

kik edited this page Aug 16, 2014 · 16 revisions

RTL2832Uドングルを使ったSDRが流行っているのでやってみた

なんだかよく知らないですけど、RTL2832Uというチップを使ったワンセグチューナーは万能の受信機として使えるそうです。 とりあえず、ひとつ750円と激安なので、DS-DT305を買いました。

SDR#というアプリを使えば簡単にFM受信機になりました。でも、これはもう出来上がってるアプリで仕組みがよく分かりません。GNU Radioというのはもっとプログラマ向けで、部品を並べて配線すると好きなようにデジタル信号処理をプログラムできます。これを使ってFM受信機とか作ってみたりしたんですが、これが結構難しかったりしたわけです。

FMは受信できるようになったので、次は気になっていたTVSharpを試してみました。これはNTSCの放送を受信して白黒の絵が出ます。ソースを見たらむちゃくちゃ簡単だったので、自分もGNU Radioの部品を組み合わせて作ってみたくなったわけです。 tvsharp

まあ21世紀ですし、テレビぐらい画面でぽちぽち部品を繋いだらできるみたいな電子ブロックみたいな感覚で作れて当然なわけです。 あと、アナログ放送はもうCATVでしかやってないっぽいので、ない人はファミコンとかで試しましょう。CATVのデジアナ変換も来年3月で終わりだそうです。

AM復調

RTL2832Uに適当に周波数を設定すれば信号が出てくるので、AM復調します。単に複素数の絶対値を取るだけでいいらしいので簡単でした。

AM demod

レベル調整

適当にレベルを調整します。本当に適当に数値を決めましたが本当はAGCとかが必要です。あと負変調なのでマイナスを掛けないと黒と白が反転します!

level

偏向信号

次に偏向信号を作ります。これはブラウン管の後ろから出た電子ビームを水平方向と垂直方向に動かすための信号です。水平は15.734kHzで垂直は59.94Hzののこぎり波を作るだけです。位相を調整できるようにディレイを付けてみました。

saw

波形の確認

オシロスコープ(WX GUI Scope Sink)を追加して波形を確認します。青い線が水平偏向信号ののこぎり波で、赤い線がビデオ信号です。緑のは調整用にローパスフィルターを通した後の信号です。目盛りが-0.7ぐらいのところが水平同期信号で、その少し上が真っ黒のレベル、+1.0ぐらいが真っ白のレベルです。画像では水平同期信号とのこぎり波がきっちり同期してるように見えますが、これが実際は微妙にずれます。本当はPLLを使って同期するところですが、めんどくさいのでのこぎり波の周波数を設定するスライダーを付けるだけにします。本当に微妙な調整が必要で、数ミリHz単位で調整します。

signal

動画の表示

動画を表示する部品は標準ではついてないので、ここだけは自分で作る必要があります。しかし、標準のオシロスコープのXYモードを改造してXとYと輝度を描画するようにするだけで可能なのではないかと思いついてしまったので、この方針でやることにしました。ようするに普通のブラウン管を作るわけですね。なお、オシロスコープのXYモードで動画を表示するのはニコニコ技術部では普通のようです。

とにかく、既存のコードをコピペして回って作ったものが、

なんか他にもファイルがいっぱい置いてありますが、grc_modtoolが最初に生成してくれたファイルそのままなので無視していいです。

動画の調整

動かすとこんな感じに動画が見えます!

crt1

よく見ると画像が斜めに傾いています。これは水平同期信号と同期してないためです。このように右上に傾いてるときはのこぎり波の周波数が数10ミリHz低い状態なので、スライダーでまっすぐになるまで調整します。

crt2

今度は歪みはないですが、位置がおかしいです。これはのこぎり波の位相があってません。ここも、ディレーの値をスライダーで調節します。

crt3

これで、ばっちり写るようになりました!なお、これらの調整はチャンネルを変えるごとにやり直しです。あとチューナーが暖まってくるとやっぱりずれます。ある程度温度が安定してくるまで水平同期は全然合いません!21世紀のテレビは調整が非常に大変です!

全体画像

最後に全体画像を貼っておきます。

full

full2