OSQZSS

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

Piksi受信機のベータテスト

2013-06-28 15:15:06 | FPGA
Swift NavigationはオープンソースなGPS受信機の
販売を目指しているスタートアップです.

部品選定などでお手伝いしていたら,Piksi受信機の
ベータテスト版をプレゼントしてくれました.



受信機は,フロントエンドにMAX2769,相関演算はSpartan-6,
信号追尾や測位演算はSTM32F4という構成です.

 (クリックで拡大)

信号処理に関連したソースコードは,すべてgithubで公開
されていますが,FPGAでのベースバンド処理部は非公開の
ようです.

Swift Navigation Wiki

その意味では,完全にオープンソースではないのですが,
自分だけのGPS受信機を作るには,とてもコンパクトで
魅力的なプラットフォームです.

とりあえずは,高ダイナミクス対応だな!

【追記】DEFCON 20でのプレゼンテーションを発見.

DEFCON 20: Making Sense of Static - New Tools for Hacking GPS

値段に関する質問に,$1,000くらいになる予定と答えている.
思っていたより高め.
コメント (2)
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

集合写真

2013-06-27 09:51:19 | ロケット
@ina111さんと@HirakuTOIDAさんにお会いして,
GPS,ロケット,鳥人間など,雑多な話題で盛り上がる.

@HirakuTOIDAさんの作品の完成度がどれも高い!



@ina111さんのロケットに搭載していただこうと,
自作のGPS受信機を1台プレゼント.

液体燃料なので,モデルロケットや観測ロケットに比べると,
打ち上げ時の加速度はとても穏やか.しばらくは市販品で
間に合うのかなと思う.

2年後には高度100kmを目指すそうなので,それまでに
GPS受信機もマルチアンテナの次世代機を完成させよう.
コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

GPS受信機の高度・速度規制

2013-06-20 12:24:24 | ロケット
自作のロケット用GPS受信機を宣伝しておいてと言っておきながら,
実際に相談を受けたら,まずは市販品をお勧めします.

市販のGPS受信機には,武器へ転用されないように,
出力される速度と高度情報に規制がかけられています.
一般に,速度で1,000ノット(514m/s),高度で60,000フィート(18km)です.

さて,この規制ですが,あくまでも測位結果を出力しないとうルールであり,
受信機の能力としてこれ以上は測位できないという訳ではありあせん.
そのため,簡単なソフトウェアの変更で,この規制を解除することができます.

測量用GPS受信機を販売してるメーカの中には,この規制解除を
公式なサービスとして提供しているところもあります.
メジャーなところでは,JAVAD(米国)とNovAtel(カナダ)です.

例えば,JAVADのホームページを見ると,OEM製品のメニューに
「Space Speed Alt」というオプションがあり,$2,000の追加で
高度・速度の規制が解除できます.

一方,NovAtelの最新のファームウェアでは,高度制限は基本的に
始めから解除されています.そのため,高高度気球実験などには,
そのまま使うことが可能です.速度規制の解除には,JAVADと同じ
程度の追加予算が必要になります.

ただし,これらはあくまでも規制解除のための手続きであり,
日本へ輸出を許可するものであありません.武器への転用の
可能性がある限り輸出規制品となり,その可否については
各国の法律に従うことになります.

この輸出規制については,許可がいつ出るのか,そもそも許可
されるのかなど,ケースバイケースであり,明確な基準がありません.
2か月で入手できるときもあれば,2年以上待ったこともあります.
あくまでも個人的な感想ですが,米国のメーカから購入するより,
カナダや欧州のメーカの方がスムーズに話が進む印象です.

もう一点,ロケット搭載において注意しなければならないのが
ダイナミクスの制限です.高度・速度の制限が解除されたから
といって,ロケット発射時の高加速度,高ジャークの信号を
追尾できるかどうかは別問題です.

信号追尾において,ダイナミクスレンジと疑似距離精度は
トレードオフの関係にあります.精度を上げたければ,
ダイナミクスレンジを狭くし,平滑化の時間を長くします.
逆に,高ダイナミクス対応にしようとすると,精度が劣化します.

また,信号追尾ループの次数も問題となります.加速度や
ジャークなど,高次のダイナミクスに追従しようとすると,
ループの次数も高くしなければなりません.しかし,高次の
追尾ループは発散の恐れも高くなり,ロバスト性が低下します.

民生品のGPS受信機が必要なダイナミクスは,せいぜい2Gです.
中には4Gまでカタログスペック上対応しているものもありますが,
このあたりが上限です.

そのため,このような受信機の速度・高度規制を解除したからといって,
ロケットの高加速度に対応できるとは限りません.

そうなると,市販受信機としては,どれを買えば良いのでしょうか?

実績重視となると,JAVADのTR-G2あたりがお勧めです.
この受信機はNASAのsounding rocketなどに搭載されいることが
報告されています.

