Quantcast
Channel: OSQZSS
Viewing all 643 articles
Browse latest View live

PocketSDRの増産


MATLAB/Simulink GPS examples

$
0
0
気づけばMATLAB/SimulinkでGPS関連のサンプルが増えていたので、個人的なメモ。
信号の捕捉・追尾までで、擬似距離の生成や測位まではできないようだけれど、
HDL coderによるFPGAへの実装など、参考になりそう。

GPS HDL Reference Applications Overview
https://jp.mathworks.com/help/wireless-hdl/ug/gps-hdl-reference-applications-overview.html

GPS HDL Acquisition and Tracking Using C/A Code
https://jp.mathworks.com/help/wireless-hdl/ug/gps-hdl-acquisition-and-tracking-using-cacode.html

GPS HDL Data Decode
https://jp.mathworks.com/help/wireless-hdl/ug/gps-hdl-data-decode.html

GPS Receiver Acquisition and Tracking Using C/A-Code
https://jp.mathworks.com/help/satcom/ug/gps-receiver-acquisition-and-tracking-using-ca-code.html

End-to-End GPS Legacy Navigation Receiver Using C/A-Code
https://jp.mathworks.com/help/nav/ug/end-to-end-gps-legacy-navigation-receiver-using-ca-code.html

GPS Signal Transmission, Acquisition and Tracking using PlutoSDR
https://jp.mathworks.com/help/satcom/ug/gps-receiver-acquisition-and-tracking-using-pluto-sdr.html

GPS Waveform Generation
https://jp.mathworks.com/help/satcom/ug/gps-waveform-generation.html

GPS receiver in Matlab

PocketSDR+FPGA

$
0
0
新しいフェーズに入った衛星測位技術を加速させる人材育成」の教材に
ソフトウェア受信機を活用していますが、FPGAでスタンドアローンの
GNSS受信機を開発したいという要望も多いです。

そこで、PocketSDRのフロントエンド部だけを取り出し、ZYBO-Z7など
DIGILENT社のFPGA評価ボードに接続できる基板を作製しました。



オリジナルのPocketSDRからは、基板を4層にしたり、RF分配器に
100オームのアイソレーション抵抗を追加したり、RF性能の改善を
試みています。



ZYBO-Z7とセットで、5台ほど準備する予定です。開発に興味があり
協力していただける方は、ぜひ人材育成プロジェクトまでご連絡ください。

bladeGPSのビルド

$
0
0
GPS信号シミュレータを月測位信号シミュレータに改造するために、
久しぶりにbladeGPSをソースからビルドしてみました。

https://github.com/osqzss/bladeGPS

ビルド自体に問題はないものの、bladeGPSを実行すると、libbladeRFの
エラーが出て停止してしまいます。

[ERROR @ host/libraries/libbladeRF/src/backend/usb/libusb.c:1090]

何のエラーだろうと検索してみると、高橋先生のブログがヒット。

https://s-taka.org/pocketsdr-ap-with-bladerf-part2/

どうやら、最新のFX3ファームウェアとFPGAビットストリームだと、動作しないようです。
そこで、ファームウェアをv2.3.2に、ビットストリームをv0.11.0にロールバック。

https://www.nuand.com/fx3_images/
https://www.nuand.com/fpga_images/

インストーラのリリースだと、2019.07に相当します。

https://www.nuand.com/win_installers/
https://github.com/Nuand/bladeRF/releases

ファームウェアの書き換えには、bladerf-cliを使います。

bladeRF-cli --flash-firmware bladeRF_fw_v2.3.2.img

ビットストリームは、C:\Program Files\bladeRF\に置かれているhosted*.rbfを上書きします。

これで、無事にbladeGPSの動作が確認できました。

Galileo信号シミュレータ

$
0
0
gps-sdr-simの派生プロジェクトで、Galileo E1B/E1Cに対応した
オープンソースのベースバンドシミュレータがGitHubで公開されました。

https://github.com/galileoz/gal-osnma-sim

航法メッセージによる信号認証であるNMA(navigation message authentication)の
テストもできるようです。

本家もがんばってGNSS対応しないといけないですね。

船舶のサイバー攻撃演習

SDRコンテスト

$
0
0
測位航法学会の協力のもと、「新しいフェーズに入った衛星測位技術を加速させる人材育成」が
SDRによるGNSS信号の受信、デコードのコンテストを開催しています。

https://gnss-learning.org/contest/

使用するSDRは、自作でも公開されているものでも構いません。
上位入賞者には学会から賞品もでますので、ぜひご参加ください。

P.S. 公開されているツールであれば、PocketSDRがお勧めです。

https://github.com/tomojitakasu/PocketSDR

P.P.S PocketSDRのツールは、MAX2771の仕様に合わせて設計されているため、
Qサンプルの符号によっては信号追尾が上手くいかないかもしれないとのコメントを
いただいたので、コンテストの提供データで確認してみました。

