OSQZSS

オープンソース準天頂衛星(QZSS)受信機

HackRFの問題解決

2014-12-03 00:05:10 | GPS Signal Simulator
HackRFで記録したGPS信号にゼロ近傍の値が多いのは,サンプリングレートに
関係なく,初めの10msの間だけのようです.解決方法があるのかもしれませんが,
とりあえず最初の受信データは捨てることにします.

受信データの欠損ですが,hackrf-devに質問を投げたら,すぐに解決方法を
教えてくれました.

まず,通信の問題かHDDの問題か切り分けるために,ファイルへの書き込みなしで
hackrf_transferを実行します.

$ hackrf_transfer -r /dev/null -f 1575420000 -s 2600000 -n 260000000 -g 30 -l 40 -a 0

これであれば,転送レートが低下することがありませんでした.
どうやらHDDへの書き込みが問題のようです.

そこで,データの書き込みにramdiskを使います.

$ sudo mkdir /tmp/ramdisk
$ sudo chmod 777 /tmp/ramdisk
$ sudo mount -t tmpfs -o size=1G tmpfs /tmp/ramdisk
$ df -m
Filesystem 1M-blocks Used Available Use% Mounted on
/dev/sda5 112252 23470 83058 23% /
none 1 0 1 0% /sys/fs/cgroup
udev 3921 1 3921 1% /dev
tmpfs 787 2 786 1% /run
none 5 0 5 0% /run/lock
none 3932 1 3931 1% /run/shm
none 100 1 100 1% /run/user
tmpfs 1024 0 1024 0% /tmp/ramdisk
$ hackrf_transfer -r /tmp/ramdisk/gps.bin -f 1575420000 -s 2600000 -n 260000000 -g 30 -l 40 -a 0


記録したデータを再生してみると,GPS受信機で信号が途切れることなく観測できました.
ノートPCのHDDをSSDに換装しようかな.

しかし,Qiは5や6になることが時々あるものの安定せず,航法メッセージがデコードできません.
水晶振動子ではダメか.次は外部クロックを試そう.

一発で測位まで確認できたUSRP N210とは比較になりませんが,価格的には圧倒的に安価.
GNSS信号の記録・再生も,不安定ながら何とかなりそうな感じです.
HackRF One,お勧めです!

【追記】TXでMGA-81563をオフにして,RFラインから相当分のattenuatorを
外したのですが,この組み合わせでは信号が確認できませんでした.
トータルのゲインが合っていれば受信できるものでもないのかな?

【追記2】HackRF OneのクローンがIndieGoGoでキャンペーン中.
オリジナルより$100ほど安い.

IndieGoGo: HackRF Blue - A $200 HackRF

【追記3】フェライト,すごい!

YouTube: Hackrf usb cable reduce noise with ferrite

【追記4】HackRF Blueのヒートシンクに意味があるのか?
と思っていたら,意外と熱くなるのね.

marshall: hackrf in operation, LPC reaching 57 C
コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

HackRFでもRecord & Playback

2014-12-02 09:22:14 | GPS Signal Simulator
勢いに任せて,HackRF OneでもGPS信号のrecord & playbackに挑戦.



GPS信号の受信では,帯域が2.5MHzになるように,サンプリングレートを2.6MHzに設定.
ゲインは,I/Q信号の分布を確認しながら,ベースバンドを30dB,LNAを40dBにしました.

$ hackrf_transfer -r gps.bin -f 1575420000 -s 2600000 -n 260000000 -g 30 -l 40 -a 0
call hackrf_sample_rate_set(2600000 Hz/2.600 MHz)
call hackrf_baseband_filter_bandwidth_set(2500000 Hz/2.500 MHz)
call hackrf_set_freq(1575420000 Hz/1575.420 MHz)
call hackrf_set_amp_enable(0)
samples_to_xfer 260000000/260Mio
Stop with Ctrl-C
5.0 MiB / 1.000 sec = 5.0 MiB/second
5.2 MiB / 1.000 sec = 5.2 MiB/second
5.2 MiB / 1.000 sec = 5.2 MiB/second
5.2 MiB / 1.000 sec = 5.2 MiB/second
5.2 MiB / 1.000 sec = 5.2 MiB/second
2.6 MiB / 1.000 sec = 2.6 MiB/second
2.4 MiB / 1.000 sec = 2.4 MiB/second
5.2 MiB / 1.000 sec = 5.2 MiB/second
5.2 MiB / 1.000 sec = 5.2 MiB/second
5.0 MiB / 1.000 sec = 5.0 MiB/second
4.5 MiB / 1.000 sec = 4.5 MiB/second
3.1 MiB / 1.000 sec = 3.1 MiB/second
1.0 MiB / 1.000 sec = 1.0 MiB/second
5.0 MiB / 1.000 sec = 5.0 MiB/second
5.2 MiB / 1.000 sec = 5.2 MiB/second
4.7 MiB / 1.000 sec = 4.7 MiB/second


