2018年10月12日金曜日

QAM

 QAM(Quadrature Amplitude Modulation / 直交振幅変調)を試してみた。

 QAMの動作原理を回路に落とし込んでみる - ecmemo_nのブログ
 ここが一番わかりやすかった。



 サンプリングレート32kHz、搬送波320Hz、ボーレート16baud、という条件でQAM16を試してみた、の図。
 下の図はIQをXYにマップした図。最初は0から始まるが、やがて一番右上に落ち着いて、その次はひとつ左に移動し、一番左側に移動したらひとつ下の右端に移動し、という感じに動作してるのがわかる。

 LPFの特性が悪いので遷移が遅かったり、ぐるぐるしたりしてるが、ボーレートの区切りさえしっかり見つけて、0.8bitあたりでちゃんとサンプリングできれば、しっかり復調できそう。
 ただ、送信側と受信側でキャリアの位相がズレると全く別の結果に復調してしまうので、このあたりの実装が面倒かも。どうやって合わせるんだろうか?
 あと、同じ符号が連続した場合、変調の区切りが見つからない気がする。8B10Bみたいな、常に符号が切り替わるような符号化を予め行うんだろうか? 8B10Bで10bitに変換してQAM32で送る、ってのはアリかもな。


 16baudで変調しても、1baudあたり4bitを送れるので、64bit/secとなる。
 実際に使うなら、音声帯域で伝送するにしても、搬送波は1.36kHzにすれば4倍になるし、ボーレートももう少し上げれそう。ということは、512bit/secくらいは簡単にできそう。とはいえ、64byte/secだと凄まじく遅いなぁ。
 缶サットっぽいヤツのダウンリンクに特小トランシーバで伝送しようか、とか考えたりしたけど、64byte/secだと簡単なHKデータくらいしか載せられない。QVGAくらいのJPEGをダウンリンクできたらいいなーとか思ってたんだが。JPEG1枚15KBとして、4分とかかかってしまう。プローブの飛行時間は12秒程度しかない。


 スペースプローブコンテストだと、今年は運営がyoutubeライブストリーミングをやってて、打ち上げが終わったら回収の様子をドローンで空撮してた。
 なんで打ち上げは空撮しないの?と聞いたら、ドローンの映像ダウンリンクが強くて、XBee等に悪影響を与えやすいため、とのこと。じゃぁプローブ側で2.4GHz帯を使わなければ打ち上げ全体を中継してくれるのか? と思った次第。


 実際のQAM16とかQAM256とかがクッソ早いのは、主搬送波を直接変調してしまうので、例えば800MHzで伝送するなら、1変調あたり10パルス使うとしても、80Mbaudくらい出せる。QAM16としても320Mbps(40Mbyte/sec)くらい出せる。
 特小トランシーバを使う場合、音声帯域の副搬送波を使う必要があるので、QAMのキャリアをせいぜい2kHz程度にしかできない。
 FMトランスミッタにQAM16を入れて、SDRで受信したらもっと帯域出せるかな? でもアップリンクに使えないのが欠点か。そもそもFMトランスミッタの出力ならよほど受信側で利得稼がないと無理だろうし。

 缶サット/スペースプローブは別にしても、音声帯域でそれなりに速度が出る変調方式が作れればいろいろ使いみちはありそうなので、もうちょっといろいろ考えてみる予定。64byte/secとしてもDTMFに比べれば10倍は早いので。って、10倍しか違わないんか~い!うーん。。。


追記

 32ksps、キャリア320Hz、320baudの設定で試してみた。
 前回はLPFに a = a * (1 - k) + b * k のタイプを使っていたが、今回は平均移動を使うようにした。そうするとかなり綺麗な波形になる。
 下の画像は見づらいが、16箇所に強いピークが出ている。ピークの強さは対数スケールなので、途中の成分はほとんど出ていない。

 上の画像は1秒間、320変調期間で、下は10変調期間の拡大。1変調あたりの後半半分は綺麗な形。

 ということで、320Hzのキャリアで320baud、1280bps/sec(160byte/sec)が達成できた。最初に書いた「大した性能でねーじゃん」というのは、やり方がまずかった、というだけの話だった。
 200byte/secくらいのテレメ用通信モジュール、作れるかな? 理論値だと800byte/secくらい出るけど、それにしたってもう一声ほしいよなぁ。音声帯域でQAMを送るとキャリア周波数が上げられないのがネックになるか。FMの音質に期待するなら、64QAMくらいは通せるかな? 256QAMとか通せればいいけど、さすがにつらそう。頑張って256QAMにしても、16QAMの2倍にしかならないんだよなぁ。。4096QAMとかどんな魔法使ってるのかね。


追記

 256QAMのテスト。
 PC内で振幅も位相もキッチリ合わせてあるので綺麗なもの。現実もこうなってくれれば楽でいいんだが。。。

 QAMの制限はどこにあるんだろうか? QAMで必要な帯域幅ってどれくらいなんだろう。バックボーンや放送でQAMの多値化が進んでるってことは、帯域幅を無闇矢鱈と増やさずに拡張できる、と考えれば、QAMのシンボルあたりのビット数と帯域幅は比例しないと考えられるが、そんなことを言うともっと細い帯域で送ればよかろう、という話になるので、たぶんQAMでも帯域幅を増やしたほうが安定するんだろうな。
 振幅のダイナミックレンジに帯域幅が効くのかも。知らんけど。


追記
 QAMの復調の方法、「同期した局発を掛けます」みたいな説明ばっかりで、どうやって同期するかという話がほとんど出てこない。


 このグラフは、IとQをそれぞれ前回からの差をとり、その絶対値を加算している。
 変調が変化するときは急峻な立ち上がりがあり、変調の後半半分は変化がほぼ出ない。つまり、差の和が閾値未満が0.5変調期間に近い間続き、その直後に急峻な立ち上がりがあれば、そこが位相0の地点、ということがわかる。はず。
 ある程度位相がずれていてもこの傾向は変わらないようだ。
 どこかで重大な考え違いをしている可能性もあるけど。


 特小トランシーバから任意の波形を出すためには、マイク入力としてライン出力を入れてやる必要がある。とりあえず変換コネクタをぽちったので、来週中には届くはず。うまく出せるといいが。

 特小トランシーバは変調方式がFM電話なので、デジタル信号を入れるのはやめてね、というのがメーカーの言い分らしい。なので、DTMFのようなデジタル信号を通すのはダメ、ってことらしい。その理論で言えば、当然QAMも不可だろう。
 もっとも、技適取ってある無改造の送信機から10mWのUHFを、未使用のchを確認した上で、クッソ田舎で放射したところで誰にも迷惑かけるわけじゃないし、という気もする。トランシーバに入れるのはただの音声信号だし。後でどっかから大目玉食らうかもしれんが。。。

 国が補助金出してる工事でデジ簡を使ってデジタルデータを飛ばしてるらしい、という噂はある。その噂が正しいなら、デジ簡易にデジタルデータを入れて飛ばすのは問題ない気がする。
 ただ、デジ簡はデジタル変調なので、その中に入ってるのが音声信号だろうが、音声信号に偽造したデジタル信号だろうが、関係なくデジタル符号に変調してしまうし、デジ簡をデコードできない機材から見れば、たぶんどっちもホワイトノイズが入ったFMにしか聞こえないはず。そういう意味では、デジ簡は目的外使用がやりやすい、とも言えるかも?


追記

 QAMの生成をC#に移植して、乱数を変調してWAVEに書き出してみた。
 よく考えたらWAVEは整数並べただけなんだから、てきとーにヘッダつければCのコードそのまま流用できるじゃん。後の祭り。まぁCでヘッダ作るよりは、前に作ったC#のコードを流用したほうが楽だと思うので。。
 横軸は10msec/divです。

 44.1ksps, 1.5kbaud, 16QAM, 6kbit/sec(0.75kbyte/sec)の設定。
 かなり低域側にスペクトルが広いし、高域側にもそれなりになだらかに出てる。DC付近でも0にならず、かなり出てるのが気になる。
 QAMはDCにも意味があるはずなので、AC結合されると復調できないかも。ざっくりと波形を見る限りはほとんどDC成分無いように見えるんだけどねぇ。
 baudrateを変えても、スペクトルのピークが移動するだけで、坂の形状(dB/octとか?)はあまり変わらない感じ。
 実際のQAM変調でも似たような感じになるはずなので、空間に放射する前にBPFに通して帯域制限してるはず。
 QAMの変調はあんまり計算コストかからないけど、BPF通すのは大変だなぁ。マイコン内でFIRに通すより、外にオペアンプでもおいたほうがいいかも? 音声帯域なら高速OPアンプは必要ないし。でもOPアンプ1-2段分くらいならIIRやFIRでやっても大したコストじゃないかな?

0 件のコメント:

コメントを投稿