Sounding Rocket Working Group, February 4, 2010 (42ページ参照)

しかし,米国のメーカですので,日本への輸入は難しいかもしれません.
高ダイナミクスへの対応は未知数ですが,入手性を重視するのであれば,
カナダのメーカであるNovAtelのOEM製品が良いかと思います.
海外のCubeSatでは,広く利用されているようです.

ところで,このGPS受信機の高度・速度規制は,いったいどこが決めた
ものなのでしょうか?

自分で調べた範囲の知識ですので間違っているかもしれませんが,
ベースとなっているのはCOCOMのようです.

しかし,COCOMはすでに解消され,新しい輸出管理体制として
Wassenaar Arrangementが発足しています.Category 7が
Navigation and Avionicsに関する規制ですので,内容を
確認したのですが,GPSの高度や速度に関する規制は
記載されていません.(その代わりに,暗号化された信号を
受信できるものや,アレーアンテナでビームステアリングが
できる受信機の輸出が規制されています.)

同じように,日本の該非判定関連の資料をチェックしても,
この高度・速度に関する規制はありません.

結局のところ,この規制は,米国のITARによるものかと思われます.
ITARはCOCOMを受けて90年代に施行され,いまでも効力を持っています.

ITARの規制品目を調べてみたところ,Category XVの
Spacecraft Systems and Associated Equipmentにおいて,
GPS受信機に関する明確な規定がありました.

(c) Global Positioning System (GPS) receiving equipment specifically designed,
modified or configured for military use; or GPS receiving equipment with any of
the following characteristics:

(1) Designed for encryption or decryption (e.g., Y-Code) of GPS precise positioning
service (PPS) signals;

(2) Designed for producing navigation results above 60,000 feet altitude and at
1,000 knots velocity or greater;

(3) Specifically designed or modified for use with a null steering antenna or
including a null steering antenna designed to reduce or avoid jamming signals;

(4) Designed or modified for use with unmanned air vehicle systems capable of
delivering at least a 500 kg payload to a range of at least 300 km.

ベースとなったCOCOMは基本的に「輸出」規制なのですが,ITARは輸出入の
両方に効力があります.そのため,ITARの規制品は米国に輸入もできません.
米国から許可を得て輸入した規制品を,再度米国へ輸出できないという
不思議なことも発生します.

当然,GPS受信機メーカとしては,大きな市場である米国のルールに従うことになり,
一律に同じような高度・速度規制となっているのではないかと思われます.

最後におまじない.
本記事の内容の合法性,正確性,安全性等,あらゆる点において保証しません.
またその利用の結果生じた損害について,一切責任を負いません.
コメント (2)
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

MAX2760基板の復活

2013-06-08 10:52:07 | ソフトウェア受信機
RTL2832U+R820Tの性能がいまひとつでがっかりしたので,
気分転換にMAX2769でGN3Sのクローンを作ってみます.

Sparkfun: SiGe GN3S Sampler v3

DE0-Nano用に作成したMAX2769基板が数枚余っていたので有効活用.
オプティマイズのEZ-USB FX2基板と接続します.



GN3SのファームウェアもSPIでフロントエンドの設定を制御しているので,
その部分をMAX2769用に改修するだけで,基本的に動作するはず.

とりあえず,MinGWをインストールして開発環境を整えよう.

勢い余って,Nexys 3用のアダプタも作成.



DE0-Nanoに続いて,こちらにもNamuruを移植してみたいと思います.

【追記】備忘録.
FX2のfirmwareを生成するためにSDCCが必要になりますが,
versionが3.0以上だとエラーが出てコンパイルできません.
2.9.0で動作確認.

sourceforge: sdcc-win32/2.9.0

libusb-win32のヘッダファイル名がv1.2.4.6以降はusb.hから
lusb0_usb.hに変更.applicationのソースコードで要対応.

sourceforge: libusb-win32-releases/1.2.6.0

【追記2】古いversionのGN3Sのソースが手に入らないかなと
探してみたら,本家コロラド大CCARのサイトにありました.

ccar.colorado.edu: gnss/files
コメント (5)
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

アンテナ給電回路の追加

2013-06-06 22:15:27 | RTL-SDR
良く見かけるGPSアンテナには,パッチアンテナと一緒に
LNAが組み込まれており,一般にアクティブアンテナと
呼ばれています.

このLNAには,アンテナの同軸ケーブルにDCを加えることで
給電します.

RTL2832U+R820Tには,この給電回路がありません.
GPSアンテナを接続するとなると,Bias-Tや電力分配器など
外部機器が必要になり不便です.

そこで,Micheleの記事を参考に,チューナの基板上に
給電回路を追加してみました.

Picasa photo albums: RTL2832U+R820T

