まとめに代えて ---「スーパーストラテジー法」
***
まとめに代えて ---「スーパーストラテジー法」
***
CDの誤り訂正符号CIRCとは、リードソロモン符号とクロスインターリーブを組み合わせた方式でした。訂正符号の計算式と、計算対象となるデータとその並び順などを定義しています。
CIRCは、どのCDでも、CDであれば同じです。CD規格で定められていますから。
だけど、誤り訂正能力はメーカ(あるいはCDプレーヤー)によって違うのです。
これはZIPの圧縮アルゴリズムである「Deflate」の規格で、圧縮後のデータ形式のみを定めていて、圧縮方法は概略のみを記していることと似てますね。
圧縮方法は圧縮ツールによって違い、圧縮率の違いがあるのです。ですが、どんな圧縮ツールで生成したZIPファイルであっても Deflate のデータ形式に準拠していれば展開できることは保証されます。それが規格の存在理由。
CIRCの訂正符号もメーカに、...と言うかレコード会社かな。どのレコード会社のCDでも自分のCDプレーヤーで誤り訂正処理ができます。
CDプレーヤーが違っても、少くとも誤り検出処理までは同じと言えましょう。光ピックアップやサーボモータの能力の違いでエラー発生の程度は違うかもですが、それは別の話ね。よろしくお願いします。
違うのは、誤りを検出した後の訂正です。どこまで頑張るかはCDプレーヤー次第なのです。
そんなわけでCIRCの誤り訂正処理を調べて見ました。
スーパーストラテジー法です。
***
CDの円盤上の1フレーム分のピットとランドの長さ(3T〜11T)を判定して得たチャネルビットをEFM復調して、音楽データD1とD2(計 24 バイト)と訂正符号C1とC2(計 8 バイト)を得ます。これが誤り訂正処理の対象です。
音楽データと訂正符号はSRAMに保存します。エピ10とかで出てきたSRAMのことです。
訂正符号C1は連続する2フレーム分から計算対象となるデータを集めて誤り検出できるのですが、C2は 108 フレーム分を待たないと検出できないのでした。
その様子を図にしました(クリックして大きな図を見てね)
縦軸は1フレーム分のデータです。1〜11 と 16〜27 が音楽データ、12〜15 と 28〜31 が訂正符号。なお、音楽データはD1とD2が入り混じってます。図の右端を見てね。
横軸は遅延を表していて、0 の列は現時点(最新)のデータで、1〜108 の列は過去のデータです。EFM復調後のデータは黄色のセルに入力されます。橙色のセルのデータが出力されてDACに行きます。それと共に、0〜107 の列が左から右にシフトします。
訂正符号C1の計算対象は「1」のセルで、C2は「2」のセルです。
*
例えば。
現時点のフレームの全てが消失した場合(他のフレームは誤り無しとして)、C1では誤り訂正できませんが、C2によって全て訂正できます。
1フレーム後に 27 バイト目が、C2の計算対象となる「2」のセルのデータを使って訂正されます。
4フレーム後には 26 バイト目が訂正されて...、9フレーム後には 27 バイト目が訂正されて...、108 フレーム後には 0 バイト目も訂正されて、消失したフレームは全て復活するのです。
C2の「2」のセルは 28 個あって、そのうち誤りは消失したフレームの1バイトだけで、他は誤りがないことがポイントです。
連続する2〜3フレームが消失した場合でも「2」のセルの誤りは1バイトなので訂正できます。
連続する4フレームが消失した場合は、同時に2バイトが誤りとなるため、ここから誤り訂正ができるか否かが違って来そうですね。8フレーム消失までは同様です。
連続する9フレームが消失した場合は、同時に3バイトが誤りとなって誤り訂正できないバイトが出現します。
これはCIRCのリードソロモン符号の設計上の限界です。C2の符号は4つ(4バイト)なので、2つの符号(2バイト)の誤り訂正が限界と、符号理論の教科書に書いてありました。
誤り訂正処理の雰囲気は分かりました?
***
スーパーストラテジー法は、
・C1では、1バイト誤りと、2バイト誤りを訂正します。3バイト誤り以上は訂正不能とします。
・C2では、1バイト誤りは訂正し、2バイト誤りは条件判断して訂正するか否かを決めます。3バイト誤り以上は訂正不能とします。
C2で2バイト誤りを訂正する条件とは、
・誤りと推定した2バイトは、共に「C1ポインタ=1」となっていること
and
・誤りと推定した2バイト以外では、「C1ポインタ=1」となっているのは2つ以下であること
です。
C1ポインタは、C1で2バイト誤りあるいは訂正不能だった場合に1とし、他の場合は0とします。C2ポインタもあるけど省略です。
*
C1で誤り訂正が完璧ならばC2では誤り検出されないはずです。C1で誤り無しなのにC2で誤り訂正したら、誤った誤り訂正をしてしまいかねないです。
なので、C2で2バイト誤りが検出された場合にはC1ポインタを参照して、C1とC2のどちらが信頼できそうかを判定している感じですかね。
C2で検出した誤ったセルがどちらも「C1ポインタ=1」ならば誤りである可能性が高いとして訂正する。
だが、「C1ポインタ=1」のセルが多すぎるとC2の検出が間違っている可能性があるので訂正しない。
定性的にはこんな感じ。
C1、C2のどちらも2バイト誤りまでの訂正を単純に行なう方式より優れているのでしょう。多分ですけど。
*
CIRCに言及しているブロクを読み漁っていたら、ソニー社の誤り訂正処理よりフィリップス社の方が優れていると書いているところがあったけど、そうなのかな? この検証は今後の課題ですね。
***
スーパーストラテジー法を改良するとしたら。
誤りと消失とを分けて処理することでしょう。誤りは2バイトまでしか訂正できませんが、誤りバイトの位置が分かる消失なら4バイトでも訂正できるのです。
消失はEFM復調でテーブルに無い値が出たときや同期信号を検出できなかったときなどに発生します。光ピックアップの信号を精査すると誤りの可能性があるバイトを特定できて、消失として処理できるかもです。マージンビットとの整合性をチェックするのもありでは。
それとC1とC2の誤り訂正を循環的に行なうことでしょう。最初はC1では訂正不能だったけど、C2で訂正した結果、C1で誤り訂正が可能になることもあろうから。処理時間やSRAM容量が制限となりますが。
C1での誤り訂正処理で2バイト誤りの場合は誤ったバイト位置も記録して、C2で参照すると信頼性が向上しないかな。無駄かもだけど。
ピットの長さを1T長く誤判定した場合には隣のランドを1T短く誤判定する可能もあるなどの物理的な関係を考慮するのはどうかな。
...。
1980年代や90年代にはこんな思いつく限りのことは、きっと検討していたんだろうと想像する。
1980年代に生きていたらね。何か提案できたかは分からないけど、楽しかっただろうな。
もうCDプレーヤーは製造されていないようだけど、現在のLSIでなら可能となったことを考えるのはどうかな。クロックとかGHzで動くし。SRAMを大量に使う算法も実装できる。
いや...、現在ならCDはリッピングするか。何度でもリトライして読み出せは良いし、CIRCの誤り訂正処理もパソコン側でやればよい。
そも700MB程度のデータならネットから直ちにダウンロードできるから。
***
**
*
友「このエピで終了ですが、CIRCって調べていて楽しかったね」
私「ホント! 知らないことばかりで勉強になりました。...、って、終了ってホント? やだやだ、まだ書きたいことが...(プッツン)」
ここで録音テープは途切れている。
***
間違いの指摘とか疑問とか、ご意見・ご感想とかありましたら、どうぞ感想欄に!
***
2025.4.10 微推敲。
2025.4.11 推敲とか。
2025.4.23 微推敲。
2025.4.27 推敲。
2025.4.29 微推敲。
2025.5.24 微推敲。
2025.5.31 推敲。