前回、前々回と誤り訂正に関するイメージを書いてみました。
取り上げた例題は本当にイメージだけでそのままでは使うことが出来ないのは言うまでもないですが、実際の応用の中でどんな風に使われて、どのくらいの性能を持っているのかを知っておくとイメージの次に把握すべきことがわかりやすいのではないかと思い、今回は DVD フォーマットを例に誤り訂正技術がどのように使われているかを解説します。
なぜ DVD を取り上げたかというと私が他にやったことがないからです。orz
DVD はご存知のようにビデオファイルを光ディスクに収めるように考案されたものですが、実際には汎用コンピュータファイルを収めるような形式で出来ています。いわゆる DVD-ROM がディスクとしての元々の形式です。DVD-ROM ディスクにビデオファイルをビデオファイルの形式で記録したものが、DVD ディスクとして使われているわけです。いわば DVD ディスクは DVD-ROM の一応用です。
参考までに CD は最初から音楽用ディスクとして特化した形で物理フォーマットが決められています。コンピュータファイルを収めている CD-ROM はその一応用ということになります。
ということで DVD はファイルデータを収めるためにコンピュータとやりとりする最小単位はバイトです。CD はバイトと云えばバイト単位なのですが、どちらかというと 16ビット= 2バイト= 1シンボルという単位で最適化されているように見えます。
さて前回の例の中でデータの単位を固定にしておかないと誤り訂正が出来ない的なことを書きましたが、とりあえず 1 バイト単位でデータを扱っていく、という形式で DVD は出来ていますのでその課題はここではクリアしています。
実際のファイルデータはさらにこれらをまとめたセクタ=ブロックという単位でデータの読み取りをします。LBA = Logical Block Address という言葉を聞いたことがあるかも知れませんが、要はコンピュータは LBA = ***** のデータを読みなさい、と指示してくるので DVD-ROM ドライブはその LBA にアクセスしてデータを読み出し転送するということになります。この単位ですが 2048 byte です。最近はこの単位が標準なんでしょうか。HDD は昔は 512 byte だったようですが最近は 2048 byte のようです。CD-ROM もそうです。
そうすると前回の例のように誤り訂正の単位も 2048 byte で良い、ということになります。(後で覆りますので念のため)
イメージでの例では 4 つのデータに 2 つのチェックデータを付ければ最大 2 つまでの誤りが訂正できるとしました。これを拡張して考えるとたくさんのデータにそれに応じたたくさんのチェックデータを付ければそれだけ訂正できるデータ数が増えます。ただし元データとチェックデータの比を下げてしまうと、誤り発生確率に対する対応力は落ちます。ですがまとめてたくさんのデータに対してそれなりのチェックデータを付けておけば、誤り発生確率に対する対応力は落ちても、連続エラーに対する対応力は上がります。
イメージの例で云うと、4 つのデータに 2 つのチェックデータだと 2 つまで訂正できるので誤りエラー率 1 / 3 まで訂正できます。
これをこのまま 20 個のデータに対して 10 個のチェックデータを付けた場合は 10 個まで訂正できるので誤りエラー率も同様に 1 / 3 です。ところが連続してエラーが発生したことを考えると、前者は 2 つまでですが後者は 10 個まで出来ます。
一見性能が上がったように見えますが、デメリットもあって先頭の 4 つのデータだけ読みたいときでも 30個全部再生しないと訂正できないという使い勝手の悪さが発生します。

使い勝手は犠牲にしてもよいとして 10 個の連続しないし誤りエラー率も 1 / 3 よりもずっと少ない、でも 5 個ぐらいまでの連続したエラーは訂正したい、チェックデータは少なめにして効率を上げたいということで 20 個のデータに対してチェックデータを 5 個だけにしておくという方法があります。こうすることで誤りエラー率への対応力は 1 / 5 に下がりますが、5 個までの連続エラーに対応できて、データ効率も 20 / 30 = 66% から 20 / 25 = 80% に上げることができます。この数値は光ディスクのようなサイズの限られた媒体では非常に重要で、媒体全面に書き込める有効データを少しでも多くしたいと要求が強いのはご承知の通りです。
ところが光ディスクのような可換媒体はゴミやキズなどによってデータエラーが発生することが多いのです。いわゆるジッターのようなランダムエラー(S / N などに起因する統計的エラー)よりもゴミ、キズなどによる連続して発生するエラーが多いため、それをカバーするための誤り訂正の仕組みが必要になるわけです。
なんでこんな方向に話が行ったかというと、誤り訂正の単位をいくつにするかということに結びつきます。先ほどは 2048 byte で良いとしましたが、実はこれでは不足のようで DVD の場合は 32768 byte = 32 KB という単位で誤り訂正を行っています。ファイルデータとしては 2048 byte なので 16 LBA = 1 誤り訂正単位 = ECC block ということになります。
実際にホストコンピュータからある一つの LBA にデータ転送指示があったならば、DVD ドライブは 16 LBA を再生してデータを取り込み誤りデータ訂正した後、指示された LBA のデータのみを転送します。
小さいサイズのファイルばかりだと、一度に要求される LBA の数が少ないため DVD ドライブは読み過ぎては少しだけのデータを転送すると云うことを繰り返すことになります。大きいファイルサイズであればあるほど一度に再生して訂正して全部送れば良いので動作としての効率は良いことになります。
今の最後の部分は誤り訂正技術とは関係ない話ですが、そういう背景からデータ読み出しサイズ、誤り訂正サイズなどを決めていかないと誤り訂正能力の低い、あるいは使い勝手の悪いフォーマットを作ってしまうことになります。
そういった議論を経て DVD の誤り訂正のサイズは 32768 byte に落ち着いたようです。
長くなりましたので、誤り訂正データの構造は次回にします。
取り上げた例題は本当にイメージだけでそのままでは使うことが出来ないのは言うまでもないですが、実際の応用の中でどんな風に使われて、どのくらいの性能を持っているのかを知っておくとイメージの次に把握すべきことがわかりやすいのではないかと思い、今回は DVD フォーマットを例に誤り訂正技術がどのように使われているかを解説します。
なぜ DVD を取り上げたかというと私が他にやったことがないからです。orz
DVD はご存知のようにビデオファイルを光ディスクに収めるように考案されたものですが、実際には汎用コンピュータファイルを収めるような形式で出来ています。いわゆる DVD-ROM がディスクとしての元々の形式です。DVD-ROM ディスクにビデオファイルをビデオファイルの形式で記録したものが、DVD ディスクとして使われているわけです。いわば DVD ディスクは DVD-ROM の一応用です。
参考までに CD は最初から音楽用ディスクとして特化した形で物理フォーマットが決められています。コンピュータファイルを収めている CD-ROM はその一応用ということになります。
ということで DVD はファイルデータを収めるためにコンピュータとやりとりする最小単位はバイトです。CD はバイトと云えばバイト単位なのですが、どちらかというと 16ビット= 2バイト= 1シンボルという単位で最適化されているように見えます。
さて前回の例の中でデータの単位を固定にしておかないと誤り訂正が出来ない的なことを書きましたが、とりあえず 1 バイト単位でデータを扱っていく、という形式で DVD は出来ていますのでその課題はここではクリアしています。
実際のファイルデータはさらにこれらをまとめたセクタ=ブロックという単位でデータの読み取りをします。LBA = Logical Block Address という言葉を聞いたことがあるかも知れませんが、要はコンピュータは LBA = ***** のデータを読みなさい、と指示してくるので DVD-ROM ドライブはその LBA にアクセスしてデータを読み出し転送するということになります。この単位ですが 2048 byte です。最近はこの単位が標準なんでしょうか。HDD は昔は 512 byte だったようですが最近は 2048 byte のようです。CD-ROM もそうです。
そうすると前回の例のように誤り訂正の単位も 2048 byte で良い、ということになります。(後で覆りますので念のため)
イメージでの例では 4 つのデータに 2 つのチェックデータを付ければ最大 2 つまでの誤りが訂正できるとしました。これを拡張して考えるとたくさんのデータにそれに応じたたくさんのチェックデータを付ければそれだけ訂正できるデータ数が増えます。ただし元データとチェックデータの比を下げてしまうと、誤り発生確率に対する対応力は落ちます。ですがまとめてたくさんのデータに対してそれなりのチェックデータを付けておけば、誤り発生確率に対する対応力は落ちても、連続エラーに対する対応力は上がります。
イメージの例で云うと、4 つのデータに 2 つのチェックデータだと 2 つまで訂正できるので誤りエラー率 1 / 3 まで訂正できます。
これをこのまま 20 個のデータに対して 10 個のチェックデータを付けた場合は 10 個まで訂正できるので誤りエラー率も同様に 1 / 3 です。ところが連続してエラーが発生したことを考えると、前者は 2 つまでですが後者は 10 個まで出来ます。


使い勝手は犠牲にしてもよいとして 10 個の連続しないし誤りエラー率も 1 / 3 よりもずっと少ない、でも 5 個ぐらいまでの連続したエラーは訂正したい、チェックデータは少なめにして効率を上げたいということで 20 個のデータに対してチェックデータを 5 個だけにしておくという方法があります。こうすることで誤りエラー率への対応力は 1 / 5 に下がりますが、5 個までの連続エラーに対応できて、データ効率も 20 / 30 = 66% から 20 / 25 = 80% に上げることができます。この数値は光ディスクのようなサイズの限られた媒体では非常に重要で、媒体全面に書き込める有効データを少しでも多くしたいと要求が強いのはご承知の通りです。
ところが光ディスクのような可換媒体はゴミやキズなどによってデータエラーが発生することが多いのです。いわゆるジッターのようなランダムエラー(S / N などに起因する統計的エラー)よりもゴミ、キズなどによる連続して発生するエラーが多いため、それをカバーするための誤り訂正の仕組みが必要になるわけです。
なんでこんな方向に話が行ったかというと、誤り訂正の単位をいくつにするかということに結びつきます。先ほどは 2048 byte で良いとしましたが、実はこれでは不足のようで DVD の場合は 32768 byte = 32 KB という単位で誤り訂正を行っています。ファイルデータとしては 2048 byte なので 16 LBA = 1 誤り訂正単位 = ECC block ということになります。
実際にホストコンピュータからある一つの LBA にデータ転送指示があったならば、DVD ドライブは 16 LBA を再生してデータを取り込み誤りデータ訂正した後、指示された LBA のデータのみを転送します。
小さいサイズのファイルばかりだと、一度に要求される LBA の数が少ないため DVD ドライブは読み過ぎては少しだけのデータを転送すると云うことを繰り返すことになります。大きいファイルサイズであればあるほど一度に再生して訂正して全部送れば良いので動作としての効率は良いことになります。
今の最後の部分は誤り訂正技術とは関係ない話ですが、そういう背景からデータ読み出しサイズ、誤り訂正サイズなどを決めていかないと誤り訂正能力の低い、あるいは使い勝手の悪いフォーマットを作ってしまうことになります。
そういった議論を経て DVD の誤り訂正のサイズは 32768 byte に落ち着いたようです。
長くなりましたので、誤り訂正データの構造は次回にします。