電波に局の設定を喋らせる、そして壁にぶつかる ── 自作ワンセグ復調器#3:TMCC復号と、C/Nの壁を較正で証明する

#2 で ③チャネル等化が通り、関西テレビのワンセグから QPSKのコンスタレーションが見えた。今回はその先 ── まず ④ TMCC を読んで放送局の設定そのものを電波から取り出し、続いて ⑤ の誤り訂正(Viterbi)まで一気に組んだ。…のだが、最後に壁にぶつかった。そして「これはバグか、それとも信号が弱いだけか?」を較正で白黒つけた話までが今回の本題。

TMCC ── 電波に「あなたの設定は?」と聞く

ISDB-Tには TMCC(Transmission and Multiplexing Configuration Control)という制御チャネルがある。各階層の変調方式・符号化率・時間インターリーブ長・セグメント数を、専用キャリアで常時知らせてくれる。この先のデインターリーブもFECも、TMCCを読まないと始まらない。

TMCCキャリアは差動BPSK(DBPSK)で、隣り合うOFDMシンボル間の位相が同じなら0、反転なら1を運ぶ。1セグの中央セグメントには4本のTMCCキャリアがあり、全部が同じ語を冗長に送るので多数決で読む。そして 204シンボルで1フレーム。フレーム先頭には16ビットの同期語があり、フレームごとに偶奇で反転する。

問題は「204シンボルのどこがフレームの頭か」。これも #1 のGI判定や #2 のセグメント探しと同じノリで、204通りの位相を総当たりして同期語の一致率を見る。正しい位相だけが立つはずだ:

TMCCフレーム位相スキャン。位相111だけが同期語一致99.5%で突出し、他は60%前後
TMCCフレーム位相スキャン。204位相のうち phase 111 だけが同期語一致99.5%で突き抜けた。他は60%前後の雑音。フレームの頭が一発で決まった瞬間。

phase 111 が同期語一致99.5%で圧勝。さらに各フレームの偶奇が E,O,E,O,… と12フレームきれいに交互だった。これで「正しくフレームに乗った」と断言できる。あとは情報ビットをフレーム間で多数決して読むだけ。出てきた中身がこれ:

=== TMCC 伝送パラメータ(実電波 ch17 カンテレ)===
部分受信フラグ : 1   ← ワンセグ放送中
Layer A(1seg)  : QPSK   / 符号化率 2/3 / 時間IL=4 / 1セグ
Layer B(HDTV)  : 64QAM  / 符号化率 3/4 / 時間IL=2 / 12セグ
Layer C        : 未使用
                          (1 + 12 = 13セグメント ✓)

これは日本の地デジの教科書どおりの設定そのものだ。ワンセグ(Layer A)はモバイル前提で頑丈な QPSK・2/3、固定向けHDTV(Layer B)は情報量を稼ぐ 64QAM・3/4 の12セグ。しかも Layer A = QPSK という記述は、#2 で僕が等化して見た QPSKコンスタレーションを電波自身が independently 裏付けてくれたことになる。規格表を見て「QPSKのはず」ではなく、電波に設定を喋らせた。これは効いた。

デインターリーブ → Viterbi まで組む

TMCCで設定(QPSK・2/3・I=4)が分かったので、受信チェーンの残りを一気に書いた。周波数デインターリーブ(1セグでは384キャリアのランダム置換に簡約される)、時間デインターリーブ(キャリアごとに最大380シンボルのFIFO遅延線)、QPSKデマップビットデインターリーブ、そして ⑤ の Viterbi復号(K=7・母符号1/2をレート2/3にデパンクチャ)。Viterbiは合成テストで「無雑音で完全復元」「符号ビット3%の誤りを訂正」まで確認した。部品は全部そろって、実電波で端から端まで完走した

…が、ここで素朴な疑問が立つ。出てきたビット列は、本当に正しく復号できているのか? 符号ビットの並び順・パンクチャ位相には曖昧さがあって、間違っていれば当然ゴミが出る。でもゴミかどうか、どうやって見分ける?

壁 ── そして「バグか、信号か」を較正で割る

FECがロックしているかの素直な指標として、Viterbiの出力を再エンコードして受信ビットと一致率(≈ 1−誤り率)を測ることにした。曖昧さの全組み合わせ(ビット順×シフト×パンクチャ位相=12通り)を総当たりして、正しい設定だけ一致率が跳ねれば勝ち ── TMCCの位相111のように。

結果は 12設定すべてが約0.89で横一線。どれも跳ねない。…これは怪しい。0.89は高いようにも見えるが、そもそもこの指標、ロックしていなくても高く出るのでは? Viterbiは入力が何であれ「一番それっぽい符号語」を必ず選ぶ。だから雑音でも一致率は高く出るはずだ。

そこで較正した。完全なランダム雑音(±1)を同じ指標に通すと、何が出るか。これがこの指標の「床」だ:

FEC 12設定の一致率はすべて約0.89で、純雑音の床0.928を誰も超えない棒グラフ
FECロック探索。12設定すべて(灰)が約0.89で、純雑音の床(赤線・0.928)を誰一人超えない。本物のロックなら、TMCCの位相111のように1本だけ赤線を突き抜けるはず。それが無い=畳み込み構造が出ていない。

純雑音の床が 0.928。そして実信号の最良は 0.894 ── 雑音より低い。つまりこの指標で見るかぎり、実電波には畳み込み符号の構造がまったく出ていない。FECはロックしていない。バグではなく、信号が弱すぎる ── これが C/N(搬送波対雑音比)の壁だ。推測ではなく、較正で証明された壁

納得はいく。#1 のUHFスキャンで 床+11dB しかなかった弱いアンテナだ。等化後のEVMは約98%。符号ビットの誤り率が1割を超えていて、K=7・2/3 の訂正能力(せいぜい数%)をはるかに超えている。この信号ではViterbiは原理的に勝てないし、その先のRS(リードソロモン)も100%失敗する。だから、ここでRSを実装するのは時間の無駄と判断した。

いまの到達点

  • ①RF入力 / ②OFDM同期 / ③チャネル等化 … 実電波で確認済み
  • TMCC復号(局の設定を読む)… 実電波で確認済み
  • ④ 周波数/時間デインターリーブ・QPSKデマップ … 実装・合成検証済み
  • Viterbi(誤り訂正・内符号)… 実装・合成検証済み、ただし実電波ではC/N不足でロックせず
  • ⑤RS / ⑥TS出力 … この先(良い信号があれば)

教訓:「動かない」と「壁にぶつかった」は、ちゃんと区別して証明できる。再エンコード一致率という指標は、雑音でも0.93出る ── 単独では嘘をつく。だが雑音床と並べた瞬間、真実が見える。指標を出したら、まずその指標自身を較正する。これは #1 の「ロックした と 正しくロックした は別物」と同じ教訓の、もう一段深いやつだ。

打開策ははっきりしている ── アンテナだ。付属のロッドアンテナではなく、壁のTVアンテナ端子に F→SMA変換でつなげば、C/Nに余裕が出てEVMが下がる。そうすれば上の棒グラフのどれか1本が赤線を突き抜け、FEC設定が確定し、Viterbi → RS → そして本物のMPEG-TS(同期バイト 0x47 が188バイトごとに立つ)まで一気に行けるはずだ。コードはもう、その日を待つばかりになっている。

次回 #4 は、その壁を超える回にしたい。良いアンテナで録り直して、自作の復調器が実電波からTSを取り出す瞬間を。

コメント

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

IP: 取得中...
216.73.216.65216.73.216.65