OSQZSS

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

28.8MHz TCXO option for RTL-SDR

2013-09-14 16:53:39 | RTL-SDR
Esuの暇つぶしの記事に触発されて,28.8MHzのTCXOを入手.
早速,実装してみました.

aitendoで販売しているR820T+RTL2832Uのワンセグチューナは,
水晶振動子を外すと,下にSMDのパッドが出ているため,
TCXO実装の改造も比較的簡単です.



面倒だったのが,電源ラインのジャンパ.
AWG30の単線では,太いし硬い.半田ののりも悪い.
何か良いワイヤはありませんか?



GPS信号で動作を確認してみましたが,結果は微妙.
4msのノンコヒーレント積分で信号が捕捉できるので
悪くはないのですが,ノイズフロアはまだ高め.
周波数オフセットがなくなっただけでも良しとするか.



この程度のSN比であれば,なんとか信号追尾もできそうです.
次は測位まで試してみよう.

【追記】メモ.
千石電商で取り扱いのあるAWG32の極細より線がお勧めらしい.
秋葉原に寄った際に購入しよう.

協和ハーモネット:耐熱電子ワイヤ UL-3417-32

【追記2】オリジナルの水晶振動子のチューナとSN比を比較して
みたけれど,まったく変化なし.中身は同じ水晶なのだから,
短時間の特性も同じなのは当然か.周波数安定度の改善だけだと,
GPS信号受信にはそこまで魅力はないなあ.
コメント (3)
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

SDRの本

2013-08-20 09:54:48 | RTL-SDR
メモ

なにやらCQ出版がSDR推し.

ワンセグUSBドングルで作るオールバンド・ソフトウェア・ラジオ
別冊CQ ham radio QEX Japan No.8 RTL-SDRではじめるソフトウェア受信

読んでみたい気もするけれど,いまのところGNSS信号以外の
受信には興味ないんだよな.

そしてaitendoのRTL2832U+R820Tの在庫がまた復活していた.

aitendo: ワンセグRX DVB-T+DAB+FM R820T高性能受信機

【追記】本の内容に関しては,ゆうちゃんのパパさんのレポートに
期待しよう.
コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

28.8MHzのTCXO

2013-08-12 11:17:11 | RTL-SDR
メモ

RTL2832U+R820Tの水晶振動子をTCXOに交換されている方を発見.

Esuの暇つぶし:E4000 RTL 改造しました

小売りで入手できるようになったのかとテンションが上がりましたが,
メーカらかのサンプル品とのことでがっかり.

購入するとなると1000個とかのリール単位なんだろうな.
せめて100個くらいなら個人で購入して残りは配布できるのに.

aitendoあたりで小売りしてくれないかな.
コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

RTL-SDRでSnapshot測位

2013-07-03 17:48:14 | RTL-SDR
RTL2832U+R820Tのワンセグチューナがaitendoで購入できるようです.
特売品で,お値段は999円とお買い得.

aitendo: ワンセグRX DVB-T+DAB+FM R820T高性能受信機

RTL-SDRを利用したGPS測位は,信号捕捉はなんとかなるものの,
SN比がどうしても悪く,信号追尾ができないまま,あきらめていました.

しかし,このままでは悔しいので,snapshot測位という別の手法で
測位してみます.

Google: gps snapshot positioning

GPSによる測位では,衛星と受信機間の距離を,電波の伝搬遅延で
計測します.衛星からは,C/Aコードと呼ばれるビットパターンが
1ms周期で放送されています.これは距離に換算すると約300kmに
相当します.このビットパターンのどの位置を受信したのか判れば,
その信号がいつ送信されたのか知ることができます.

送信機と受信機間の距離が300km以下であれば,これだけで距離が
判るのですが,衛星の高度は約20,000kmなので,1コード以上の
距離がありあす.これは,RTK測位における搬送波位相のcycle
ambiguityに似ています.疑似距離のおいても,code ambiguityが
存在し,これを解かなければなりません.

通常であれば,航法メッセージに含まれるz-counterと呼ばれる
信号の送信時刻情報を読み出すことで,このcode ambiguityを
簡単に解くことができます.しかし,RTL2832U+R820Tでは,
信号補足はできても,信号追尾には失敗して,航法メッセージを
読むことができません.

