2006-05-16

NRZIとソフトデコード

過去記事「 VHF ACARSのデコード」で、ACARSのプロトコルがNRZI(Non Return to Zero Inverse)と書きました。よくよく考えてみるとNRZIというは、電線に電気が通るようなときに使う用語なような気がして、ソフトデコードでNRZIというのはおかしいのかな?という気もしましたが、ACARSはNRZIと同じように符号化されるということなのです。 NRZIは別に難しいものではないのですが、ACARSを例に書いてみようかと思います。 NRZIは、「I」がInverseを意味するように、信号が「1」のときに符号が反転し、「0」のときは符号が変わらないということです。 これをFSKのデコードで話をすると、まず、周波数の高いほうをスペースといいここでは「B」、低いほうをマークといい、「Y」という記号とします。マークの信号の場合を「1」として、マークの信号が来たら符号が反転するとします。 仮に「BBYYBYBB」という信号がきたとすると、そのままだと「00110100」ということになります。NRZIの場合は、「同同反反同反同同」(同=変わらない、反=反転)という意味になります。初期値が「0」であれば、「00100111」という結果になります。 ACARSを例にとるとACARSは最初のビットシンクをとるところは、ASCIIコードで「+」(2BH)「*」(2AH)が送られてきます。ビットは下位ビットから送出されるので、「1101010」「0101010」となりますが、パリティが「1」で固定なので、続けると「1101010101010101」となります。これをNRZIにすると「?同反反反反反反反反反反反反反反」(初期値を意識して最初は?とした)となります。 実際には「BBYYYYYYYYYYYYYY」となります。さらにビットシンクよりの前の信号はスペース(「B」)なので、デコーダーとしては、「YYYYYYYYYYYYYY」(14個の「Y」)を待つことでビットシンクをするということになります。