RTL2832U+R820Tのケースは,上下の隙間に爪を立てると
簡単に開けることができます.



RFラインに保護ダイオードが入っているので,まずこれを
取り外します.



作業スペースが小さいうえに,2本のリードがGNDにはんだ
付けされているため,リワークで取り外すのは難しそうです.
先端の尖った小型のニッパで,リードを切ってしまうのが
簡単かと思います.



丁度RFライン上にパッドが空くので,ここにインダクタを
取り付けて給電します.

レジストがしっかり塗布されているので問題ないかと思い
ましたが,念のためにインダクタを取り付けるあたりを
カプトンテープで絶縁しました.

給電のDCは,すぐ近くの3.3Vのラインから供給します.
レジストをナイフの刃先などで削って,銅箔を露出させます.



インダクタには,47nHの巻線チップインダクタを使いました.

RSコンポーネンツ:インダクタ,表面実装,B82496C3470J,47nH,270mA

ジャンパ線は,その辺に転がっていたAWG30単線の切れ端の
被覆を剥いて,中の線材を使っています.



30分程度の簡単な作業ですので,GPS信号の受信を
試される方にはお勧めです.
コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

RTL-SDRでGPS信号の受信

2013-06-05 21:22:32 | RTL-SDR
RTL2832U+R820Tのチューナが届きました.
早速,GPS信号を受信してみます.



PCのUSBポートにチューナを接続すると,ドライバのインストールが
自動的に開始されます.

 (クリックで拡大)

RTL-SDRを使うために,後からドライバを入れ替えますので,
このままWindows Updateからドライバがインストールされるのを待ちます.

 (クリックで拡大)

インストールが完了したら,Zadigをダウンロードします.

sourceforge.net: zadig_v2.0.1.160.7z

Zadig.exeを実行すると,デバイスリストが空の画面が表示されます.

 (クリックで拡大)

Optionsをクリックして,List All Devicesを選択します.

 (クリックで拡大)

デバイスリストのプルダウンから,Bulk-In, Interface (Interface0)を選択します.
これがRTL2832Uのendpointになります.

 (クリックで拡大)

Driverの欄の矢印の先が入れ替えられるドライバになります.
ここにはWinUSBを選んでください.
Replace Driverのボタンをクリックすることで,新しいドライバがインストールされます.

 (クリックで拡大)

これで,ドライバの入れ替えは完了です.
デバイスマネージャを開くと,Bulk-In, Interface (Interface0)と認識されています.



チューナの動作を確認するために,RTL-SDRのサイトからpre-built Windows versionを
ダウンロードします.

RTL-SDR: pre-built Windows version

32ビット版と64ビット版がありますが,今回は32ビット版で試してみます.
まずは,チューナを認識してくれるかどうか,コマンドプロンプトから
rtl_test.exeを実行して確認します.

 (クリックで拡大)

問題なくR820Tを認識してくれました.
何故かE4000も探しに行きますが,そこはご愛嬌.

さて,下準備が整いましたので,本題のGPS信号の受信です.
ノーマル状態のチューナには,GPSアンテナのLNAに給電する機能がありません.
これは後で改造する予定ですが,とりあえずリファレンスを兼ねてu-bloxから
電力分配器経由で給電します.





RTL-SDRによる信号のキャプチャには,rtl_sdr.exeを使用します.
周波数はGPS L1信号の中心周波数である1575420000Hzを指定します.
サンプリング周波数はデフォルトのままで2048000Hzとします.
信号補足には,10msもあれば十分ですので,サンプル数を20480に指定します.
ゲインはデフォルトでautoです.

 (クリックで拡大)

さて,C/Aコードでスペクトル拡散されたGPS信号の受信電力は,
この状態では雑音電力以下ですので,FMラジオのようにSDR#
受信を確認することはできません.

ttrftech: RTL2832UドングルでGPS受信を試みる(失敗編)

逆拡散と信号補足には,Micheleが公開しているMatlabスクリプトを
使うことにします.

OneTalent GNSS: 20120414_rtl-sdr_matlab-gnss.7z

rtl_sdr.exeでは,受信したI/Q信号をunsignedの8ビットで順番に保存しています.
Micheleのコードでは,そのデータをint8で読みだしていますが,
正しくは以下のようになります.

signal = fread(fid, 'uint8=>double');
signal = signal - 127.5;
signal = signal(1,:) + 1i*signal(2,:);

読みだした信号の波形をプロットしてみます.



ヒストグラムにすると,AGCが正常に動作していることが確認できますが,
ややバイアスがあるようです.



電力スペクトル密度をプロットしてみると,バイアス成分のためにDCにピークが出ています.
また,LPFの帯域も0.8MHz程度で,GPS信号の帯域である2MHz(サイドバンドで1MHz)が
確保できていません.しかし,サンプリング周波数が2.048MHzですので,そこはあきらめます.