受信は確認できるものの,ゼロ近辺の値の頻度だけが突出しています.
気になりますが,いまのところ原因不明.

 (クリックで拡大)

 (クリックで拡大)

 (クリックで拡大)

また,長時間連続してデータを記録していると,ときおり転送レートが低下しており,
取りこぼしがありそうです.この転送レートの低下は,TXのときには発生しません.
USB 2.0ではなく,HDDへの書き込みの問題?

hackrf_transfer -t gps.bin -f 1575420000 -s 2600000 -a 1 -x 0
call hackrf_sample_rate_set(2600000 Hz/2.600 MHz)
call hackrf_baseband_filter_bandwidth_set(2500000 Hz/2.500 MHz)
call hackrf_set_freq(1575420000 Hz/1575.420 MHz)
call hackrf_set_amp_enable(1)
Stop with Ctrl-C
5.0 MiB / 1.000 sec = 5.0 MiB/second
5.2 MiB / 1.000 sec = 5.2 MiB/second
5.2 MiB / 1.000 sec = 5.2 MiB/second
5.2 MiB / 1.000 sec = 5.2 MiB/second
5.2 MiB / 1.000 sec = 5.2 MiB/second
5.2 MiB / 1.000 sec = 5.2 MiB/second
5.0 MiB / 1.000 sec = 5.0 MiB/second
5.2 MiB / 1.000 sec = 5.2 MiB/second
5.2 MiB / 1.000 sec = 5.2 MiB/second
5.2 MiB / 1.000 sec = 5.2 MiB/second
5.2 MiB / 1.000 sec = 5.2 MiB/second

User cancel, exiting...
Total time: 100.01574 s
hackrf_stop_tx() done
hackrf_close() done
hackrf_exit() done
fclose(fd) done
exit


TXのRFゲインとして14dBのMGA-81563をオンにしています.
このときのRFラインに挿入したattenuatorは60dBです.

ubloxの受信機で信号を確認すると,問題なく受信できました.
しかし,やはり記録したファイルにデータの取りこぼしがあるようで,
そのタイミングで信号が落ちてしまいます.

 (クリックで拡大)

HackRF Oneに搭載されている25MHzの基準クロックは水晶振動子で,周波数偏差は20ppmです.

Kyocera: Surface Mount Type CX3225GB

bladeRFに搭載されている38.4MHz+/-1ppmのVCTCXOと比較すると許容偏差が大きいのですが,
受信信号のQiは6を示すこともあり,比較的良好です.

HackRF Oneの受信ポートは,アクティブアンテナ用に3.3VのDCを供給できるのが魅力的.
送信時もMGA-81563をオフにすれば,必要なattenuatorの数も減らせる?
受信データの取りこぼしさえなければ,かなり使えそうです.
SSDで試してみるかな.

【追記】HackRFの基板にアクセスしたかったので,ケースを取り外す.



上側に爪がついていて,下側の穴に引っかけています.
かなりキツイので,ケースにキズを付けずに外すのは難しそう.

P22にCLKINとVCC,GNDのピンが出ているので,ここにTCXOを搭載した
子基板を差し込んで,クロックの精度を改善しよう.

CLKINは10MHzのCMOS入力.Digikeyで探してみたけれど,あまり選択肢はない.

FOX924B: OSC TCXO 10.000MHZ HCMOS SMD

【追記2】アナログ部のRFシールドは未実装.これもDigikeyで購入できる.

BMI-S-230-F-R: BOARD SHIELD 2INX1.5IN FRAME
BMI-S-230-C: BOARD SHIELD 2INX1.5IN COVER

【追記3】アクリルケースを付ける.OSH Stensilsから購入できます.



コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

bladeRFで再挑戦

2014-12-01 12:00:15 | GPS Signal Simulator
USRP N210でコツをつかんだので,bladeRFでのrecord & playbackに再挑戦.

