エラー訂正機能付きのパケットプロトコルの検討を行った。簡易通信用パケットを参照。分かり易いように回路として表しているが、実際は全てソフトウェアで行う。前回は、PICマイコンを使用していたためクロックの制約で、符号化、復号化にはテーブルを使用した。今回は、H8マイコンとなりクロックに余裕があるため、全てプログラムで生成する予定。そのため、符号化回路はシフト演算で可能なものを選択しており、シフトレジスタによる回路化はし易い。このプロトコルでは、ヘッダ部分は3bitまで、データ部分は8bitまでのバーストエラーがあった場合でも、エラー訂正能力を持つ。CRCをデータに含めることで、データの信頼性を確保することが出来る。[top]検討フレーム検出32bit長PN符号によるヘッダを使用する。ヘッダを別の符号を使用することで、送信元の区別をすることも出来る。データ読込みのための同期信号抽出はヘッダ検出で完了させ、それ以降は416us毎にデータを読込むだけとする。→方法はさらに検討要プリアンブルでの同期は行わず、DCオフセットの調整の役割のみとする。→そのため壊れても全く問題ないことになる。パケット長は固定となるため、フッタは特に必要ないので省略可能なはず。ヘッダ部分にエラーが発生することも考えられるため、数ビットまでのエラーを許容することにする。許容するエラービット数は調整が必要だが、32ビット中の3ビット程度が適当と考えられるデータの符号化マンチェスタ符号を使用する。マンチェスタ符号は、必ず変化するので、データ中で0或は1が連続しても問題無い。0,1の期間が全く同じになるため、DCオフセットが中央になる。転送データは、(15,10)短縮ハミング符号1によるエラー訂正を行う。シフトレジスタをクリアした状態から、クロックと同期させて10ビット分のデータを入れる。これは、(7,4)ハミング符号より、訂正符号の割合が少し小さくなる。シフトレジスタによる回路化がしやすい。データが10bitのため、テーブルによる変換だと1024byte(5bit)になる。今回は、少し時間が掛かるがソフトウェアによるシフト演算で生成することにする。インターリーブエラー訂正符号とデータをそのまま転送すると、ランダムエラーには強くなるが、バーストエラーには対応出来ない。インターリーブを行わないと、エラー訂正の効果が実質的には殆ど無くなってしまう。→無線通信の場合バーストエラーが多いインターリーブは、データの並び替えを行うのが普通だが、データの並び替えは時間が掛かるという問題がある。データの0,1の連続を無くすと同時にデータのスクランブルすることで代用する方法もある。マンチェスタ符号の場合は、データの加工は基本的に不要であるため、データの並び替えの時間が勿体無い。そのため、データと直交するように符号化することで、実質的なインターリーブとする。この方法では、データ数と符号化するデータビット数を合わせる必要がある。→そうしないと結局並び替えが必要になるため。(15,10)短縮ハミングコードを使用すると、データは10bitなので、10byteとした。従って、1パケット当たりのデータは8×10=80bit、訂正符号は8×5=40bitとなる。CRCエラー訂正不能なデータについては、破棄する必要がある。そのため、データ部分にはCRC16によるチェックコード16bitを含め、エラー訂正後にチェックする。これにより実質的なデータのビット数は、80-16=64bitとなる。シフトレジスタで構成出来るが、ビット数が多いのでソフトウェア的には、ハミング符号化以上に重い処理になる。受信した、15bit×8のデータについて、送信時と同様にデータと直交する方向に復号化を行う。受信したデータ部分について、送信時と同様に短縮ハミング符号を求める。受信した訂正符号と、生成された符号のEx-ORをとる。これをシンドロームと呼ぶ。9ビット目エラーシンドロームの値により、エラー箇所が分かるので、そのビットを反転させれば良い。復号化のために、15byteのバッファが必要になる。PN符号ジェネレータ技適の際に使用するテストモード用のPN符号ジェネレータ9bitM系列の511PN符号を発生する。M系列になるタップの組合せは、48通り(実質上はは24通り)。『つながるワイヤレス機器の開発手法』http://www.kumikomi.net/article/explanation/2004/09com11/01.html『M系列、Gold系列について』http://www.nkgw.ics.keio.ac.jp/jap/basic_research/gold/『簡易通信用パケット』1Bluetoothで使われているエラー訂正方法と同様のもの。ソフトウェアで行うため、データをスルー、シフトレジスタをクリアするためのスイッチは省略している。