表示調整
閉じる
挿絵表示切替ボタン
▼配色
▼行間
▼文字サイズ
▼メニューバー
×閉じる

ブックマークに追加しました

設定
0/400
設定を保存しました
エラーが発生しました
※文字以内
ブックマークを解除しました。

エラーが発生しました。

エラーの原因がわからない場合はヘルプセンターをご確認ください。

ブックマーク機能を使うにはログインしてください。
25/45

エピ18 マージンビットの選択に特例があります。


 ***


 マージンビットの選択に特例があります。


 この特例はCD-ROM規格に明記されているのですが、CD規格では見つかりませんでした。でもCDでも同じはずです。


 ***


 特例とは、前後と合せると0の連続が 10 個であっても、その選択を制限することです。


 例として、データが 0x59 と 0x25 の場合で説明します。この2バイトはEFM変換テーブルで次のようになります。


  0x59 --> 10000000000100

  0x25 --> 00000100001000


 この間に入れるマージンビットは、連続する0の連続としては4種類のどれでも選択可能なので(直前のカウンタは0とすると)カウンタが0に近くなる000が選択されるでしょう。0の連続はちょうど 10 個です。


  10000000000100 000 00000100001000 ... +8 -3 -4 = +1

  10000000000100 100 00000100001000 ... +8 +3 +4 = +15

  10000000000100 010 00000100001000 ... +8 +1 +4 = +13

  10000000000100 001 00000100001000 ... +8 -1 +4 = +11


 すると先頭からの 24bit が同期信号(100000000001000000000010)と同じパターンになってしまいます!


 このような場合には特例として000は選択しないことになっているのです。この特例があるから同期信号と同じパターンはフレーム中には存在しないのです。


 だから同期信号でフレーム先頭を検出できるのでした!


 *


 マージンビットの特例は 14bit 中に 0 が 10 連続する場合に発生します。そのうち1つはサブコードの S0 で、他は 0x59 と 0x7C です。


  _____ ___ 00100000000001 000 0000000100 S0

  _____ __0 01000000000010 000 000000100_ 0x59

  _____ _00 10000000000100 000 00000100__ 0x7C


 それから、先頭と末尾に 0 が 5〜8 連続する場合にも発生します。


  ___00 100 00000000100000 000 00100_

  __001 000 00000001000000 000 0100__

  _0010 000 00000010000000 000 100___

  00100 000 00000100000000 001 00____


 なお、サブコードの S1 は先頭に 0 が 9 連続しますが、サブコードの前は同期信号なので特例は発生しません。



  SYN_____________________ MGN S1____________ MGN

  100000000001000000000010 010 00000000010010 0__


 末尾に 0 が 9 連続する場合は(EFM変換テーブルにはありませんけど)、先頭に 0 が 9 連続するのは S1 のみなので特例は発生しません。安全です。


  _00 10001000000000 010 000000000100__ ___


 ***


 EFM変換テーブルの 256 個は、どうやって選んだのかちょっと調べてみました。


 まずは 2^14 = 16384 個からEFMのルールに合わないものを除外します。11と101を含むもの、0が 11 個以上連続するものを除くのです。すると 267 個が残ります。


 なので、あと 267-256 = 11 個を除くのですけれど、...。


 ここで、ちょっとズルをしてEFM変換テーブルを参照して、除外される 11 個を表示してみます。


  1  00000000001000

  2  00000000001001

  3  00000000010000

  4  00000000010001

  5  00000000010010


  1  00001000000000

  2  01001000000000

  3  10001000000000

  4  00010000000000

  5  10010000000000


  1  00100000000001 ... S0


 除外される 11 個とは、...先頭か末尾に0が9個以上連続するものと、S0 でした!


 これで 256 個が選ばれたようです。


 ***


 マージンビットの特例で、やっと同期信号の謎が解けたけど、同期信号とかEFM変換テーブルの設計ってヤバイくない?


  00010000000000 : 10z tail ... not in EFM

  10010000000000 : 10z tail ... not in EFM


  00000000001000 : 10z head ... not in EFM

  00000000001001 : 10z head ... not in EFM


  00100000000001 : 10z mid ... not in EFM S0

  01000000000010 : 10z mid ... 0x59

  10000000000100 : 10z mid ... 0x7C


  00001000000000 : 9z tail ... not in EFM

  01001000000000 : 9z tail ... not in EFM --> 0x59 ?

  10001000000000 : 9z tail ... not in EFM --> 0x7C ?


  00000000010000 : 9z head ... not in EFM

  00000000010001 : 9z head ... not in EFM --> S0 ?

  00000000010010 : 9z head ... not in EFM S1



 うーん、うーん、こ、これが最適なのかな。


 先頭や末尾に 0 が 10 連続するパターンは避けるとして、中間に 10 連続するパターンも止めた方が良いと思うのです。逆に 9 連続は使ってよいのではないかな。条件付きだけど。


 サブコードの S0 は S1 と同じく先頭 9 連続すればよいと思うし、0x59 と 0x7C は末尾 9 連続するパターンにすれば良くない?


 特例の発生頻度を減らせるよね? 特例は少ない方が良いよね? 違う?


 特例の判定はCDを製造プレスするときだけだから、再生するときには関係しないから、気にする必要はないかもだけど。でもCD-Rとかあるし。ブツブツ、...。


 ***


 間違いの指摘とか疑問とか、ご意見・ご感想とかありましたら、どうぞ感想欄に!


 ***

2025.5.22 推敲。



評価をするにはログインしてください。
ブックマークに追加
ブックマーク機能を使うにはログインしてください。
― 新着の感想 ―
このエピソードに感想はまだ書かれていません。
感想一覧
+注意+

特に記載なき場合、掲載されている作品はすべてフィクションであり実在の人物・団体等とは一切関係ありません。
特に記載なき場合、掲載されている作品の著作権は作者にあります(一部作品除く)。
作者以外の方による作品の引用を超える無断転載は禁止しており、行った場合、著作権法の違反となります。

この作品はリンクフリーです。ご自由にリンク(紹介)してください。
この作品はスマートフォン対応です。スマートフォンかパソコンかを自動で判別し、適切なページを表示します。

↑ページトップへ