修正周波数変調(MFM)は、ランレングス制限(RLL)ラインコード[ 1 ]であり、ほとんどのフロッピーディスクと一部のハードディスクドライブでデータをエンコードするために使用されます。ハードディスクでは1970年にIBM 3330で初めて導入され、その後1976年のIBM 53FDからフロッピーディスクドライブにも導入されました。
MFMは、磁気ストレージでの使用を目的として、従来の周波数変調符号化(FM)コードを改良したものです。MFMは、符号化されたデータビットごとに極性変化が1回のみであることを保証するため、デバイスがメディアにデータを書き込む速度を2倍にすることができました。このため、MFMディスクは一般的に「倍密度」と呼ばれ、以前のFMは「単密度」と呼ばれるようになりました。
MFMは、業界標準の5 + 1 / 4インチおよび3 + 1 / 2インチの通常および高密度フロッピーディスクにおいて、250~ 500kbit/s(エンコード時500~ 1000kbit/s)のデータレートで使用されます。MFMは、より効率的なRLLコードが登場する以前の初期のハードディスク設計にも使用されていました。ニッチな用途を除けば、磁気記録におけるMFMエンコーディングは時代遅れとなっています。
ハードディスクや磁気テープなどの磁気記憶装置は、データを絶対値ではなく、極性の変化として記録します。これは、磁場の変化が近くの電線に電流を誘導し、またその逆も起こるためです。メディアが読み書きヘッドを通過する際に、一連の変化する電流を読み書きヘッドに送ることで、データが「1」であった箇所で磁極が変化するパターンがメディア上に形成されます。メディアの特性によって、一定の表面積内で発生できる磁極の変化の数が決まり、これに公称移動速度を組み合わせることで、そのシステムにおける最大データ転送速度が実現されます。
ディスクドライブは、さまざまな機械的および材料的な影響を受け、元のデータパターンが時間的に「ジッター」を起こします。ランレングス制限コードであるMFMは、記録された遷移間の距離を制限することで、ジッターによって遷移が時間的にずれてデータエラーが発生するのを防ぎます。メディアによって定義されるその他の制限は、データの記録方法にさらなる制約を与えます。この目的のために、一般にラインコードとして知られる、さまざまな適切なエンコーディングが開発されてきました。それらの適合性は、使用されるメディアまたは伝送メカニズムによって異なります。
周波数変調符号化(FM)は、ディスクドライブでこの操作を実行するために最初に広く使用されたシステムです。ドライブコントローラには、ディスクメディアで選択されたデータレートの半分の速度で動作する高精度クロックが含まれています。データがディスクに書き込まれるとき、クロック信号はデータとインターリーブされます。読み出し時には、クロック信号は、データビットを表す後続信号の有無をタイミングよく計測するための短期トリガーとして使用されます。[ 2 ]
FM方式の利点は、書き込み回路の実装が非常に容易であり、読み出し時のクロック回復も比較的簡単である点です。欠点は、ディスク表面の半分をクロック信号に使用してしまうため、ディスクに保存できるデータ総量が半分になってしまうことです。このため、より効率的な新しい符号化方式が開発されることになりました。

