試しに00h FFh AAhの3バイトをNRZ(S)で転送してみました。
オレンジと赤が時系列変化で、右側の軸です(青は瞬間のパワースペクトル)。
送受信間のサンプリングレートに125PPMのエラーを与えていますが、とりあえず問題なさそうです。
赤い点が負ならゼロ、正ならイチ、というデータです。また、同じレベルが5回続くと、次のシンボルは反転した値を送信します。これはCANバスと同様で、目的も同じですが、NRZ(S)はビット0を送る際はレベルが変化するので、運用としては「bit1が5回続いたらビットスタッフィングを行う」という感じになってます。
目視でデコードしてみると、左から負の位置に点が8個あり、これが00hを示しています。次に正が5回続き、ビットスタッフィングが入り、更に3回続いて、これがFFhを示しています。その後、負正が4組で、AAh(LSBファースト)を示しています。
その後、同じ値が6回続いて、デコードが中断した、という状況です。
今の所、データ終了を知らせる方法がないので、同じビットが6回以上続いたらエラーとする(それ以前のビット列は有効)、というような感じにしてあります。
思ったより、ちゃんと動いてる感じです。
ビットスタッフィングを機械的に除去すれば元のビット列が復元できそうです。
送受信の周波数誤差を考えると、受信側は送信側のFFTポイント数の8分の1程度に設定する必要がありそうです。例えば、送信側が1シンボル2048ポイントなら、受信側のFFTは256ポイント、という感じです。
1対4だと、送信側のビットの境目が受信側のFFTの中央、といったタイミングになったときに、ミスデコードするようです。
上の画像では16Ksps/2048ポイントなので、7.8125シンボル/secですが、31.25シンボル/secでも、特に異常はありませんでした。ソコソコのビットレートが期待できるようになってきました。7.8sym/secに慣れた耳で31.25sym/secを聞くと、まるで早口言葉みたいですね。
ある程度の強さのホワイトノイズを入れても全く問題がないので、その部分は強そうです。実際の伝送経路に入れたときに周波数特性とか位相特性がどう影響するかはわかりませんが。
とりあえずBPSKは動きそうな感じです。試しにQPSKも試してみようかと思ってみましたが、BPSKは「位相が変わったか変わっていないか」を見ればいいのに対して、QPSKでは「位相がどう変わったか」を見なければいけないので、デコードの苦労はかなり大きくなります。
まずはBPSKが動くようになってから、ですね。
0 件のコメント:
コメントを投稿