#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通りの位相を総当たりして同期語の一致率を見る。正しい位相だけが立つはずだ:

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)を同じ指標に通すと、何が出るか。これがこの指標の「床」だ:

純雑音の床が 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を取り出す瞬間を。

コメントを残す