修正周波数変調では、クロック信号とデータが単一の「クロックウィンドウ」にエンコードされます。FMとは異なり、クロックビットは、現在および前のデータビットが両方ともセットされていないときに同期を達成するために必要な場合にのみ書き込まれます。平均して、MFMはFMの2倍の情報密度を実現します。[ 3 ]
MFM の基本的な符号化規則は、(x, y, z, ...) が (x, x NOR y, y, y NOR z, z, z NOR...) に符号化されるというものです。入力ストリームでゼロビットが先行している場合はゼロビットは10に、1 が先行している場合は00に符号化されます。1 ビットは常に01に符号化されます。符号化されたデータの 1 ビットあたりの磁気遷移の数は平均 0.75 ~ 1 です。[ 4 ]
周囲のクロックビットは既知の場合もあるが、隣接するデータビットの情報が必要な場合もあることに注意してください。より長い例を以下に示します。
データ: 0 0 0 1 1 0 1 1 ... FMエンコード: 1 0 1 0 1 0 1 1 1 1 1 0 1 1 1 1 1... MFMクロック: ? 1 1 0 0 0 0 0 0... MFMエンコード: ? 0 1 0 1 0 0 1 0 1 0 0 0 1 0 1 0...
(太字の部分はデータビット、その他の部分はクロックビットです。)
FM符号化では、連続する1ビットの間に現れる0ビットの数は0または1です。MFM符号化では、隣接する1ビットの間には少なくとも1つの0ビットが存在し(隣接する1ビットが2つになることは決してありません)、連続する0ビットの最大数は3です。したがって、FMは(0,1) RLLコードであり、MFMは(1,3)コードです。
MFMシステムではクロック信号のより正確なタイミングが求められるため、1970年代後半の技術では必要なアナログおよびデジタルコンポーネントを単一の集積回路上に構築することは経済的に不可能でした。そのため、MFMドライバでは、ドライブベンダーが独自のクロックリカバリ回路(データセパレータと呼ばれるシステム)を設計する必要がありました。データセパレータの設計はそれ自体が芸術形式でした。[ 5 ]
当時最も広く使われていたコントローラの一つが、Western DigitalのFD1771シリーズでした。オリジナルのFD1771はFMのみをサポートしていましたが、すぐに外部から供給されるクロック信号に基づいてMFMを実行するFD1781とFD1791と組み合わされました。これらのドライバでMFMをサポートするには、外部データセパレータが必要でした。 1970年代後半から1980年代前半にかけてのIC製造の急速な進歩により、1980年代初頭には最初の低コストのオールインワンMFMドライバが登場しました。WD2791は、内部アナログ位相同期ループを使用してMFMを直接サポートした最初の製品でしたが、完全なシステムを実装するにはいくつかの簡単な外部コンポーネントが必要でした。WD1770は、完全なMFMソリューションを1つのチップに実装した最初の製品でした。
FMとMFMは、元のデータ内の個々のビットの位置を示すために使用されますが、データ自体には「ファイル」のような上位レベルの構造はありません。これがディスクフォーマットの目的です。ディスクは通常、固定サイズのセクタにフォーマットされ、各セクタにはファイルとリンクするための追加のヘッダー情報が含まれています。
IBMフォーマットでは、セクターのヘッダー情報の開始とデータ自体の開始は、データ自体には出現しない0と1のパターンである特別な「同期マーク」で示されます(「不正な」エンコーディング)。これは、このデータをFMまたはMFMエンコーディングでエンコードしないことで実現され、ドライバが容易に識別できるようになります。MFMエンコーディングで一般的に使用される同期マークは、データビットが16進数値A1 ( 10100001)の開始を形成するため、「A1同期」として知られていますが、5番目のクロックビットはA1バイトの通常のエンコーディングとは異なります。
データ: 1 0 1 0 0 0 0 1 時計: 0 0 0 1 1 1 0 エンコード済み: 1 0 0 0 1 0 0 1 0 1 0 1 0 0 1 同期クロック: 0 0 0 1 0 1 0 同期マーク: 100010010 0 01001 ^ クロックビットが欠落しています
古いディスクフォーマットでは、この問題はインデックスホールによって解決されていました。インデックスホールは各セクターに1つずつあり、すべて最内データトラックの外側の同じ半径(1つの「トラック」上)に配置されていました。各セクターの開始位置が読み取りヘッドの下を通過すると、フォトトランジスタを介して信号が生成されました。そのため、データと同期ワードを区別するために不正なエンコードは必要ありませんでした。後のフロッピーディスクは、1つのインデックスホールで特定のセクターを示すことができましたが、セクター番号がセクターヘッダーの一部として記載されていたため、インデックスホールはほとんど無視されていました。
MMFM(修正修正周波数変調)は、M²FMまたはM2FMとも略され、MFMに似ていますが、追加のクロックビットを抑制し、より長い最大実行長((1,4) RLLコード)を生成します。具体的には、隣接する2つの0ビットの間にクロックパルスが挿入されるのは、そのペアの最初のビットの前にクロックパルスが挿入されていない場合のみです。[ 6 ]以下の例では、MFMに存在するはずだったクロックビットが太字で示されています。
データ: 1 1 0 1 0 0 1 0 0 0 1 0 0 0 0 1 0 0 0 0 0 1 時計: 0 0 0 0 0 1 0 0 1 0 0 0 1 0 1 0 0 1 0 1 0 0 エンコード: 010100010010010010 0 0010010 0 010010010 0 010 0 001
このシステムでは、同期マークは、通常は省略される隣接するゼロビット間に(MFMルールに従って)追加のクロックパルスを挿入することによって作成されます。具体的には、データビットパターン「100001」では、通常は省略されるはずの中央にクロックパルスが挿入されています。
データ: 1 0 0 0 0 1 通常: 0 1 0 1 0 同期: 0 1 1 1 0
ランレングス制限シーケンスの制限特性について詳細に説明されています。
この記事は、連邦規格1037C(一般調達局)からのパブリックドメイン資料を組み込んでいます。 2022年1月22日にオリジナルからアーカイブされました。