質問やフィードバックがありましたら、フォームからお願いします
本文は台湾華語で、ChatGPT で翻訳している記事なので、不確かな部分や間違いがあるかもしれません。ご了承ください
こちらで言う「冷門」とは、私にとってあまり耳にしない技術用語や理論を指しています。
ソフトウェアエンジニアにとって、OSI七層モデルでは通常、トランスポート層以上の層とやり取りを行います。たとえば、一般的なTCP/IPやHTTPプロトコルなどは、詳細がわからなくてもその動作は大体理解しています。反対に、OSI七層以下のモデルにはあまり触れることがありません。
しかし、物理層では考慮しなければならない詳細が多く、ソフトウェアの実装もより複雑です。特に、物理信号の伝達は相対的に不安定でノイズの多い状況で行われるため、設計時にはこれらの要因を考慮する必要があります。
エンコーディング
データはネットワーク内でどのようにエンコードされるのでしょうか?ファイルの内容に関係なく、最終的にはデータを高電位または低電位といった物理信号に変換する必要があり、それによって伝送が実現されます。データを異なる形式や構造に変換し、コンピュータが処理しやすくするこのプロセスは、通常「エンコーディング(Encoding)」と呼ばれます。
回路においても同様で、一般的には高電位を 1
、低電位を 0
と見なします。
NRZ(Non-Return-to-Zero)
NRZはデジタル通信におけるエンコーディング方法の一つで、電圧を使用してビットの値を表現します。
NRZエンコーディングの特徴は、各単位時間内に信号の電圧が固定されることです。次のビットの時間が始まるまで、電圧は変わりません。
ここで重要なのは「単位時間」が意味するところです。これは各ビット間の間隔が固定されることを示しています。双方にとって、データストリームをどのように読み取るかを知るためには、統一された周期信号が必要です。さもなければ、まったく異なる結果を読み取ってしまう可能性があります。
もしクロックが速すぎたり遅すぎたりすると、データに誤りが生じる可能性があります。しかし問題は、双方がクロックの周波数をどのように知るかということです。別の線を追加してクロック信号にすることもできますが、実際のアプリケーションでは、線は少ない方が望ましいです。また、データが長時間同じ電位を保持していると、精度の問題が生じる可能性があります。
クロック回復
実際のアプリケーションでは、ソース信号から原始のクロック周波数を推測し、受信機が対応する周期波を生成してデコードします。このプロセスを「クロック回復」と呼びます。
クロック回復は大きくいくつかのステップに分けられます:
- トランジションを検出する。この作業は通常、遅延回路を用いて行います。
- FFT変換を通じて周期を見つける。
- 位相同期回路(Phase-locked loops)を通じて信号を同期させる。
クロック回復の詳細な原理はWikipediaを参照できますが、主な目的は、参照信号の周波数が変化した際に、フィードバックを通じて位相や周波数を調整し、両者を一致させることです。
ただし、これには一つの問題があります。もしデータが常に高電位または低電位を保持している場合、周波数をまったく把握できないのではないでしょうか?この問題を解決するために、他のエンコーディング方式も採用されています。
マンチェスターエンコーディング
データストリームが常に低電位または高電位であることを避けたいので、電位を常に変化させることにしましょう!マンチェスターは、0と1を判別するための非常に賢い方法を採用しています。
マンチェスターは、高低電位の変化を用いて 0
と 1
を表現します。
0
:低電位から高電位への変化1
:高電位から低電位への変化
これにより、元のデータが連続した0や1であっても問題ありません。電位が常に変化するため、クロック回復を効果的に行うことができます。IEEE 802.3もこのエンコーディング方式を採用しています。しかし、このエンコーディングの最も致命的な欠点は、伝送帯域幅がNRZの2倍必要なことです。周期内に高低電位の変化を検出する必要があるため、実際には2倍の帯域幅が必要です。
4B/5B
この記事が役に立ったと思ったら、下のリンクからコーヒーを奢ってくれると嬉しいです ☕ 私の普通の一日が輝かしいものになります ✨
☕Buy me a coffee