まずは、信号捕捉。中心周波数が1575.42MHzのrfdata1.binでGPS L1C/Aコードを探してみます。

> py pocket_acq.py rfdata1.bin -f 6 -sig L1CA -prn 1-32



次に、可視衛星の中からPRN05の信号を追尾してみます。

> py pocket_trk.py rfdata1.bin -prn 5 -sig L1CA -f 6 -p



どうやらPocketSDRのツールで問題なく信号追尾と航法メッセージのデコードができそうです。

しかし、これでは皆同じ結果になって、コンテストの上位は狙えません。
少しでも多くの衛星を捕捉し、追尾、デコードするためには、いろいろと工夫が必要です。
皆さまのチャレンジをお待ちしています。

Digilent Cable Driver

$
0
0
久しぶりにZybo Z7にbitstreamを書き込もうとしたら、ターゲットを認識してくれない。



原因が不明なので、Digilentのcable driverを再インストール。インストーラはここで見つかります。

vivadoインストールフォルダ\data\xicom\cable_drivers\nt64\digilent\install_digilent.exe

Vitis IDE 応答なし

$
0
0
今度はVitisを起動してworkspaceを選んでも、「Vits IDE 応答なし」のまま
Vitis IDEが立ち上がらない。

原因不明だけれども、「eclipse.exe -clean」で解決するらしい。
https://marsee101.blog.fc2.com/blog-entry-5551.html

魔法の言葉、「vitis -eclipseargs -clean」でVitisを起動してworkspaceを選ぶと、
無事にVitis IDEが起動しました

PocketGNSS

$
0
0
PocketSDR+FPGAの開発環境を整えるべく、まずは2つのMAX2771の中心周波数や
サンプリング周波数を設定できるようにします。基本的には↓と同じ。

https://blog.goo.ne.jp/osqzss/e/9beea46afd397912bbcebe5a57c8a14e



デフォルトのレジスタ値は、PocketSDRと同じにしています。



問題なくレジスタが設定できているようです。



開発のベースとなる環境は整ったので、次は相関器を実装して信号捕捉を目指します。
MATLAB/SimulinkのHDL Coderも試してみたい。

https://blog.goo.ne.jp/osqzss/e/8f2b39bbacd19d9d08f037cce23fd5de

P.S. ソースコードをGitHubで公開して行きたいのだけれども、Vivadoのプロジェクトや
Block Design、Vitisのプロジェクトをそれぞれバージョン管理する良い方法が分からない。

P.P.S. なひたふJTAG日記:Vivadoのプロジェクトをgitで管理する最小限は何か

http://nahitafu.cocolog-nifty.com/nahitafu/2019/05/post-60422b.html

Sバンドアンテナ

$
0
0
月測位受信機の動作試験に、同じSバンドのIRNSSの測位信号を使っています。
https://blog.goo.ne.jp/osqzss/e/be4923bfa13ada69975d047cee67b7e7

パッチアンテナがむき出しだったり、LNAの給電ラインを別途準備したりと、
屋外での実験には不便だったので、シェルに収められるSバンドアンテナ基板を
製作しました。





アンテナの裏側には、LNA、Sバンドフィルタ、給電回路を実装しています。



アンテナのシェルは、AliExpressで購入。
TNC-MCX変換アダプタを使って、アンテナのRFラインを引き出します。



見た目は良い感じ。はたして、ちゃんと受信してくれるのでしょうか。

相関器

$
0
0
PocketGNSSに実装予定の相関器の構成を示します。
まずは、スタンダードにGPS L1 C/Aコードの相関器を組んで行きます。



ひとつの衛星の信号処理には、この相関器が2つ必要になります。
一方の相関器では、搬送波NCOによって同位相の搬送波レプリカが、
もう一方の相関器では直交位相の搬送波レプリカが生成されます。

P.S. 相関器は、オープンソースのNAMURUをベースに開発します。
DE0-Nanoに移植したのが10年以上前なのね。すっかり忘れている。

https://blog.goo.ne.jp/osqzss/e/e088b635bc33084117b7e9606316a569

CDC Synchronizer

$
0
0
MAX2771のサンプリングデータは、ADCのクロックに同期していますが、
ZynqのPLでは、PSのPLLが供給するFCLKを使うことになります。



そこで、PLのクロックでサンプリングデータを取り込み、ADCクロックの
エッジに同期した形でFCLKの1クロックだけenableのパルスを生成します。
相関器は、このenableのときだけ、サンプリングデータをaccumulationします。

とりあえず、MAX2771とPLとのインターフェイスは、こんな感じ。





周波数デザインは異なるものの、後はほぼストレートにnamuruを移植できると思います。

PocketSDR+FPGA