信号補足では,8msのインコヒーレント積分を実施しました.これでやっと信号が確認できるレベル.



u-bloxで観測される信号強度と比較すると,40dBHz以下の信号を補足するのは難しいようです.



やはり雑音電力が大きいですね…
RFのラインが75オームであったり,帯域が十分でなかったりと原因はいろいろありますが,
$10で入手できるフロントエンドですので,この程度で妥協すべきかな.
充分楽しめそうですが,本格的にSDRでGPS受信機を実現しようとすると力不足です.

もうひとつ問題になるのが,水晶振動子の周波数オフセットです.
補足した衛星のドップラには,共通して60kHz程度のオフセットが見られます.
これは,L1信号の中心周波数からすると,約40ppmの誤差になります.
さすがに100ppmということはなかったのですが,それでも大きなオフセットです.
水晶振動子を交換されているユーザもいるようですが,$10のデバイスにどこまで手を加えるか悩み所.

TV28Tv2DVB-T(R820T)国産水晶振動子( Xtal MADE IN JAPAN)交換のススメ 周波数のズレ大幅に改善!

ちょっと微妙な性能ですが,とりあえずGNSS-SDRLIBで使えるようにしてみます.

【追記】インピーダンスの不整合による損失を計算してみたら,大したことないですね.
50オームと75オームだと反射係数が0.2ですから,反射する電力はその二乗で0.04です.
したがって,電力損失は10*log10(0.96)=-0.177dBとなります.
SN比が悪いのは,何が根本的な原因なんだろう?

【追記2】どう見てもIC裏面のGNDがはんだ付けされていない.



【追記3】28.8MHzの水晶振動子をTCXOに換装しました.

28.8MHz TCXO option for RTL-SDR



【追記4】GPS信号を処理するMatlabファイルとIFサンプルデータをアップロードしました.

http://www.sensorcomm.co.jp/osqzss/rtl-sdr/gps20130606.zip

visibility_gps.mがメインのファイルです.fsがサンプリング周波数で2.048MHz,
fifがIF信号の周波数なので0Hz,FORMATはI/Q信号のため1となります.

searchfreqspanが衛星の運動やリファレンスクロックのオフセットなどに起因する
ドップラの周波数探索幅になります.衛星の運動によるレンジレートは最大で
600m/s程度ですので,GPS信号の0.19mの波長では約3kHzのドップラになります.
受信機のリファレンスクロックがTCXOであれば,周波数安定度を2ppmと仮定すると,
1575.42MHzのGPS信号では約3kHzの周波数オフセットとなります.これらを合計すると,
約6kHzが周波数探索幅になります.そのため,通常は10kHzも探索すれば十分です.

一方,RTL2832U+R820Tに搭載されている水晶振動子の周波数安定度を100ppm程度と
見積もると,GPS信号では150kHzの周波数オフセットになります.そのため,
searchfreqspanを200kHzに設定しています.

gps_noncohはノンコヒーレント積分の回数です.GPS信号の拡散符号1コード分の相関値を
足し合わせて平均化するのがノンコヒーレント積分になります.一方,1コード分以上の
信号の相関値を求める場合はコヒーレント積分となり,その回数をgps_cohで指定します.
コヒーレント積分の方がSN比の改善率が高いですが,航法メッセージによる符号の反転を
挟んで積分してしまう可能性があります.その場合の相関値は,最悪ゼロとなってしまい
ますので,航法メッセージのビットの位置が判らない限り,gps_cohは1としておくのが安全です.

【追記5】MatlabファイルとIFサンプルデータへのリンクが切れていますので,
Googleドライブに新たにアップしておきます.

https://goo.gl/7C7Xjw

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

bladeRF for GNSS SDR

2013-06-02 15:33:52 | ソフトウェア受信機
SDR関連のニュースを漁っていたら,bladeRFという
Kickstarterのプロジェクトを見つけた.

Kickstarter: bladeRF - USB 3.0 Software Defined Radio by Nuand

資金調達も成功し,すでに購入できるようだ.

Lime MicrosystemsのLMS6002Dを搭載していて,
300MHzから3.8GHzの送受信をカバーできるらしい.

PCとのインターフェイスもUSB 3.0なので,GPS L5や
GalileoのAltBOCのような広帯域な信号でも問題なく
取得できそうだ.

さらにAlteraのCyclone IVを搭載していて,LEが
40Kだと$420,115Kで$650とリーズナブル.

SDRのフロントエンドとして使っても良いし,
FPGAに受信機機能を実装することもできる.

さらに,送信機としても機能するので,記録した
IFデータを再生してRFとして出力することもできそうだ.
つまり,簡易的なGPS信号シミュレータが作れる!

夢が広がるな.
コメント (2)
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする