ソフト S/PDIF トランスミッタ (3)

S/PDIF のブロック/フレーム/サブフレーム構造の図を下に示します。
図の左側が時間的に先に、右側が時間的に後に送信されます。
これは伝送すべきオーディオ・データと、それに付加する制御/情報ビットについて表したもので、実際に光ファイバなどを通じて送信されるビット列としては、後で説明する BMC (Biphase Mark Code) の規則に従って、これを変調したもの (ビット・レートは 2 倍) になります。
ステレオ 2 ch のオーディオ・データ・ストリームは、各チャネルごとに「サブフレーム」として符号化されます。

サブフレームの先頭には同期のためのシンボル (プリアンブル) が付加され、第一サブフレーム (第一チャネル、ステレオの左チャネル) と、第二サブフレーム (第二チャネル、ステレオの右チャネル) とが区別できるようになっています。
「B」と書いてあるのがフレーム 0 (ブロックの先頭) および左チャネル (第一チャネル) に対応するサブフレームに与えられるプリアンブルで、「M」と書いてあるのがフレーム 0 以外の左チャネル (第一チャネル)、「W」と書いてあるのが (すべての) 右チャネル (第二チャネル) に対するプリアンブルです。
「サブフレーム」ふたつで、左右チャネル揃ったひとつのオーディオ・サンプルに対応する「フレーム」を構成し、192 個のフレームの集合で 1 「ブロック」を構成します。
各サブフレームを構成する 32 ビットの内訳は次のようになっています。

  • プリアンブル (4 ビット相当)
  • AUX (補助) データ 4 ビット
  • オーディオ・データ 20 ビット
  • UVCP 各 1 ビットのフラグが計 4 ビット

プリアンブルの「4 ビット相当」というのは、同期の目的のために、BMC の変調規則を逸脱した (変調後のビット幅で) 8 ビットのパターンが使用されているので、変調前のデータとしては「0」とも「1」とも表現できないためです。
オーディオ・データとしては、デフォルトで 20 ビット分のスペースが確保されており、たとえば、送信するオーディオ・データのビット幅が 16 ビットで 20 ビットに満たない場合は、足りない下位のビットに「0」を埋めて送ることになっています。
そして、AUX データ用として 4 ビットが確保されており、(規格では用途を特定しない) 独立なディジタル・データ 4 ビットとして使用することもでき、オーディオ・データの下位 4 ビット拡張部分として、計 24 ビット・オーディオ・データとして扱うこともできます。
ただし、民生用のチャネル・ステータス (後述) としては、当初の規格で定義されていた 32 ビットの中には AUX ビットの使い方に関する情報は含まれておらず、後に 10 ビット追加して 42 ビットまで拡張された規格の拡張部分で始めて明確にオーディオ・データの有効ビット数が定義されるようになりました。
AUX ビットも含め、24 ビット・オーディオ・データとして見たとき、データは LSB ファーストで伝送されます。
オーディオ・データの MSB の後に、V, U, C, P の各フラグがこの順で並びます。
V ビットは Validity を意味し、「0」のときオーディオ・データが有効であることを示し、「1」の場合には有効性に疑問が付く状態であることを表します。
これをもう少し具体的に言うと、CD などの記録メディアから再生する場合、エラー訂正可能だった場合に V=0 となり、エラーが多すぎて訂正不可能で「エラー補正」になった場合に V=1 となります。
「エラー補正」とは、オーディオ信号の場合は隣接サンプル間の相関が強いので、エラーのために正確な値が不明となったサンプルでも、隣接するサンプルの値から補間して「正確ではないがそれほど悪くもない値」を推定することができ、この操作を「エラー補正」と呼んでいます。
記録再生プロセスではない、波形発生の場合には常に V=0 となります。
U (ユーザー) ビットはユーザー定義の用途に、C (チャネル・ステータス) ビットはシステムで用途が定義されているビットで、両者ともにサブフレームごとにフレーム番号の順に集められ、それぞれ計 192 ビットのデータとなります。
サブフレームはふたつあるので、チャネル・ステータスは計 384 ビットになりますが、基本的にふたつのチャネル・ステータスは同一で、同じ値が入ります。
例外はチャネル番号を指定するフィールドで、指定する場合にはそれぞれ「1」と「2」となり、そこだけが違います。
チャネル番号として「指定しない」ことを表す「0」にすれば、完全にふたつのチャネル・ステータス・データは一致します。
民生用としては、チャネル・ステータスは当初の規格では先頭の 32 ビットのみが用途が定義されており、残りは未定義でした。
その後、10 ビットが追加され、42 ビットまでは定義ずみとなりました。
ちなみに、チャネル・ステータスがオール・ゼロだと、「サンプリング周波数 44.1 kHz」、「コピー禁止」を表す状態となります。
これを「サンプリング周波数 48 kHz」、「コピー可」の状態にするにはチャネル・ステータスの中の 2 ビットを「1」にする必要があります。
P (パリティ) ビットは b31、つまりサブフレームの最終ビットに位置し、サブフレームの「パリティ」が偶数パリティとなるように値が調整されます。
「偶数パリティ」とはサブフレームの中の「1」の数が偶数になることで、サブフレーム全体のビット数も偶数なので、同じことですが、「0」の数も偶数になります。
フレームはサブフレームの集まり、ブロックはフレームの集まりなので、当然フレーム単位、ブロック単位でも偶数パリティになります。