Snapshot測位では,おおよその位置と受信時刻が既知であると
仮定して,code ambiguityを解きます.1コードの長さは,
距離にして300kmですので,受信機の初期位置がこの程度の
精度で判っていれば,軌道情報から計算した衛星位置から,
code ambiguityを推定することができます.

では,早速snapshot測位を試してみます.

前回と同様に,RTL-SDRで取得したGPS信号をまずはMicheleの
Matlabスクリプトで処理して,信号を補足します.



相変わらず雑音が大きいのですが,なんとか7衛星が補足できました.
このとき,PRN31の相関波形は次のように見えています.



RTL-SDRのサンプリング周波数が2.048MHzですので,1ms分のデータは
全部で2048ポイントとなります.このとき,相関波形がピークを示す
位置が,C/Aコードの先頭になります.1msのコードは,距離にして
300kmですので,各ポイントの間隔は,約150mに相当します.



これで,code ambiguityはあるものの,疑似距離が部分的に求められた
ことになります.

おおまかな受信時刻は,RTL-SDRでキャプチャした信号ファイルの
プロパティから,作成日時を見ることで知ることができます.
受信機の初期位置は,適当に東京都内とします.
衛星の軌道情報は,IGSから予測軌道を含むultra-rapidをダウンロードします.

実際に測位してみた結果をGoogle Mapに表示してみると,
隣の建物を指していますが,まあまあな位置精度です.



RTL2832U+R820Tのチューナは,GPS信号の受信には何かと
不満の残るデバイスですが,工夫次第では測位もでき,
価格分は十分楽しめるかと思います.

【追記】アマゾンでも買える!

amazon.co.jp: RTL-SDR TV28Tv2DVB-T(R820T)チューナー

【追記2】aitendoで購入する際には,MCX-SMA変換コネクタも
一緒に注文すると幸せになれるかもしれません.

aitendo: SMA-MCX同軸変換コネクタ
コメント
  • 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でシェアする

RTL-SDRのTCXO換装

2013-05-28 18:10:47 | RTL-SDR
RTL2382U+R820Tがまだ到着していないので,ただの妄想日記.

本体の価格が10ドル程度ということもあり,実装されている
水晶振動子の精度が悪いとレポートされています.

100ppmは問題外として,水晶振動子では30ppm程度が現実的.
それでもGPS信号の補足からすると,周波数誤差が大きすぎます.

信号補足で探索しなければならない周波数の不確定性は,
主に衛星の運動によるドップラと受信機クロックの周波数誤差です.

地上から見た衛星の運動は,視線方向の相対速度で最大でも600m/sなので,
波長が0.19mのGPS信号では,約3kHzのドップラが生じます.

一方,1575.42MHzの搬送波周波数にとって,受信機クロックの周波数誤差は,
1ppmで約1.5kHzのオフセットとなります.

信号補足では,この周波数の不確定性を,500Hz刻み程度で探索するため,
単純に周波数誤差が増加すれば,信号補足に時間がかかることになります.

視線方向の相対速度は衛星の運動が支配的ですので,信号探索の時間を
決めるのは,受信機クロックの周波数誤差となります.

やはりここは数ppmのTCXOを搭載したい!

残念ながら,RTL2382Uに使われているクロックは28.8MHzという特殊な
周波数で,標準品としては入手できそうにありません.

水晶発振子を特注されている方もいらっしゃいましたが,
TCXOとなると単品の発注は難しく,小ロットでも10万円以上はかかりそうです…

ところが,その半分の周波数である14.4MHzは標準的なTCXOとして
Digikeyで購入できます.しかも0.5ppmの安定度!

Digikey: ASVTX-09-14.400MHZ-T

これを2逓倍すれば良いのですが,このあたりは知識なし.
普通にPLLで良いのかな?

Digikey: ICS502MILF

しかし,クロック出力がCMOSになるし,どう処理したら良いのだろう?

いずれにせよ,これで28.8MHzはつくれそうですので,実機が到着したら試してみましょう.
コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

RTL-SDRの開発環境