GPS信号の受信では,USRPと同様にBPF付きのLNAを追加.ゲインは40dBです.
bladeRFでは,I/Q信号の分布を確認しながら,rxvga1を30dBに,rxvga2を18dBに
調整しました.

このrxvga1とrxvga2は,それぞれLMS6002DのMixerとLPFの後段のゲインになります.

 (クリックで拡大)

Recordの手順は以下の通り.

$ bladeRF-cli -i

bladeRF> set frequency 1575.42M

Set RX frequency: 1575420000Hz
Set TX frequency: 1575420000Hz

bladeRF> set samplerate 4M

Setting RX sample rate - req: 4000000 0/1Hz, actual: 4000000 0/1Hz
Setting TX sample rate - req: 4000000 0/1Hz, actual: 4000000 0/1Hz

bladeRF> set bandwidth 2.5M

Set RX bandwidth - req: 2500000Hz actual: 2500000Hz
Set TX bandwidth - req: 2500000Hz actual: 2500000Hz

bladeRF> set rxvga1 30
bladeRF> print rxvga1

RXVGA1 Gain: 30dB

bladeRF> set rxvga2 20
bladeRF> print rxvga2

RXVGA2 Gain: 18dB

bladeRF> cal lms

Calibrating LMS LPF tuning module...
LPF tuning module: 23

Calibrating LMS TX LPF modules...
TX LPF I filter: 35
TX LPF Q filter: 27

Calibrating LMS RX LPF modules...
RX LPF I filter: 1
RX LPF Q filter: 35

Calibrating LMS RXVGA2 modules...
RX VGA2 DC reference module: 25
RX VGA2 stage 1, I channel: 37
RX VGA2 stage 1, Q channel: 21
RX VGA2 stage 2, I channel: 33
RX VGA2 stage 2, Q channel: 27

bladeRF> cal dc rx

RX DC I Setting = 38, error ~= -2
RX DC Q Setting = 34, error ~= 6

bladeRF> rx config format=bin file=gps.bin n=400000000
bladeRF> rx start
bladeRF> rx

State: Running
Last error: None
File: gps.bin
File format: SC16 Q11, Binary
# Samples: 400000000
# Buffers: 32
# Samples per buffer: 32768
# Transfers: 16
Timeout (ms): 1000


DCのキャリブレーションが上手く行き,オフセットのない信号が受信できました.

 (クリックで拡大)

 (クリックで拡大)

GPS信号の受信も確認できます.

 (クリックで拡大)

次は,記録したデータを同じRFの設定で再生します.

bladeRFでは,TXのゲイン設定でattenuationもできます.
RFラインに挿入した50dBのattenuatorに加えて,txvga1を-10dBに設定しました.

Playbackの手順は以下の通り.

bladeRF> set txvga1 -10
bladeRF> print txvga1

TXVGA1 Gain: -10dB

bladeRF> print txvga2

TXVGA2 Gain: 0dB

bladeRF> cal dc tx

TX DC I Setting = -147, error ~= 25.489208
TX DC Q Setting = 474, error ~= 10.132919

bladeRF> tx config file=gps.bin format=bin
bladeRF> tx start
bladeRF> tx

State: Running
Last error: None
File: gps.bin
File format: SC16 Q11, Binary
Repetitions: 1
Repetition delay: none
# Buffers: 32
# Samples per buffer: 32768
# Transfers: 16
Timeout (ms): 1000


TXのDCオフセットのキャリブレーションがあまり上手くいっていません.
それでも,bladeRFのTXに接続されたubloxの受信機で無事に受信を確認.

 (クリックで拡大)

しかし,信号を捕捉するのですが,しばらくするとロックが外れてしまいます.
コールドスタートをかけると再捕捉するので,信号は途切れずに出力されているようです.

搬送波信号のQiを見ると,多くの信号で3となっており,あまり良い品質ではありません.
どうやら,再生されている信号の周波数の安定性がいまひとつのようです.

USRPでも外部クロックを推奨されていたので,OCXO搭載のGPSDOでも購入しようかな.

【追記】Myriad RFのプロジェクトが増えている.

https://myriadrf.org/

【追記2】TXが不安定なのはクロックではなくUSB 3.0の問題か?
USB 3.0が正常に動作しているかどうかチェックが必要.

bladeRF: Debugging dropped samples and identifying achievable sample rates
コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする