CDを読もう3!夜眠れないのでアナログとデジタルとをぼんやりと考えてみたら迷走した(12)
●CDを読もう3!夜眠れないのでアナログとデジタルとをぼんやりと考えてみたら迷走した(12)ー媒体6
***
高音質CDって、ご存知ですか?
従来のCD規格に準拠していて、普通のCDプレーヤーで再生できる。なのに従来のCDより音質が良いことをアピールするCDです。2008年前後に幾つか開発され、発売されています。
CDプレーヤーによって音が違うとか、アンプやスピーカー(ケーブルや電源もかな?)が優れているので音が良いと言うのは普通の話ですね。でも、それとは違うようです。CDプレーヤーは同じなのに音質が違うらしいのです。
SACD(スーパーオーディオCD)のようなCDを超えるスペックで、対応するプレーヤーなら高音質で聴けると言う話でも無さそう。
過去の音源を最新のデジタル技術を用いて作り直したのでも無さそう。普通のCDと高音質CDの2枚(音源も同じらしい)を聴き比べすると違うって!
データが同じなら音質は同じでは? と思いますよね。デジタルですからね。
なのに当時の記事を読むと「輪郭が明瞭」とか「音場の奥行きがー」とか「一歩前に出た感じ」とか、...何を言っているのか理解できていないのですが、とにかく違うらしいです。
これはどういうことなのか? 謎を感じた調査団一同は探求のためにアマゾンの奥地に向かった(向いません!)
今回はそんな話です。
***
基本、駄文なので本当に暇な時にしか読まない方がよいですよー。読んでも何かの役に立つことはないよー。
***
高音質CDと言えば、SHM-CD、HQCD、Blu-spec CD の3つが有名らしいです。ググるとだいたいのことは出てきて Wiki にも記事がありますが、ザックリと調べてまとめて見ました。
(1)SHM-CD(Super High Material CD)。日本ビクター社とユニバーサルミュージック社の共同開発で、2007年10月3日に発表。11月21日から発売。CDの基盤に「液晶パネル用」のポリカーボネート樹脂を採用して透明度を上げたそうです。透明度の他に流動性と転写性にも優れ、より正確なピットの形成が可能になったとか。これで高音質を実現。
2008年5月28日に「これが SHM-CD だ! ロックで聴き比べる体験サンプラー」を発売。2枚組なのに1000円と手頃な値段で、SHM-CD と通常のCDとの音質を聴き比べることができる(2枚は同じ曲が入っている)。発売後すぐに完売(25,000枚売れた?)。9月3日には第2弾でロック/ソウル/ブルース版とジャズ版とクラシック版を発売。12月3日には第3弾でロック版を発売。
2013年9月には「プラチナ SHM」が発売されています。通常はアルミニウムの反射膜(反射層)をプラチナにすると、表面が滑らかでピットの形成も良い感じになるそうです。プラチナって貴金属です。
現在でも SHM-CD は発売されていて、ググったら「吉田美奈子「EXTREME BEAUTY」(1995年発表)が最新リマスター SHM-CD 仕様で2024年10月30日再発」とか出て来ました。リマスターなら音質は良いのでしょうね。
(2)HQCD(Hi Quality CD)。メモリーテック社が開発し、2008年9月に発表。EMIやポニーキャニオン、コロムビアミュージックエンタテインメント、エイベックス・エンタテイメントなどからタイトルがリリース。
CDの基盤には液晶パネル用のポリカーボネート樹脂を採用し、反射膜には特殊合金(銀合金)を採用。基盤は従来のポリカーボネートより、透明度・流動性・転写性に優れ、反射膜は従来のアルミより、反射率を高くできた。耐久性・耐熱性・耐光性にも優れる。
2015年4月には UHQCD が発表されています。UHQCD は通常状態では液体で流動性の高いフォトポリマーでスタンパーのピットを転写。光を当てて硬化。ポリカーボネートが基盤なのは同じ。
UHQCD も発売が続いているようです。
(3)Blu-spec CD。ソニー・ミュージックエンタテインメント社が2008年11月5日に発表し、その第1弾60タイトルが12月24日に発売。第2弾30タイトルが2009年1月21日に発売。
Blu-ray Disc のカッティングに使用されているブルーレーザーダイオードで原盤(マスター盤)をカッティングすることで精度向上。CDの基盤にも Blu-ray Disc の高分子ポリカーボネートを採用して、ピットやランドの歪みを軽減。
2012年9月28日には Blu-spec CD2 を発表。2012年12月5日に第1弾を発売。原盤に半導体用のシリコンウェハーを採用し、Blu-ray Disc のカッティング方式も採用。原盤から直接にスタンパーを製作可能。
これらの他に2006年にガラス製のCDも発表発売されてます。ガラスだと複屈折率がほぼ0で良いらしいです。1枚98,700円と高価なのですが。ガラスなら耐久性に優れて永久不滅。
*
CDの基盤(通常はポリカーボネート)の材質を見直したりして、ピットの形状を整えて、レーザーの反射光も改善して、CDプレーヤーでの読み取り精度を良くすることがポイントのようです。
高音質CDでは、マスター音源の高精度化(24bit)やスタンパー製造時の精度向上など製造工程での改善も行われているそうです。
得にリマスターによる音質改善が貢献しているとの指摘も。
では高音質CDの「高音質」とは何を意味するのでしょうか?
ビクターとユニバーサルミュージック:高音質の定義ですが、「マスターに対する高忠実再生」と考えており、音質に関する評価は再生環境等により異なります。
メモリーテック:高音質とは、マスター音源に限りなく近い音をCDに複製する技術です。
分かる?
*
CDとしての(音質ではなくて)品質なのかな。やっぱり謎ですね。CDのマスター音源はデジタルなデータで、プレスされたCDをCDドライブで読み出したら、そのデータと一致するはずですよね?
なんならね、高音質CDのデータをパソコンに読み出してね、CDRに焼いてね、聴いてみたら違うのかな? 太陽誘電の音楽用CDR「That’s」とかで試してみたい。普通のCDから焼いた場合と違うのだろうか。違うならその理由を追求したい!
Blu-spec CD の記事では(CDに刻まれるデータはデジタルなデータだけど)ピットの形状が重要なのは、レーザーの反射光はピットからランドに移る際にアナログ的に変化するからだ、と解説している。
時系列でアナログ的に反射光の強さが変化するのはその通りだけど。ピットの長さは3T〜11Tのどれかで、この判定が間違わなればエラーにならない。CDはデジタルなのだから。ビットの歪みが大き過ぎればエラーにもなるのだろうけど。CDROMのことを考えれば、読み取るデータが違ったりしたら困るよね。
2008年11月18日に開催された Blu-spec CD の試聴会の参加者の記事によれば、視聴用の Blu-spec CD と比較用の通常のCDをパソコンでリッピングしたところ、データは全く同じとのこと。データは同じなんだ。。。
もしかしたら当時のCDプレーヤーとCDは...、ピットの形状を整えないと音質に影響するほどのエラーが出ていたのかも知れないけれど...、データは同じ。そこについて解説がない。これではオーディオマニア向けのアレとの区別が素人には難しいです。
CDって、エラーが出るのかな?
CDのエラーか。
エラー。
...。
*
**
***
ここでCDの誤り訂正符号(CIRC)の説明を始めます。...、あ、逃げないで! お客様ッ!
***
まずは準備。誤り訂正符号がどこに何バイトあるのか特定しましょう。
CDのトラックには、最初に「リードイン」、続いて音楽の部分、最後に「リードアウト」が記録されています。本シリーズの(10)で出て来ました。なお、音楽の部分はCD用語では「プログラムエリア」と言います。
プログラムエリアには最大 99 の曲を入れることができて、曲の前後にはギャップ(無音時間)を挟むこともできます(ギャップは無くてもよい)。曲の開始位置や長さの情報はリードインに入ってます。
曲は、1/75 秒分を1セクタとして構成されています。つまり、セクタの連続で1曲になり、曲の長さは 1/75 秒刻み。最短で4秒。5分 10 秒の曲なら 310*75 = 23250 個のセクタだ。OK?
CDの標本化周波数は 44.1kHz ですから、1セクタ(1/75 秒)は 44100/75 = 588 サンプル分です。1サンプルは 16bit で2チャンネルありますから、1セクタは 588 * 16/8 * 2 = 2352 バイト分のデータです。
セクタは、98 個のフレームから構成されています。1フレームは 588/98 = 6 サンプル分で、2352/98 = 24 バイト分のデータです。
フレームの構成です。C1とC2の順番に注意してね。
|同期信号|サブコード|データD1|訂正符号C2
|データD2|訂正符号C1|
*
データD1とD2は各 12 バイト分で計 24 バイト分です。訂正符号C1とC2は各4バイト分で計8バイト分です。後述します。
なお、データは4バイトで1サンプルで、+0 は上位 8bit で +1 は下位 8bit で合せて左チャネルの 16bit になり、+2 と +3 が右チャネル 16bit です。符号付整数です。
同期信号は 100000000001000000000010 という 24bit です。この 24bit でフレームの先頭を検出するそうです。
同期信号は11T+11T+nT(nは3〜)になります(←ここ間違っていたので修正)。なら、11T+11Tの 22bit とマージンビット100(後述)にすれば良いんじゃない? と思った。タイムマシンがあればね。
サブコードは1バイト分で、1セクタ(= 98 フレーム)中の最初の2フレームを除いて、各ビットは P, Q, R, S, T, U, V, W と言う8つのデータになります。これを1セクタ毎にまとめて、(98-2)/8 = 12 バイトで1つのデータになります。ビット毎に分けて何か意味があるのかと期待しましたが無さそうでガッカリ。
最初の2フレームのサブコードは S0 と S1 ですが、バイトとして値の定義はなくて、14bit の 00100000000001 と 00000000010010 です(後述するEFMの変換テーブルに無い値です)。これでセクタの先頭を検出するのですね。
P と Q は音楽CDで利用されています。R〜W も利用される(画像や文字情報等を表示)ことがあるようですけど省略。
・P は曲の頭出し用です。プログラムエリアでは曲間のギャップ(無音)で1となる、というか曲の先頭から遡って2秒分は1になるなどの細かい仕様があるらしいですが略します。
リードインでは0、リードアウトでは最初の 2〜3 秒は 0 で、その後は 2Hz でオンオフします。
なお、P は 12 バイトあるのですが、全てのビットが同じ値になるそうです。つまり1は 0xFF が 12 バイト続き、0は 0x00 が 12 バイトです。もったいなくない?
・Q は|CNT&ADR(1)|DATA(9)|CRC(2)|という構成です。「(2)」は2バイトの意味です。
CNT は 4bit のビットマップです。
ディスク種別? |0:民生用 |1:放送用?|(変更あり)
トラック種別 |0:音楽用 |1:データ用|
コピー可否 |0:禁止 |1:許可 |
プリエンファシス|0:なし |1:あり |(音楽用の場合)
ADR は 1 のとき、現在位置の情報であることを示します。
DATA は(ADR=1のとき)次の構成になります。値はBCDです。
|曲番号(1)|IDX番号(1)|経過時間(3)|00h(1)|絶対時間(3)|
CRC は誤り検出符号です。巡回冗長符号。
補足です。
CNT のディスク種別は、最初はチャネル数(2ch/4ch)だった気配(1982年頃は検討されていた?)がありますが、CD規格では(2チャネル形式のみで)このビットは「0:民生用、1:放送用」でした。これがCDRでは「1:予約」に変わりました。プリエンファシスは、CDRで「1:データ用」の場合はインクリメンタル記録の有無に。なお、CDROMもCDRも「0:音楽用」の場合は「CD規格(JIS S 8605)による」としています。
DATA の経過時間と絶対時間の3バイトは、MIN(00〜99)・SEC(00〜59)・FRAME(00〜74)です。FRAME はセクタ番号を 75 で割った余りですね(これが何んで FRAME?)。経過時間は曲内での時間で、絶対時間はCD全体での時間です。経過時間は曲間では値が減少して次の曲の直前で0となる。ふーん。
*
ここでCD規格で有名なEFM(Eight to Fourteen Modulation, 8-14 変調)が登場します。
サブコード(S0, S1 は除いて)とデータと訂正符号の各バイト(8bit)はEFMの変換テーブルにより 14bit にするのです。これはフロッピーディスクで出てきたFMやMFMと同じ様な役割です。
変換テーブルの一部を示します。
__ : _Binary_ : _EFM_14bit____
00 : 00000000 : 01001000100000
01 : 00000001 : 10000100000000
02 : 00000010 : 10010000100000
03 : 00000011 : 10001000100000
::
80 : 10000000 : 01001000100001
81 : 10000001 : 10000100100001
82 : 10000010 : 10010000100001
83 : 10000011 : 10001000100001
::
FC : 11111100 : 01000000010010
FD : 11111101 : 00001000010010
FE : 11111110 : 00010000010010
FF : 11111111 : 00100000010010
EFMの変換後の値は、1の連続は無くて、0の連続は(先頭と末尾を除き)2〜10 になっています。これはピットとランドの長さである3T〜11Tと関係があります。
なお、先頭と末尾の0の連続は最大で8個です(最小は0個)。14bit のうち1は 1〜5 個です。
*
EFMの変換後の 14bit の後にはマージンビット 3bit が付きます。同期信号とサブコードの S0, S1 の後にもマージンビットが付きます。
マージンビットを付けるのは、1の連続を避けて0の連続を 2〜10 に制限するためと、ピットとランドのバランスを取るためです。
例えば 0x81 が2個連続した場合に、14bit をそのままつなぐと1が連続してしまいますし、0x01 と 0XFD の場合は0が 12 連続してしまいます。
ピットとランドのバランスを取るのは、...線速度の検出で便利だから? 光ピックアップでピットとランドの反射光を単純平均して、しきい値にしているからかも。バランスは必要だよね。
マージンビットで取り得る値は000、001、010、100の4種類ですが、直前の2ビットと直後の2ビットの組合せで選択できるマージンビットは次のように制限されます。この中で「*」を付けた000は、前後と合せると0の連続が 11 個以上になって選択できなくなる可能性があるものです。
直前 直後: マージンビット
00 00: *000* 001 010 100
10 00: 000* 001 010
00 01: *000 010 100
01 00: 000* 001
10 01: 000 010
00 10: *000 100
01 01: 000
10 10: 000
01 10: 000
選択可能なマージンビットが2つ以上ある場合にはピットとランドのバランスを考慮して選択します。すなわち、カウンタ(ランドなら -1 してピットなら +1 する)を用意してカウンタが0に近づく方を選ぶのです。
*
マージンビットの選択に特例があります。前後と合せると0の連続が 10 個であっても選択を制限することがあります(この特例はCDROMの規格で明記されていて、CDの規格では見つかりませんでしたが同じはずです)。
例として、データが 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 が同期信号(10000000000100 000 0000010)と同じパターンになってしまいます!
これは 14bit 中に 0 が 10 連続する場合に発生します。そのうち1つはサブコードの S0 です。
10000000000100 (=0x59)
01000000000010 (=0x7C)
00100000000001 (=S0)
このような場合には、特例として000は選択しないことになっているようです! この特例があるから同期信号でフレーム先頭を検出できるのでした!(やっと謎が解けた!(だけど、同期信号とかEFM変換テーブルの設計ってヤバイくない?))
*
音楽用CD(Compact disc digital audio system)のJIS規格って、JIS S 8605-1993 があったんですけど! 廃止されてました(2016/03/16)。JIS S 8605 の元になった IEC 908 は IEC 60908 になって今でも生きているのですが。
CDROMとCDRのJIS規格(JIS X 6281, 6282)は JIS S 8605 を引用しているんですけど。どうしてくれるんですか ヽ(`Д´)
2012年に「JIS S 8605 を IEC 60908 に置き換える」とパッチを当てているのは確認したけど。JIS S 8605 を参照している文書は幾つかあるよ。日本レコード協会とか。
誰がどうして JIS S 8605 を廃止しようとしたのか。どういうことなのか関係者を探して問い詰めてみたい。JIS S 8604(カセットテープレコード)はまだ生きているのに。どうして!
*
EFM変換テーブルって、14bit だから 2^14 = 16384 から 256 個をどうやって選んだのか、ちょっと調べてみました。
まず、11と101を含むものを除くと 277 個で、更に0が 11 個以上連続するものを除くと 267 個。残り 11 です。
この 267 個のうち、先頭に0が9個以上連続するものが5個で、末尾に0が9個以上連続するものが5個あり、これを除いたようです。
残りは 257 個。そのうちの1つが S0 でした!(S1 は先頭の9個が0)
これで 256 個が選ばれたようです。割と推測し易いテーブルでした。
*
1フレームには 24 バイト分のデータ(D1とD2)が含まれるのですが、データはEFMで変換されて、更に色々追加されて、EFM変換後のフレームは 588bit (=73 バイト) になります。なんと3倍です。
|同期信号|サブコード|D1|C2|D2|C1| のビット数は、
(24+3) + (14+3) + (14+3)*12 + (14+3)*4 + (14+3)*12 + (14+3)*4 = 588bit
となります。
このEFM変換後の 588bit(CD用語でチャネルビットと言います)がCDに書き込まれるデジタルな情報で、ピットとランドの長さを決めるものです。すなわち、1がピットとランドの境目になり、連続する0の個数がピットとランドの長さとなります。
例えば、データが FEh と FFh の場合、マージンビットは010と001を選択したとして、ピットとランドは次のようになります。
<〜〜〜〜〜FEh〜〜〜〜>MGN<〜〜〜〜〜FFh〜〜〜〜>MGN
0001000001001001000100000100010001
! ! ! ! ! ! ! !
┏━━━━━┓ ┏━━┓ ┏━━━━━┓ ┏━━━┓
━━━┛ ┗━━┛ ┗━━━┛ ┗━━━┛ ┗
6T 3T 3T 4T 6T 4T 4T
CDのアルミ反射膜の顕微鏡写真を撮ったら、まずは同期信号を探します。11T+11Tなので一番長いピットとランド(またはランドとピット)のペアが目印です。
線速度が 1.25m/s なら1フレームは約 0.17mm です。なので 0.35mm 程の長さを調べれば1フレームが見つかりますね。運が良けりゃ、...2フレーム入っているかもです。
同期信号が見つかったら、そこから1フレーム分(588T)のピットとランドの長さをメモします。すると 24 バイト分(6 サンプル分)の音楽データが得られます。これを繰り返せばCDを読めるはずです。
電子顕微鏡って欲しいよね。
*
**
*** みんなでCDを読もうy、お、フジコlp!
**
*
カウンタがあるなら、その上限とか下限とか気になりますよね?
マージンビットとして000しか選択できない場合があるので上限は意外と大きいかも知れません。
フレームの中でビットが固定されているのは同期信号とサブコードの S0 と S1。同期信号は +11 -11 +2 でカウンタが +2 します。同様にカウントしていくと、
SYN+S0
100000000001000000000010 + 000 + 00100000000001 + 00x ... +2+3+8 = +13
100000000001000000000010 + 010 + 00100000000001 + 00x ... +2-1-8 = -7
100000000001000000000010 + 001 + 00100000000001 + 00x ... +2+1-8 = -5
SYN+S1
100000000001000000000010 + 010 + 00000000010010 + 0xx ... +2-1+8 = +9
100000000001000000000010 + 001 + 00000000010010 + 0xx ... +2+1+8 = +11
うーむ。+13 は -13 に反転することもあるからな。±0 なのかな。
EFM変換テーブルもカウントすると +8, +6, +4, +2, +0, -2, -4, -6, -8 になります。
この +8 となる7個は先頭が00なので、そのまま +8 にも、反転させて -8 にもできて、+6 も 16 個中 13 個が、+4 は 23 個中 17 個が00で始まるので、マージンビットで調整すればカウンタは平均的に0になりそう。
乱数生成したデータにマージンビット付けてカウンタの値を調べてみると次のグラフになりました。
横軸はカウンタの値で縦軸は頻度です。0を中心に ±55 程ですね。CD1枚で 10^9 バイトなので、余裕を持たせても ±128 あれば十分かな。
*
だけど心配なのは上限と下限だ。
0x81(10000100100001)のように、最初と最後が10と01だと、マージンビットは000しか選択できない。よって 0x81 が連続すると、
10000100100001 000 10000100100001 000 10000100100001 000
となり、カウンタは +3 されて、どこまでも大きくなり続ける。
同期信号とサブコードを含めても、データを巧みに選択すればカウンタを大きくできる(...、はずだ)。カウンタが 8bit とかで上限チェックをしていないと、いや上限チェックしていても誤動作するかも。
*
マージンビットを(CD規格に反して)操作すると、読み出せるデータは同じでも、CDプレーヤーで再生すると光ピックアップなどに異常に負荷が掛かる可能性ってあるかな。マージンビットでカウンタを0にする理由を考えると可能性はありそうだ。
データが同じなら音質は同じでは?...、というのはナイーブだったな。
誤り訂正符号で検出されないがCDプレイヤーに負荷をかける方法は他にも考えられる。わざと同期信号を壊すとか。
通常CDと高音質CDの2枚があって、リッピングしてデータが同じというだけでは不十分かも知れない。全てのチャネルビットを読み出して比較すべき。
...、と考えてみたけど。本気にはしないでね。でも「可能性」としては知らないのはダメと思う。
***
***
***
さて。
誤り訂正符号(Cross Interleaved Reed-Solomon Code、CIRC)です。
クロスインタリーブとか、リードソロモンとか、カッコイイのですがCIRCの詳細に入る前に少し余談を...。
ご年配な方はご存知か、ご経験があるかと思いますが。昔のパソコン雑誌にはプログラムリストが掲載されていまして。初期にはベーシックと機械語でした。当時のマイコン少年たちは(今は老、...いえなんてもないです)これを手入力していたそうです。今ならスキャンしてOCRですけど。
当然に入力ミスがあって、プログラムが動かない(暴走する)のでプログラムリストと見比べて間違いを探すことになります。目視で逆アセンブルして、「CD」や「C9」とか「21」とは何かを学んで機械語に詳しくなるのですが。
機械語のリストは 16 進数のダンプで、1行毎にチェックサムが付いていたり、無かったりしました(T_T)。チェックサムとは1行の各バイトを合計した値の下位1バイトです。チェックサムを比較して間違いを探すのですね。
でも2バイトを間違うと、例えば「.. 11 22 ..」を「.. 22 11.. 」と入力してしまうとチェックサムは同じ値になってしまいます。単に加算しているだけですから。
これでは入力ミスが見つからないと、改良されたのが「タテ・ヨコチェックサム」です。256 バイトを 16 行 16 列にして、縦横のチェックサムを計算するのです。誰が考えたのか未確認ですが1981年の雑誌(I/O)で存在を確認しました。ありがとうございます。
*
「タテ・ヨコチェックサム」には、誤り訂正符号について2つの要素があります。1つは 16 バイトについてのチェックサムという符号を計算すること。もう1つはタテとヨコでチェックサムが2つあることです。
CIRCにも2つの要素があって、それは「タテ・ヨコチェックサム」の2つの要素を強化したものなのです。チェックサム(各バイトを加算した値の下位1バイト)は、CIRCではリードソロモン符号(GF2の拡大体上の加算)に相当します。タテヨコは、クロスインタリーブに相当して、タテヨコでは縦の計算は 16 バイト間隔ですが、クロスインタリーブでは多少複雑になっている点が違います。
各々について解説しましょう。どちらかを先にしようかな。ウキウキ!
*
まずはリードソロモン符号。ですが Wiki のリードソロモン符号の項目が意外と丁寧な説明でコレを読めばもう十分かもです。んー
例えば、入力が [0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88] の8バイトの場合。
チェックサムは入力を加算して下位1バイトを出力します。合計は 0x264 なのでチェックサムは 0x64 です。
入力の1バイトが消えて [0x11, 0x22, 0x33, ____, 0x55, 0x66, 0x77, 0x88] となった場合は、チェックサムから残りのバイトを減算すると消えたバイトを求めることができます。
ですが1バイトの誤りだと、誤り検出はできますが、誤り訂正はできません。2バイトの誤りになると、先に説明したように、0x11, 0x22 が 0x22, 0x11 になるような誤りは検出もできなくなります。
そこで「重み付け」を導入します。適当に決めた値ですが [ 1, 2, 3, 4, 5, 6, 7, 8 ] を重みとした場合は(以下の数値は 16 進数です)、
11*1 + 22*1 + 33*1 + 44*1 + 55*1 + 66*1 + 77*1 + 88*1 = 264 ... 64
11*1 + 22*2 + 33*3 + 44*4 + 55*5 + 66*6 + 77*7 + 88*8 = D8C ... 8C
となります。このチェックサム Ver2.0 は、0x11, 0x22 を 0x22, 0x11 と誤ると、
22*1 + 11*1 + 33*1 + 44*1 + 55*1 + 66*1 + 77*1 + 88*1 = 264 ... 64 OK?
22*1 + 11*2 + 33*3 + 44*4 + 55*5 + 66*6 + 77*7 + 88*8 = D7B ... 7B ERR
誤り検出できるようになります。1バイトの誤りなら、0x22 を 0x23 と間違うと、
11*1 + 23*1 + 33*1 + 44*1 + 55*1 + 66*1 + 77*1 + 88*1 = 265 ... 65 ERR
11*1 + 23*2 + 33*3 + 44*4 + 55*5 + 66*6 + 77*7 + 88*8 = D8E ... 8E ERR
誤りが1バイトだという前提から、0x65 - 0x64 = 1, 0x8E - 0x8C = 2 から2バイト目が誤りで、正しい値は 0x22 だと訂正できます。
「重み付け」をもっと増やすと誤りの検出や訂正がもっとできるようになりますが、単純な加算だと少々限界があります。例えば、重みを 256 にしたらね、分かりますね。
これをもっと賢くしたのがリードソロモン符号です。
リードソロモン符号では、原始多項式 P(X) = X^8 + X^4 + X^3 + X^2 + 1 とその原始元 α(α は α^8 + α^4 + α^3 + α^2 + 1 = 0 を満たし、α^8 = α^4 + α^3 + α^2 + 1 となる)によって、...などの説明は Wiki を見に行ってね。加算や乗算はGF2の拡大体上で行うってだけの話だから。
計算するだけなら、[0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, ...] と [0, 1, α, α+1, α^2, α^2+1, α^2+α, α^2+α+1, ...] を対応付けて、加算は 16 進数側でビット毎の排他的論理和で行い、乗算は α 側で多項式の乗算で行い、途中で α^8 がでたら α^4 + α^3 + α^2 + 1 に置き換えることでできます。α^2 + 1 は、α^2 = 0x04 で 1 = 0x01 なので α^2 + 1 = 0x04 xor 0x01 = 0x05、つまり α^2 + 1 のままなのですが、α^2 + α^2 なら α^2 + α^2 = 0x04 xor 0x04 = 0x00 = 0 になります、...。
そんな感じで、CDのリードソロモン符号は 24 バイト(あるいは 28 バイト)を入力にして、4バイトの訂正符号を計算します。
C1の計算なら、
[α^ 0, α^ 0, ..., α^0, α^0, α^0, α^0],
[α^31, α^30, ..., α^3, α^2, α^1, α^0],
[α^62, α^60, ..., α^6, α^4, α^2, α^0],
[α^93, α^90, ..., α^9, α^6, α^3, α^0]
と言う4パターンの重み付けと音楽データと訂正符号の 32 バイトの積和が0となるように、C1の各バイトを定めます...、連立方程式を解いてね。訂正符号の各バイトにも重みが付いているところはポイントかな(ここ!試験にでますよ)。
この4バイトで2バイトの誤り訂正ができるのです。消失なら4バイトも訂正できて、3バイトの消失と1バイトの誤りも訂正できるとか。なので未定義な 14bit が発生してEFM復調でエラーが発生したらデータの消失と処理すれば、4バイトまで訂正できてオトクです。
エラー検出は重み付けの4パターンと 32 バイトの積和を求めるだけ。4つとも0ならエラー無し。
2バイトの誤りの場合はちょっと複雑ですけど。積和した値4つと、誤ったバイトの位置 i, j と位置 i, j の真の値との差分 Ei, Ej に関する式を4つ作れて、つまり式が4つで未知数が4つなので、この連立方程式を解くことで誤ったバイトの位置と正しい値を求めることができます。
式が4つ作れるとは。4つ目の重み付けの場合で説明しますと。32 バイトの正しい値を x31〜x0 とすると、[α^93, α^90, ..., α^9, α^6, α^3, α^0] と [x31, x30, ..., x2, x1, x0] の積和は0になります。つまり、
α^93*x31 + ... + α^(3*i)*xi + ... + α^(3*j)*xj ... + α^0*x0 = 0
位置 i,j のバイトが Ei,Ej だけ誤って積和が s3 になったとすると
α^93*x31 + ... + α^(3*i)*(xi+Ei) + ... + α^(3*j)*(xj+Ej) ... + α^0*x0 = s3
ですから、引き算をすると、
α^(3*i)*Ei + α^(3*j)*Ej = s3
となります。よって重み付け4パターンで次の4式ができるわけです。
α^(0*i)*Ei + α^(0*j)*Ej = s0
α^(1*i)*Ei + α^(1*j)*Ej = s1
α^(2*i)*Ei + α^(2*j)*Ej = s2
α^(3*i)*Ei + α^(3*j)*Ej = s3
あとは、Ei = ... に変形して他3式に代入、Ej も同様に消すと i,j の式が2つできて、i,j は 0〜31 の範囲を全数探索で。
4バイト消失なら、消失したバイトを変数 X1〜X4 と置いて連立方程式を解く。これは逆行列を掛けるだけ。
2バイト消失と1バイトの誤りなら、変数 X1, X2 と位置 i と差分 Ei の4つが未知数なので、連立方程式が解ける。
CIRCの誤り訂正方法は1982年にCDが発売された当時には、まだ研究の余地があったようで後年のCDプレーヤーでは改良されているようです(どう改良したか詳しくは分からなった)。
*
3バイトの消失と1バイトの誤りって訂正できるの? 考えたけど分からなかった。情報量的に無理では。
*
クロスインタリーブについて説明しましょう。
フレームに入っている音楽データはD1とD2の 24 バイトです。訂正符号はC1とC2の8バイトです。計 32 バイトになります。
ここでポイントとなるのが、符号化回路の中に遅延素子(要はバッファ)があって、入力したデータは直ぐは出力されず、出力されるのは過去の入力データであることです。最大で 108 フレーム過去のデータです。
その様子を図にしました(クリックして大きな図を見てね)
縦軸は1フレーム分の音楽データと訂正符号です。
0〜11 はデータD1、12〜15 は訂正符号C2、16〜27 はデータD2、28〜31 は訂正符号C1なのですが、見ての通り、D1とD2は [0, 1, 8, 9, 20, 21, 2, 3, 10, 11, 22, 23] と [4, 5, 16, 17, 24, 25, 6, 7, 18, 19, 26, 27] という順番に入れ替えています。訂正符号C2とC1の順番はそのままです。
横軸は遅延を表していて、0の列は現時点の値で、1〜109 の列は過去に入力された値です。
橙色のセルに音楽データが入力されて、C1とC2が計算されて、何フレームか遅延して(データは左から右のセルに移動する)黄色のセルに到着したら出力されます(EFM変換して円盤上のピットとランドになります)。
それから「1」が訂正符号C1の入力で、「2」がC2の入力です。計算後の訂正符号は0の列の「*」と「+」に入ります。
C1の入力「1」の半分は直ぐに出力されて、残りの半分は次のフレームで出力されます。なので連続する2フレームから 32 バイトを集めるとC1エラー検出ができます。
C2の入力「2」は次のフレームで1バイトが出力されますが、他のバイトはバラバラと遅延して最後のバイトは 108 フレーム後です。
そのため、108 フレーム分を待たないとC2エラーは判定できないのですが、データがこのように分散して出力されるため、円盤上で1フレーム分がごっそり消失しても訂正できるのです。C2エラー検出の対象となる 28 バイトは1バイト毎に別々のフレームに入り、しかもそのフレームは2〜4フレーム離れた位置になります。
これで 1.5 ミリ(8フレーム)のキズができても訂正可能だとか。これは2バイト誤りで処理した場合で、4バイト消失で処理するなら 14 フレームでもOK。
*
C1は「タテ・ヨコチェックサム」の横方向にあたり、C2が縦方向という感じですかね。縦横の解釈は逆かもと思案中。
*
CIRCの誤り訂正は種々の復号法があります。
信頼性の高い復号法として良く知られている方法は、ソニー社の初のCDプレーヤー「CDP101」(富士通が専用LSI「CX-7935」を開発)で採用された「スーパーストラテジー法」だそうです。
1986年6月号のアスキーの「CD−ROMのすべて 第3回デジタル信号処理」という記事で、CIRCの誤り訂正法をフローチャートにしているのを見つけました(月刊ASCII, VOL.10, #6, No.108, pp.153-164)。解説はちょっと難解気味で、この記事だけでは理解不能(誤記が致命的)。だけど図もカラーで綺麗だから見ているだけでも楽しいです!
なお、第1回は4月号で9月号が最終回(全6回の連載)です。
*
もうちょっと説明したいけど、文字数がヤバイ...
*
**
***
CDの標準的なエラーレート(Symbol error rate, SER)は、10^(-4) らしいです。
CIRCの文献を探していたら「10^4〜10^5 シンボルに1シンボル程度の発生頻度」との言及も見つけた(佐古, "CDの誤り訂正", 計測と制御, Vol28, No9, 1989-9)。シンボルとは1バイトのデータです。
エラーとは、音楽データと訂正符号の計 32 バイト中の誤ったバイト数です。同期信号とサブコードやマージンビットは対象外。つまりCIRCで誤り訂正の処理を行う際に見つかるエラーを対象としているのですね。
CDで発生し得るエラーとしては同期信号が見つからない等もあるはずですが。前後のフレームが特定できていれば、その間にフレームがあるはずと推定したりするのかな。
***
10^4 バイトで1エラーなら1秒間のエラーは 1/(10^4) * (32*98*75) = 23.52 個ですね。
CD1枚で 74 分 42 秒の音楽だと、(74*60+42) * (32*98*75) = 1,054,166,400 = 10^9 バイトだから、(10^9) / (10^4) = 10^5 = 10 万個!
こんなにエラーが出ているのか!、とちょっとびっくりだけど。リードソロモン符号が頑張って訂正しているのですね。
CIRCでエラー訂正できない確率は、エラーレートが 10^(-4) なら訂正後は 10^(-25) となるってグラフがあった。CD1枚で 10^9 バイトだから、ほぼ発生しない感じ?
***
CDとCD−Rでは比較しても意味は無いかもですが。ご参考までに。
JISに「電子化文書の長期保存方法」(JIS Z 6017:2013)と「長期データ保存用光ディスクの品質判別方法及び長期保存システムの運用方法」(JIS X 6257:2017)という規格があって、CD−RのC1エラー(1秒当たりのエラー数)について、初期記録時には 80 未満を、定期品質検査時には 110 未満を、「良好な状態」としています。JIS X 6257 は、ほぼそのまま ISO/IEC 18630 になったそうです(2023年)。
これからはデジタルな時代で紙の書類なんかはデジタル化をどんどん進めていくので保存方法にも規格が必要になったのですね。記録品質測定ドライブ(計測アプリ付き)や認証メディアなども販売中で、30 年とか 100 年の推定寿命!(...、ちょっとデジタル押しすぎか)
C1エラーは、1フレーム中の音楽データと訂正符号の計 32 バイトが対象で、この中に1バイトでも誤りがあれば1エラーとカウントします。
1秒で 75*98 = 7350 フレームありますから、80 エラーならフレームエラーレートは 80/7350 = 0.01088 = 1% 程か。
***
CDのエラーは、C1/C2/CUエラーという3段階で評価されるようです(もっと細かい分類もあるようですが)。このC1とC2はCIRCの誤り訂正符号のこと。
品質を測定できるドライブもパイオニア社から販売されている(昔はプレクスター社が販売していたドライブで測定できて、ツールも配布していたけど。生産終了)。
C1/C2/CUエラーについて調べて行くと、幾多のブログが見つかって、
・C1エラーは、普通に発生する。
・C2エラーは、C1でエラー訂正できない場合に発生する。少ない。
・CUエラーは、C2でも訂正できない場合。ほぼない。
といった感じでした。CDの品質を見ている方っているんですね。
C2/CUエラーが発生するのは、円盤の裏面側(ポリカーボネートが見えている側)に大き目のキズ等がついた場合などで、丁寧に研磨して修復できたというブログを見つけた。興味深い。専用(有料)サービスもあるよ。
*
1984年頃のLSIのピンレイアウトを見ていたら C2FL と C2PO というピンがあって、CUエラーはモニタできそう。CDROMドライブで使う場合に必要だからかな。見たいのはC1エラーなのだけど。
1994年頃のLSIでは MNT0、MNT1、MNT3 というピンがあって、C1/C2/CUエラーをモニタできるようだ。これはDACへのパラレル出力が消えてピンが空いたからかも。
*
**
***
CDは普通に読み取りエラーが発生するというのが世の常識でした。それで音質への影響はどうなのかをあちこち調べて(妄想も加えつつ)整理してみました。
*
CIRCで訂正できないエラー(CUエラー)が発生した場合、音楽CDとデータCDでは処理が違います。
データCDの場合はエラー出力して読み込みが止まる、あるいはリトライするのです。CDROMでは1ビットでも間違ったら困りますからね。
音楽CDでは訂正できなかったデータを、前後のデータを使って補完処理を行い、先に進むそうです。直前のデータをそのまま使う場合や前後のデータの平均値あるいは複数のデータを使って曲線で補完したり。
音楽ならデータは連続的に変化するので、ある程度の合理性はありますね。でも補完が発生すると(得に高音の)音質は劣化する。
単純化した例ですが、前後の平均値で補完するなら「○」のデータがエラーになると「●」として補完されるのです。音が消えてしまいます。
* ○ *
* * * ● * * * ・・・ 11.0125kHz の波形
* *
| | | | | | | | | | | ・・・ 標本化周波数 44.1kHz
ハイファイとは何なのか。
CIRCの文献を読んでいると、最後は補完処理するから大丈夫!完璧!といった感じで結んでいて、オーディオな方はがっかりするかも。
これがあるから高音質CDが出来たのかと最初は思いましたが、普通のCDでもCUエラーが発生するのは稀なことのようです。
*
C1エラーでも大量に発生すれば、誤り訂正符号で訂正されるとしても、音質に影響する可能性がある。...、あるのかな。
エラーが発生するとエラー訂正回路が動作する。エラーが増えれば回路の動作も増える。回路が動作すれば電源にノイズが発生するし、電力消費が増えれば電源電圧も揺れよう。するとスピンドルモータの回転が揺らいでジッターが増えたり、DACやアンプ出力にも影響するのでは(憶測)。
ともかく、ですね、オーディオ製品の電源やアナログ回路はとても繊細で、何等かの影響を受ければ音質劣化は不可避なり。
...、という説。実際はどうなのか。当てはまる環境もあれば、当てはまない環境もありそう。
分かる範囲のことは調べてみようとしたら以下のような感じでした
初期のCDプレイヤー(CDP101)では、デジタル信号処理は3つのLSIに分かれていました。そのうちの1つがエラー訂正処理用で、その消費電力は 720mW と、他の2つ(350mW+550mW = 900mW)と比べると無視できない大きさです。
1984年頃には1チップ化されて、CMOSで低消費電力(100mW!)ですが、エラー訂正処理はそれなりの割合を占めるのでしょう(推測です)。1982年と比べてエラー訂正処理が強化されているらしき文献もありました。
エラー訂正処理は、まずエラーの大きさ(エラーバイト数)を調べます。エラー無しなら、無しと記録して終了です。これをC1とC2で行います。
エラーが検出された場合に追加される処理は次の2つです。
・エラーしたバイト位置と正しい値を求める(1バイトなら簡単そう)
・メモリー(SRAM)を書き換えに行く(えー)
1チップ化されたLSIでもSRAM2Kバイトは外付けで、SRAMのデータ書き換えのためにアドレスバス 11bit とデータバス 8bit を駆動するのです。LSIとSRAMの距離は数センチでも、バス(とSRAM)が動くなら電源に影響しますね(オシロで厳密に測定すれば違いが見えるレベルで)。
1フレームのSRAMアクセス数(アドレス生成回数)は、EFM復調データの書込みで 32 回、DACへ送信するための読取りで 3*12=36 回、それからエラー訂正で最大 129 回(最小でも 32+28=60 回?)。つまり、エラー訂正が無ければ 32+36+60 = 128 回で、エラー訂正があれば最大 32+36+129 = 197 回。
エラー訂正で(最大)1.5 倍に増える。...、増えることは確か。
電源の乱れがデジタル信号処理用LSI自身や光ピックアップなどのアナログ部分に影響すれば更にエラーも増えるかもです。サーボの制御のためのセンサー回路に影響すれば制御が誤りそうですよね。
デジタル信号処理用LSIの後段にはデジタルフィルター(オーバーサンプリングかな)とDACのLSIとアナログ出力の回路が並んでいて、この頃の基板って片面か両面のプリント基板で電源やグランドはパターンでつなげていたでしょうから、これらの電源へも影響がありそうではありますね。聴いて分かる程の違いかは未知ですけど。DACの基準電圧やクロックに影響して、出力が揺れたりジッターが増えたら音質の差が分かるかも。
2008年ならSRAM2Kバイトくらいなら余裕でチップ内に作れたですし、多層基板の1層を使ってグランドプレーンを設けていたでしょうし。デジタル部とアナログ部とを分離しているはず。エラー訂正処理がどこまで影響するのか分からないですね。
あー、でもオーディオな方は1980年代のCDプレイヤーを大事に使っているのかも(今でも使ってますよね)。
本当のところは実機を拾ってきて測定しないと、ですね。
*
読み取りエラーとは関係なく、CDの物理的な品質が悪ければ音質は悪くて当然。...、なのかも。
円盤が反っていたら、あるいは円盤が傾いた状態でセットされたら、上下に動くトラックにピント合わせが必要になる。光ピックアップはランド部分に焦点を当てないとピットとランドを正しく検出できないので、フォーカス・サーボで円盤(の反射層)の上下のブレを追うことになります。
CD規格では、反射層の(上下方向の)偏位は 500Hz 以下では ±0.5mm(実効的には 0.4mm)未満、500Hz 以上では ±1µm 未満となっています。なお、光ビックアップの焦点深度は約 ±1.9μm だとか。
円盤は1秒でせいぜい9回転なので、円盤の反りで発生するブレは 10Hz 以下。円盤が1回転する毎に光ビックアップが上下に 0.5mm(500μm) 動いて ±1.9μm の精度で追跡する?
円盤が反っているのを見たことはないけど、コンマ・ミリ位ならあるのかも。
あるいはCDが偏芯(中心がズレている)していれば回転毎にトラックは左右に動き、光ピックアップはこれを追従しないといけない。トラック・サーボなどを動かして光ビックアップの位置調整が必要となります。
CD規格では、トラックの半径方向の変位は 500Hz 以下では Peak-Peak で 140µm 未満。トラックの幅は 0.5μm で、トラッキング誤りの実効値は 0.03 μm 未満とか。
CDプレイヤーのテスト用の円盤には、偏芯量が ±280μm のものまでが用意されていて、ここまで用意されているということは規格外れなCDも想定されていることを意味する、...のかは不明ですけど。
CDの回転数の調整は、CLVサーボ(回転サーボ)で行うのですが、ピットとランドの長さをPLL(Phase Lock Loop)を通して1ビット分の時間(チャネルビットレートと言う)を検出し、基準クロック 4.3218 Mbit/s に同期するように速度を制御します。だから、ピットとランドが正しく形成されていないと、CLVサーボが動いて円盤の回転数が揺らく(チャネルビットレートも周波数変調されてしまう)。
CD規格では、チャネルビットの位置ジッタ(時間誤差)は変調周波数が 1kHz なら 200ns、2kHz なら 100ns で、4kHz 以上では 50ns (Peak-Peak) と定めています。
更に「(マスター作製時のチャネルビットレートの周波数変調は)CDプレーヤでの再生時にクロック復元で問題を起こす可能性がある」とも言及されています。
レッドブックでは 35ns 以下(望ましくは 25ns 以下とも)と規定しているそうです。
なお、チャネルビットレートの基準クロックの 4.3218 Mbit/s という値はCD規格では見当たらず、CDROMの規格で見つけた。何故?
サーボが余分に動くと消費電流が増えるので、...。以下同文。
光ビックアップがトラックの中心からズレていたり、ピントがズレているのを検出したら、光ビックアップの位置を調整するのですが、ズレを検出してから調整するので、その間ピットとランドの検出に偏りが出て、エラーレートにも影響することも考えられますね。
CDの物理的な品質がすごく酷ければ音質に影響することはありそうと感じました。これがファイナルアンサーなのか?
*
**
***
どなたかのブログで Blu-spec CD のエラーを調べたグラフがあって、普通のCDよりC1エラーが少ないようです。だから高音質なのかは分からないけれど。CDとして(エラーが少ないという意味で)品質はよさそう。
なのに、高音質CDの発表の際にはCDの読み取りエラーの実情の説明がないのはどうしてだろう? C1エラーなどは音質に関係しないからかな。...、関係しないのかも。
C1エラーが1秒に 20 個も発生するならエラー原因が何かを調べるべきだろうね。モータや、レーザーとセンサの安定性とか。PLLとかサーボ制御とかの回路を調べてみたいね。当時のCMOSゲートって 10ns 程の速度で動いたのかな?
***
高音質CDが本当に音質が良いのか、あるい普通のCDの音質が悪いのか。もっと解説があって良いと思った(実は論文発表しているのを探せてなかったのなら申し訳ないです)。
Blu-spec CD の公式ページでは「極微細加工でマスターテープクオリティを忠実に再現」や「収録された一音一音を最大限鮮明に再生」と言う説明がありますが何のことか分からなくて。音源は磁気テープなのかよ?
でもじっくり読むと。CDの製作のための原盤やスタンパーの精度を向上させて、CDの基盤の材質も高分子ポリカーボネート採用を採用して、ピットを正しく形成して...、これによってチャネルビットの位置ジッタを低減させたと解釈できる。これが要点なのかも知れません。
Blu-spec CD2 では、通常CDは 20ns のジッターであるのに対して、11〜14ns 程のジッターであることを示すグラフが示されています。ジッターの定義や測定条件が明記されていませんけど。
それでも...、ですね。ジッターが 20ns から 10ns になると音質にどう影響するのか? そもそも影響するのか? DACのクロックのジッターに拘るのは分かる気がするけど。
1ビット分の時間はチャネルビットレートから 1/4321800 = 231.380 ns なので、ジッターが 20ns ならもう十分綺麗では。
チャネルビットレートが極端に変調されると問題が生じる可能性はあるのでしょうが。ジッターが 20ns なら変調はほぼないのですよね? どうなんですか?
多少の変調があったとしても、ですね。CDのピットとランドを読み取ったらEFM復調してSRAMに保存して、CIRCで誤り訂正処理をするために 108 フレーム分の遅延があり(エラーがあったら訂正して)、それが終わったらDACに向けて送り出すのです。チャネルビットの位置ジッタって、DACにデータが届く頃には関係無くなってないかな。
うーむ。ジッタについてもっと考えるべきか。
***
チャネルビットの位置ジッタの影響について、気になるのは、まず1つは、DACに送るデータの読出し処理とEFM復調の書込み処理、エラー訂正の読み書き処理で、SRAMアクセスが入り乱れて発生すること。
DACへは1フレームで6回、16bit のデータを2つを 1/44100 = 22.675μs 毎に送るはず(システムクロックをもとに動く)。そのためにSRAMから4バイトを読み出す(C2ポインタも2バイト読み出すので計6バイト)。これが最優先。
システムクロックは、水晶発振器 8.4672MHz(= 44100*192)を4分周した 2.1168MHz(= 44100*48)で、1クロックは 1/(44100*48) = 0.472μs。48 クロックで 22.675μs(=1/44100)になる。
DACへは(シリアル出力の場合)、この 48 クロック中の(1〜8 は休み)9〜24 で右チャネルの 16bit を出力、(25〜32 は休み)33〜48 で左チャネルを出力する。つまり8クロック毎(3.779μs)にSRAMから1バイトを読み出すようだ(推測です。3バイト連続して読み出す可能性もあり)。この読出しが間に合わないとDACでアンダーフローが発生して音が途切れる(あるいは補完処理が入る)。
EFM復調したデータは、1フレームで 32 回、同期信号とサブコードの時間を除いて、(14+3)/4321800 = 3.933μs 間隔でSRAMに1バイトを書き込む。この間隔はチャネルビットレートに依存するので変動がある。
1フレーム分のデータが揃ったら誤り訂正処理を空いた時間で行う。優先度は最下位。だけど、60 バイトを読み出す。エラーがあれば更に増える。
各処理の優先順位付けはあるとしても、どれかの処理中にSRAMアクセス要求が入ったら、処理終了まで保留されるはず。EFM復調したデータの書込みタイミングはチャネルビットレートの変調により前後に揺れるのだから、保留が発生するのは不可避だろう。
SRAMへのアクセス時間は M5128-20 などの型番から 200ns(0.2μs)と推測。前処理(アクセス要求からアドレス計算など)も合わせると(1クロックで 0.472μs だから)1〜2 クロックかな?
DACへの読出し処理は 1〜2 クロックの保留が、EFM復調したデータの書込み処理は 1〜4 クロックの保留があるかも。
*
ああ。SRAMへのアクセスは最小で 128 回、エラーがあれば最大 197 回。だからSRAMアクセスが2クロックではヤバイ。1フレームの時間内(136.054μs)に処理できない。なのでSRAMアクセスは1クロックのはずだ。忙しそうだけど、大丈夫だろう(バグがなければねー)
***
ちなみに、1フレーム 588T の時間は 588/4321800 = 136.054μs で、DACに6サンプルを送る時間 (1/44100)*6 = 136.054μs と一致する。当然ね!
チャネルビットレートの基準クロック 4.3218 Mbit/s とは 4321800 = 44100*49*2 なのでした。それから 588 = 6*49*2 です。
だから 588/4321800 = (6*49*2)/(44100*49*2) = 6/44100 です。
それからシステムクロックは 2.1168MHz(2116800 = 44100*48)で、この 48 は6バイト(48bit)と何か因縁があるのでした。
このような 48 と 49 にそれぞれの意味を見つけるまでの間のことですが。システムクロックは 2.11MHz という記載を見る度に 2.16MHz の誤記だろ? と疑ってました(...、だって)。
***
もう1つ気になるのは、SRAM上でデータのオーバーフローあるいはアンダーフローが発生する可能性があること。
チャネルビットレートが変調されていて、これにCLVサーボの制御が追いつかないと、SRAM上のデータが増えたり減ったりする。DACへの読出しはシステムクロックで一定だけど、書込み速度が揺れるから。
SRAMの容量2Kバイトでは 108 フレーム分をバッファするだけで一杯で、±4フレーム分しか余裕がない。4フレーム分ということは、チャネルビットレートが +5% したら 80 フレームでオーバーフローになる。+20% なら 20 フレームだ。時間にすると (588/4321800)*20 = 2.721ms。
SRAM上でデータのオーバーフローが発生して4フレームのデータが失われると、1フレームに6サンプルなので、4*6/44100 = 0.000544s の音飛びとなる。...、円盤上での4フレーム消失なら誤り訂正符号で訂正できるのだけどクロスインタリーブを解かれた後の4フレームだから無理。
CLVサーボの制御について調べてみよう。
*
まず最初に、基準クロック 4.3218Mbit/s の源が見つからなくてショック。
1984年頃のLSIの水晶発振器は 8.4672MHz で、これを2分周しても 4.2336MHz です。基準クロックと微妙に違う値にしかなりません。
ではどうするのかと悩んでいたら、このLSIでは1フレームの時間で比較することが分かりました。すなわち、
1フレームの時間 = 588*Tchn ≒ 576*Tclk = 0.136ms(7.35kHz)
という関係から Tchn を 588 分周して、そのHの時間を Tclk 単位でカウントします。そして揺れる Tchn をスピンドルモータを制御して、Tclk に同期させるのです。
ここで Tchn はピットとランドから求めたチャネルビットレートのクロックで、Tclk は水晶発振器の 8.4672MHz を2分周したものです。
Tchn = 1/(44100*49*2) = 231.385ns
Tclk = 1/(44100*48*2) = 236.205ns
Hの時間が 576/2 = 288 の場合は同期が取れていること、288 より少ない場合は回転が速いこと、288 より多い場合は遅いことを意味します。図にすれば分かるよね。
┏━━━┓ ┏━━━┓ ┏━━━┓ ┏━━・・・速い
┛287┗━━━┛287┗━━━┛287┗━━━┛
┏━━━━┓ ┏━━━━┓ ┏━━━━┓
┛288 ┗━━━━┛288 ┗━━━━┛288 ┗━・・・同期!
┏━━━━━┓ ┏━━━━━┓ ┏━━・・・遅い
┛289 ┗━━━━━┛289 ┗━━━━━┛
Hの時間を 0.136ms 毎に調べて、チャネルビットが同期から外れた場合には、288±8 まではスピンドルモータを段階的に調整するようです。それ以上は加速あるいは減速のみ。±8 ということは ±(8*0.236) = ±1.889μs 以内の変動。
チャネルビットレートが +20% に変化してもSRAMがオーバーフローするまでに 2.721ms だから余裕があるのかな? これはモータ側の仕様次第。モータードライブLSIの調査が必要! それからチャネルビットレートはPLLを経由して決まるのだからPLLの仕様も重要。
*
CDは内側と外側では回転数(rpm)が違います。線速度が 1.2m/s のCDなら、内側 458rpm で外側 197rpm です。2倍以上違うのです。
チャネルビットレートは円盤上のピットとランドの長さ3T〜11Tの単位「T」のことです。4.3218Hz と定義されていて、時間に直すと 1/4321800 = 0.231μs です。線速度が 1.2m/s なら1Tの長さは 0.231μs * 1.2m/s = 0.277μm となります。3Tは 3/4321800*1.2 = 0.832μm で、11Tは 11/4321800*1.2 = 3.054μm です。
CDで音楽が記録される部分であるプログラムエリアは半径 25〜58mm の範囲です。トラックピッチは 1.6μm。よって (58-25)*1000/1.6 = 20625 回転する。1回転につき、1.6μm*2*3.14 だけ長くなり回転数は微減。n 周目の回転数を (1.2*60)/(25+n*0.0016)*2*3.14)/1000 と計算すると、25mm(n=0) と 25.0016mm(n=1) なら回転数は 458.598rpm と 458.569rpm で、0.029rpm 減る。0.006% の減速だ。これが通常。
チャネルビットレートに ±10% の変調があると(231ns±23.1)、線速度が ±10% になったのと同じで、25mm なら、
1.1*(1.2*60)/(25*2*3.14)/1000 = 504.458rpm
0.9*(1.2*60)/(25*2*3.14)/1000 = 412.738rpm
に相当する。こんなのに追従するの? 線速度が 1.4m/s のCDならもっと速くなるよ。
*
CLVサーボの方式はメーカやLSIによって違います。SRAMのサイズや同期の検出方式などは違うのです(メーカはほぼソニー社だけしか見ていませんけど。他の会社も作ってますけど)。
主に1990年代のLSIを調べて見ました。
水晶発振器は、1991年頃には 16.9344MHz や 33.8688MHz と高速になっています。倍速再生モードのためでしょうね。これに誤り訂正処理が追いつくのかと感心(10年弱で2倍の速度!)。2000年頃でも 33.8688MHz のままなのでクロック的にはこれで十分なのかな。
SRAMは4Kバイトに増加して、±28 フレームの余裕ができました。もちろんLSIに内蔵です。でも2KバイトのLSIも開発されていて2Kと4Kが混在。ジッタ対策が十分なら2Kバイトで十分だけどマージンが大きい方がカタログスペック的に訴求できるから? 2000年頃なら4Kバイトのメモリってコストには関係ないのだろうし。
DRAM(外付けで16Mビット)を利用できるショックプルーフメモリに対応したLSIを見つけました。MDの音飛び対策を思い出しますね。16Mビットは512Kサンプル相当だから10秒位をバッファできます。
音飛び対策機能付きのポータブルCDプレーヤーは1992年頃には発売されていたようです(これ用のLSIが見つからなかったけど)。バッファできるのは3秒。
その後、1995年に10秒ESP、1997年に連続音飛びキャンセラESP2が発売。
秒単位でバッファするなら、数十ナノ秒程度のジッタを気にするとか笑えない?
同期の検出は1991年頃には 132.3kHz(7.558μs)毎となっていて、7.35kHz(136.054μs)の 18 倍です。更に1995年頃には 264.6kHz(3.779μs)毎と 36 倍です。倍速や4倍速再生のドライブ用ですかね。
Hの時間は、カウントする単位は Tclk で、132.3kHz 毎なら(576/18 = 32 なので)n*236ns, n=0〜31 です。n=16 のときが同期が取れている状態です。264.6kHz 毎だと n*236ns, n=0〜15 となりますが元々、±8 までしか段階に扱っていないので(ギリギリだけど)十分なのでしょう。
でもこれだと...、132.3kHz(7.558μs)毎なら、
32.666 チャネルビットの時間 = 32.666*Tchn ≒ 32*Tclk = 7.558μs
となって割り切れない。綺麗に割り切れる倍数は 49 チャネルビットの時間が最小。これはどうするのかと資料を読み直していたら 18-TIMES OVERSAMPLING FILTER という回路があって、Tchn を 18 倍にしているようでした。あとで調べよう。
それから、デジタルサーボ回路を内蔵したLSIも開発されていて(カタログスペックしか分ってないけど)スピンドルモータを精密に制御できるみたいです。
*
1995年頃にはCAV再生で Frame Jitter Free とするLSIが開発されています。CLVではなくてCAVですよ!
ジッターフリーって素敵ですよね。****かも知れないけど。
***
2000年を過ぎた頃には、CDRやCDRWドライブで「フルCAV記録」「ゾーンCLV記録」「パーシャルCAV記録」という方式が発表されています。この頃の速度は読出し40倍・書込み20倍とか。
CLVだと内側の回転数が最大で、余りにも速く回すと円盤がガタついたりして書込みが厳しくなるので、回転数を一定にしたのがフルCAV記録。
CLVとCAVの良いとこ取りをしようと、場所を分割して速度を切り替えるのがゾーンCLV記録。CAVで始めて線速度が上限になったらCLVにするのがパーシャルCAV記録。内側は速度を押さえて途中から全力で回すのは同じ。詳しくはググって!
***
1990年代を通じて、SRAMは4Kバイトに増加、CLVサーボの精度も向上、2倍速〜40倍速などの再生モードが出来たりしてデジタル信号処理は高速化、円盤の回転が多少不安定でも大丈夫なくらいに改良されていた。
チャネルビットの位置ジッタについても調べてみたけれど、2000年頃には克復されていたのでしょうね。データとしてはエラー無しで正しく読み出されるのだから当然なことですね。
CDプレーヤー(のデジタル信号処理LSI)はどんどん改良されていますね。40倍速のCAV再生に耐えられるデジタル信号処理LSIなら音楽CDの等倍速の再生処理は楽勝でしょう!
だとすると高音質CDとは何なのか? 何故に2008年頃になって出現したのか? 2002年頃の「コピーコントロールCD」の反省をしたのか?
何か音質に影響するCD製造上の要因を特定できて音質を改善できたのか? あるいは、...!
それを正直に全てを発表する必要はないのでしょうけれど。でも謎な感じですね。
やはりアマゾンの奥地に行かなければ、...。
行かなければ...。
行かな...。
...。
*
**
***
ところで、高音質メモリーカードってご存知ですか? ...、ここまで読まれた方ならご存知かもですが。
ソニー社が、高音質再生のためのメモリーカードとして microSDXCカード「SR-64HXA」を2015年3月5日に発売しました。ソニーストアでは18,500円。ハイレゾ対応ウォークマンに最適とか。既に生産終了していますが、在庫があるようで今でも購入できるようです。29,800円でね! 普通のSDXC64Gなら2千円だせば買えるよね。
ググるとレビュー記事が幾つが見つかります。ファーストインプレッションで音質の違いを、とか。ブラインドテストで音が違うことは確かだ、とか。
読んでいて、ええっー...と思うのですが、人が聴いて音が違うと感じるなら違うのでしょうね。...としか。
でもアマゾンのカスタマーレビューは大喜利状態。海外では酷評とか。オーディオ・オカルトをソニーが?と大騒ぎ。
ソニー社の製品ページでは「ファイル読み出し時に発生する微弱な電気的ノイズ」が悪影響を与えることを指摘していて、この電気的ノイズを低減したそうです。従来品と比較する周波数解析のグラフもあります(目盛軸に値がないけど)。SDカードの近傍磁界を測定したって。
従来品と違うのは分かったけど。それで高音質なのか。スピーカーの出力で違うのか? ハイレゾなPCM録音機で録音してデータを比較するとかすれば、...と思ったけれど。
これで分かるなら誰か確認しているはず。音質の違いを測定するのは難しいのか。
SR-64HXA は仕様によると動作電圧 2.7~3.6V で消費電流は最大 200mA。SD規格に準拠した値ですね。SDカードって思っていたより重い。SSDの方が低電力かも。
SDカードの消費電力(の動的な変動)の実際は、メーカーや製品毎によって幾らか違うでしょう。これが音楽プレーヤーのアナログ回路部の電源電圧などにどう影響するかはプレーヤー次第で、ポータブルなDAP(Digital Audio Player)なら音質に影響がある機種があっても不思議ではない。
けれど、それは、つまり、...その音楽プレーヤーの作りが甘いことを意味しないかな?
ソニー社へのインタビュー記事によると、音楽プレーヤーにSDカードは入れないで内蔵メモリから再生する方が音質は良いらしいですwww
*
まぁ、パソコンにSDカードを差してUSB−DACで再生する構成だと影響しないでしょうね。パソコンの出すノイズの方が大きいだろうから、うちには関係ないや。
...、と思っていたら、USB−DACで再生する場合でも、HDDとSDDでは音が違うって記事を見つけた。自前の再生環境では分からなかったけれど、専門家のしっかりとした環境だと違いが分かるとのこと。
ファイルをコピーすると音質が変わるとかも。ネットで転送してはならぬ、という主張も見かけた。
WAVファイルをケーブルを通して転送したら、音質が劣化するの? 劣化するから対策を取っていますと言う紹介記事があって。デジタル信号にはジッタやリップルなどがあるから、それらのノイズを除去して0と1だけの信号を送る...、そうです。実際は何か別のことを説明しているのかも知れないけど。何言ってるのか理解できない。
倉庫から取り出したばかりの鮮度が高いアナログのオリジナルマスターテープとか。デジタルアーカイブのマスター音源はコピーを繰り返すと鮮度が失われていく可能性が多いとの言及も。
磁気テープは経年劣化するから鮮度と表現するのかな。清潔で静かで暗くて安定した室温で保存されていたんでしょう。磁気厳禁で。定期的に巻き直しもして。当時のマスターテープを音源に今の技術でCDにしたら音も良さそうな雰囲気。
それはいいけど、デジタルはー。
もしかしたら、本当かも知れないと思うとデジタルでもオーディオの世界って怖いです。
*
**
***
ところで、高音質CDRって、...。いえ何でもないです。1枚8000円で高音質。2002年頃にもやってたんですね。電源は東京電力さんと一緒に。
*
**
***
まとめです。
普通の音楽CDを普通のCDプレーヤーで再生すると、CIRCでエラー訂正できなくて、データを補完して再生するからCDとして期待される音質が出ていないことも(稀には)あったのかも知れません。エラー訂正できても、エラー訂正処理がアナログ回路部に影響して音質が悪化した可能性も(得に初期のCDプレーヤーなら)あったのかもです。でもこれらは多分、高音質CDには関係していない印象を受けました(個人の感想です)。
CIRCのエラー訂正とは関係なく、得にチャネルビットの位置ジッタが酷いと(C1エラー無しでも)データが破損してしまうことは想定できることでした。昔のSRAMが2Kバイトの頃だとオーバーフローやアンダーフローの心配があったようです。けれども、通常CDと高音質CDで同じデータが読み出せるのだから、この心配は解消されているようです。多分ね。
エラーにはならなくても、円盤が反っていたりピットが歪んでいるような不良なCDだと、サーボモータが過剰に動作して、消費電力や電源へのノイズによってアナログ回路に影響し、音質が劣化する可能性も、CDプレイヤーによっては、ありそうです。
音楽CDには暗黒時代があったそうで、これが何を意味するのか実態は分っていないのですが、音質が悪くなっても止むを得ない酷いCDが量産されていたのかも知れません。粗悪ディスクが、主に輸入盤で、規格外か規格ギリギリのCDが出回っているとの言及も見かけた。あと廉価版ね。
CDプレイヤーは1982年の CDP-101(定価 168,000 円)と CDP-5000S(定価 1,800,000 円)から初まり、様々が改良があって毎年のように新機種が(1台 20 万円超の機種も)発売されていて、音質も良くなっていったと思われます。
ですがCD自体に限界があっては、...という可能性。憶測ですけどね。
高音質CDはそんな再生環境への救済策として意味があった可能性が考えられます(え? 価格上乗せで、再発売、と言う商法?...、そんなことはないよ;多分)
いずれにしても可能性止まりの話ばかりでスマヌ。
現在ならもう大丈夫かな。1曲分を先読みして再生するとかできるよね。と言うか全曲読み出してパソコンから再生するかな(私的使用の範囲内でね)。
昔は SHM-CD の音の違いに驚いたのに、10 数年後に聴き直したら普通のCDとの違いが分からなかったという記事があった。それはきっと今のCDプレーヤーは高品質で、ピットの歪みなんかに影響されないで読み取ったデータを正しく再生できるから、普通のCDでもCDとして期待される音質で再生できたのかもー、と思いました。はい。
***
調査を続けていたら勘違いに気がついて修正しています。多分まだあると思う。
***
加筆していたら長くなったので、どこかで整理しますね。
***
間違いの指摘とか疑問とか、ご意見・ご感想とかありましたら、どうぞ感想欄に!
***
2024.10.31 推敲と加筆。
2024.11.3 推敲と図の差替
2024.11.11 推敲と加筆。分割しないと。
2024.11.13 推敲と加筆。ああ文字数が。
2024.11.17 推敲。
2024.11.20 推敲。