ついに1対1のCDMAが動いた。。


※上記の広告は60日以上更新のないWIKIに表示されています。更新することで広告が下部へ移動します。

動いた。。

  • なぜ動いたか
GNURadio4.Xでアップデートされたクロックリカバリー回路を用いたらBERがほぼ0に(全ビットが反転してしまう場合を除く)。
  • マルチユーザはだめ?
やった!これで論文書ける!と意気込み
さて次はマルチユーザだ!とすぐさまやったが、うまく動かない。
信号が衝突してしまうせいか、全然同期がとれない。→無線で試したがやはりだめ。。

マルチユーザへの挑戦

  • なぜ動かないのか?
以下はoscilloscopeでキャプチャした画像だが、キャリア周波数がベースバンドよりもなぜか小さく(?)、
マルチユーザにしたときに減衰部分がかき消されてしまう。→検討違い。
このキャプチャによると、キャリアらしきものは1kHzくらい。
CDMAチップレートは97.5kchip/sec(=195sample/sec÷2sample/symbol)くらい。(つまり帯域幅は100kHzくらい)
つまり、サンプル数/sec(97.5kが限界?)を小さく、1シンボルあたりのサンプル数を大きくすればいい!?
→samples/symbolが8以上だと上手く複合できない。
もっとよく調べてみたら、USRPによって受信した信号の波形が異なることが分かった。
↓1つ目のUSRPから受信した信号。
↓2つ目のUSRPから受信した信号。
↓両方のUSRPから受信した信号。
上2枚は同じスケールだが、波形が異なっていて、3枚目の図においては一方のUSRPの波形しか見えない。
シングルユーザの場合はいずれもBERはほぼないかが、上図のようなマルチユーザの場合はなぜか2番目のUSRP
からの信号しか複合できない。しかもこの場合は1チップの誤りもない。
USRPやdaughterboardを入れ替えて色々と試した結果、USRPのマザボが上図に示したような波形の違いに影響を与えていることがわかった。

  • USRPの構造
こんなことを言っている人がいる。
I read that the RF frontend down-scales to the ADC.
USRPの構造をわかりやすく説明した文献があった。以下要約。
  • daughterboard→amp→ADC→MUX→DDC(×NCO→CIC(Decimator))→Giga Ether→Host
  • NCO(参考)はIFからベースバンドに変換するのに用いられる。
  • 最終的にホストに送られるのはIチャンネルとQチャンネルのベースバンド信号(16-bit×2×25Msample/sec = 800Mbit/sec < 1Gbit/sec)。
  • つまり、伝送路ではちゃんと2.45GHzの信号でmixされている。
やっぱり、USRPのマザーが受け取るのはIF帯。100MspsでADCが動いているからね。GNURadioより
そしてそのADCを通った後はソフトウェアの世界。やっぱりDDCでIFからBasebandにしているから、そこをいじれるかが勝負!!
そしてさっき挙げた文献にこんなことが↓
We can set the IF frequency of the DDC using usrp.set_rx_freq() method
and set the decimation factor using usrp.set_decim_rate() method in Python. The decimation rate must be in [1, 256].
(でもuhd_usrp_source.hにはそんな関数はなかたよ。。)
これらの情報は全部DDC(受信側)の話だけどおそらく問題なのはDUC(送信側)だと思う。(USRPによって送信波形が異なるから)
そこを固定できるかが今後の課題だっぺ。
だがしかし。。
Two digital upconverters (DUCs) interpolate baseband signals to 100
MS/s before translating them to the selected output frequency. (EttusのUSRPN200シリーズのデータシートより)
DUCは100Ms/sに固定っぽいことが書いてあるよ。。でもそれと同時にDigital upconverters with programmable
interpolation ratesって右のFeatureに書いてある。ということは、そういうこと?
DUCに関するWiki
  • DDCのgainを上げたら上の問題は解決
USRPのgainを99にしたら、どちらかが打ち消されるという問題は解決した。(今まではなんとgain=0になっていた。)
python uhd_cdma_rx2.py -f 2.45G -c 1 -g 99 (-g でgainをいじれる)
上がgain=99の場合で下がgain=50の場合、上の方が歪んでいる幅が小さいのが分かる。
  • daughter board問題
以下、2端末からの混合信号を受信した際のオシロスコープの画面。
値が1or-1でおかしい。daughter boardではどんな変調を行っているのか?
GNURadioのFAQで、受信側にはオフセット周波数が発生してしまうこと、実際の受信電圧を測ることはできないことがわかった。
・Why is there always a frequency offset when transmitting from one USRP to another?
It's the law of physics. There is no way to eliminate this. Digital receivers must be able to cope with this kind of error.
・How do I know the exact voltage/power of my received input signal?
This is extremely difficult. Remember that the USRP (or whatever device you're using) has several analog stages (AGC, amplifiers etc.) which all affect the power before it is passed to the A/D converter. Once you're in the digital domain, all you have is numbers .
The only way to get the exact received power is by calibrating your signal manually.

こんなのも見つけた!GNURadioのbasebandについて