$
0
0
新しいフェーズに入った衛星測位技術を加速させる人材育成」の教材に
ソフトウェア受信機を活用していますが、FPGAでスタンドアローンの
GNSS受信機を開発したいという要望も多いです。

そこで、PocketSDRのフロントエンド部だけを取り出し、ZYBO-Z7など
DIGILENT社のFPGA評価ボードに接続できる基板を作製しました。



オリジナルのPocketSDRからは、基板を4層にしたり、RF分配器に
100オームのアイソレーション抵抗を追加したり、RF性能の改善を
試みています。



ZYBO-Z7とセットで、5台ほど準備する予定です。開発に興味があり
協力していただける方は、ぜひ人材育成プロジェクトまでご連絡ください。

P.S. まずはEZ-USB FX2LP Discoveryに接続して、PocketSDRとして動作を確認。
問題なくGNSS信号の捕捉が確認できました。




Namuru-Nanoの移植

$
0
0
10年以上も前に、NamuruのHDLコードをAlteraのDE0-Nano+MAX2771の
組み合わせに移植しています。

https://blog.goo.ne.jp/osqzss/e/e088b635bc33084117b7e9606316a569

すっかり放置しており、細かなところを忘れていますが、HDLに関しては
ほぼこのままZynqベースのPocketGNSSに移植できるかと思います。

CPUがソフトコアのNios IIから、Zynq内蔵のARMに変わりますので、
バス回りは調整が必要です。FPGAに実装される相関器が汎用的に使えるよう、
相関器とCPUとのインターフェイスはSPIなどにした方が良いかもしれません。

オリジナルのNamuru-NanoのソースコードをGoogle Driveにソースコードを
アップしましたので、興味のある方は開発に参加してもらえると嬉しいです。

https://drive.google.com/drive/folders/141BSfAa7lHga43nRK0nXX9STol0DK0OE?usp=sharing

Namuru-NanoのIPコア

$
0
0
Namuru-NanoのbasebandのHDLをVivadoで合成してみると、当然、
AlteraのIPであるlpm_counterとlpm_shiftregが未定義とエラーが出ます。



lpm_counterは、Xilinx LogiCORE IPのbinary counterに置き換えられそうでしたので、
VivadoのIPカタログからbinary counterを開き、各種パラメータを設定します。

VivadoでのIPコアの使いかたは、こちらを参考にしました。
ACRi:FPGA をもっと活用するために IP コアを使ってみよう (2)

Binary CounterのComponent Nameは、Altera IPと同じlpm_counterにします。
Output Widthは24ビット、Loadableを有効にし、Count ModeはDOWNです。
Synchronous Clearも有効にします。





設定ダイアログのOKをクリックして閉じると、Generate Output Productsの
ダイアログが開きます。GenerateをクリックしてIPコアを合成します。



IPコアのモジュールが準備できたら、SourcesペインのIP Sourcesタブから、
テンプレートファイル(.veo)を開きます。



このインスタンス生成のテンプレートを、もとのソースコードにコピーして、
入出力ポートの信号を接続します。



一方、lpm_shiftregは、ちょうど置き換えれるようなIPが見当たりません。
そのため、こちらはモジュールのHDLコードを追加します。



これで、Run Synthesisを実行すると、errorもwarningもなしで、合成が完了します。



P.S. Binary Counterの設定画面を見ると、Final Count Valueが1からFFFFFEまでしか選べません。
0までカウントダウンしてくれないのでしょうか?それとも、Restrict Countを有効にしなければ、
0またはFFFFFFがFinal Count Valueになるのでしょうか?別途、テストベンチを組んで確かめよう。

P.P.S. 8ビットのBinary Counterを作成して、テストベンチで動作を確認してみました。
lpm_counterと同様に、loadされた値から0までカウントダウンしてくれるようです。





MMCMの追加

$
0
0
Namuru-Nanoでは、IF信号をサンプリングするクロックを6逓倍して
システムクロックとし、サンプリングクロックはenable信号にするという
少しトリッキーな実装をしています。

これは、オリジナルのNamaruのコードをできるだけ変更しないための
苦肉の策ですが、とりあえずこのままポートします。

Namuru-Nanoでは、システムクロックの生成にNios IIのPLLを使っていましたが、
ZynqではClocking Wizardを使って、MMCMを追加します。



クロック入力の周波数は、とりあえずNamuru-Nanoと同じ16.368MHzとし、
それを6逓倍した90.208MHzのシステムクロックと、そのままのenable信号を
出力します。







生成されたIPコアは、トップモジュールに組み込みます。
フロントエンドから供給されるサンプリング信号s_clkを入力とし、
システムクロックのclkと、enable信号のsample_clkを出力します。
MMCMのlocked信号も、basebandモジュールのリセット信号に追加しています。



次は、basebandモジュールをIP化して、AXIバスに繋げよう。

DESCANSO

船舶のサイバー攻撃演習

Viewing all 643 articles
Browse latest View live