2013-05-22 22:27:16 | RTL-SDR
RTL2382U+R820Tのチューナがまだ届かないので,
とりあえずRTL-SDRの開発環境を整えてみました.

開発ツールは,GNSS-SDRLIBへの実装を見越して
Visual Studio Express 2012 for Windows Desktopです.

まず,RTL-SDRのページからpre-built Windows versionを
ダウンロードします.

RTL-SDR: pre-built Windows version

この中には,RTL-SDRのライブラリとDLL,ヘッダファイル,
そしてlibusb-1.0とpthreadのDLLが入っています.

さらに,rtl_test.exeやrtl_sdr.exeといったアプリも
入っていますが,今回はこれらをリビルドしてみます.

まず,ライブラリなどをどこか判りやすいフォルダへコピーします.
ここでは,C:\rtlsdrにコピーしました.

次に,RTL-SDRのソースを入手します.Gitを使ってソースファイルを
すべてダウンロードしても良いのですが,今回はサンプルツールの
リビルドだけですので,リポジトリから必要なファイルだけコピーします.

git: rtl-sdr/tree/src/

サンプルツールのソースとして,rtl_sdr.cを選びました.
また,Windowsでビルドする場合には,getoptフォルダの
getopt.cとgetopt.hも必要になります.

これで材料はそろいました.次は,Visual Studio Express 2012で,
New ProjectからWin32 Console Applicationを作成します.

 (クリックで拡大)

このとき,Applicaton SettingsのAdditional Optionsで,
Precompiled headerではなく,Empty projectにチェックを
入れてください.

 (クリックで拡大)

新しく生成されたプロジェクトフォルダに,rtl_sdr.cとgetopt
フォルダをコピーします.



さらに,ソースファイルをSolution Explorerに追加します.



次に,RTL-SDRのライブラリを使うために,必要なフォルダへの
パスをDEBUGのPropertiesから指定します.



まず,C:\rtlsdrへコピーしたヘッダファイルへのパスを指定します.

 (クリックで拡大)

次に,ライブラリへのパスを指定します.Visual Studio Express 2012は,
デフォルトでx32アプリをビルドしますので,C:\rtlsdr\x32を指定します.

 (クリックで拡大)

さらに,LinkerのAdditional Dependenciesにrtlsdr.libを追加します.

 (クリックで拡大)

これでビルドの準備が整いました.しかし,ダウンロードしたソースを
そのままビルドすると,次のようなエラーが発生します.



そこで,エラーメッセージの指示通りに,rlt_sdr.cとgetopt.cの先頭に,
_CRT_SECURE_NO_WARNINGSを書き加えます.



これでエラーも警告もなく,rtl_sdr.exeがビルドできるようになりました.

最後に,rtl_sdr.exeを実効するためにはrtlsdr.dllが必要になりますので,
環境変数のPATHに,DLLをコピーしたC:\rtlsdr\x32を加えておきます.



このアプリケーションは,チューナから出力されるIF信号のサンプルを
ファイルに保存します.ファイルに保存する代わりに,GNSS-SDRLIBの
入力信号とすれば,リアルタイムのソフトウェアGPS受信機として動作するはず!

チューナの到着が待ち遠しいです.

【追記】フラットデザインが流行なのだろうけど,新しいVisual Studioの
インターフェイスはヌルっとしていて使いづらい.テキストなのかボタン
なのかタブなのか,みんな同じに見える.

どうしても気に入らない点は,Output windowのエラーや警告メッセージが
テキストとして部分的にコピーできないこと.エラーや警告なんて,ネットで
調べないと何だか判らないものが多い.コピーできないなら全部手入力.
これだけでもなんとかならないかな…

【追記2】リファレンスを見る限り,エラーは一覧でしかコピーできないようだ.
エラー一覧をExcelのスプレッドシートに張り付けたりなんてしたことないよ…

Visual Studio 2012: [エラー一覧]ウィンドウ

【追記3】IntelliSenseが大量のエラーメッセージを出していることに気付く.
それでもビルドは通るから,無視していいのか?どれもgetopt関連のエラーで
GNSS-SDRLIBへの実装には影響ないので,とりあえずスルー.
コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする