OSQZSS

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

Building with Petalinux

2022-11-30 17:03:40 | SDR
Petalinuxがインストールできたので、meta-adi-xilinxの手順に従って
Petalinuxのプロジェクトをビルドしてみます。

https://github.com/analogdevicesinc/meta-adi/tree/2021_R1/meta-adi-xilinx

まず初めに、ターゲットであるZedBoard+AD-FMCOMMS3のHDLを
ビルドしておきます。hdlのブランチは、hdl_2021_r1になります。

mkdir adi
cd adi
git clone https://github.com/analogdevicesinc/hdl.git
cd hdl
git checkout hdl_2021_r1
git status
cd projects/fmcomms2/zed
make

ビルドが完了すると、fmcomms2_zed.sdkフォルダの中に、
system_top.xsaが出力されています。

xsaの準備ができたら、Petalinuxのプロジェクトを作成します。

cd /home/lunacube/petalinux
source /home/lunacube/petalinux/2021.1/settings.sh
petalinux-create -t project --template zynq --name fmcomms2_zed

meta-adiのブランチは、2021_R1になります。

git clone https://github.com/analogdevicesinc/meta-adi.git
cd meta-adi
git checkout 2021_R1
git status

Petalinuxのプロジェクトフォルダに移動し、xsaファイルをコピーしておきます。

cd /home/lunacube/petalinux/fmcomms2_zed
cp /home/lunacube/adi/hdl/projects/fmcomms2/zed/fmcomms2_zed/system_top.xsa ./

次のコマンドを実行すると、Petalinuxのconfiguration menuが表示されます。

petalinux-config --get-hw-description=./system_top.xsa

ここで、Yocto Settings -> User layersに進み、クローンしたmeta-adi-coreと
meta-adi-xilinxのレイヤを追加します。[追記]さらに、Yocto Settingsで、
Enable Network sstate feedsのオプションをdisableします。
設定が完了したら、Saveしてconfiguration menuを終了します。

続いて、device treeを指定します。一覧から、fmcomms2_zedのHDLには、
zynq-zed-adv7511-ad9361-fmcomms2-3を選択します。

echo "KERNEL_DTB=\"zynq-zed-adv7511-ad9361-fmcomms2-3\"" >> project-spec/meta-user/conf/petalinuxbsp.conf

こでれビルドの準備ができました。buildフォルダに移動し、ビルドします。

cd build
petalinux-build

P.S. 順調にビルドできるかと思いきや、"No suitable staging package found"のエラーが多発。
ビルドが通るのであれば、無視していいようだけれど、どうなの?

https://support.xilinx.com/s/article/000033124?language=en_US

P.P.S. 解決しました。

https://blog.goo.ne.jp/osqzss/e/e3a8d4dae0928d71415ad3e66a68dcc8
コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

Petalinuxのインストール

2022-11-29 22:35:26 | SDR
しばらく放置していたZedboard+AD-FMCOMMS3の開発に、XilinxのPetalinuxを試してみます。
Analog Devicesの評価ボード用のレイヤーは、meta-adiというレポジトリで公開されています。

https://github.com/analogdevicesinc/meta-adi/tree/2021_R1

現時点のリリース版である2021_R1のブランチでは、Petalinux 2021.1を使用しています。
Petalinuxのリファレンスガイドを見てみると、サポートしているOSの一覧があります。
今回はUbuntu 18.04.5にインストールしてみます。

https://docs.xilinx.com/r/2021.1-English/ug1144-petalinux-tools-reference-guide/Installation-Steps

まずは、Xilinxのサイトからpetalinux-v2021.1-final-installer.runをダウンロード。
続いて、リファレンスガイドの手順に従い、インストールしてみます。

mkdir -p /home/lunacube/petalinux/2021.1
chmod 755 ./petalinux-v2021.1-final-installer.run
./petalinux-v2021.1-final-installer.run -d /home/lunacube/petalinux/2021.1/ -p "arm"

この時点で、いくつかのツールが不足しているとエラーが出ます。
結局、アップデートをする必要があり、Ubuntuのバージョンも18.04.6になりました。
公式にはサポートされていないバージョンですが、とりあえずこのまま進めます。

sudo apt install xterm autoconf libtool texinfo zlib1g-dev gcc-multilib

再度、インストールを試みると、次のdevelopment librariesが不足しているとエラーがでます。

- ncurses
- zlib1g:i386

ncursesには、ncurses-devをインストールします。

sudo apt install ncurses-dev

zlib1g:i386には、i386のアーキテクチャに必要なパッケージをインストールする必要があります。

sudo dpkg --add-architecture i386
sudo apt update
sudo apt install zlib1g:i386

再再度、インストールを試みると、すべてのチェックにパスしてインストールが開始されます。
3回ほどライセンスの承諾が求められるので、すべてyで承認。
これで無事にPetalinuxがインストールされました。

P.S. リファレンスガイドには、/bin/shのシンボリックリンクをdashからbashにするようにと
注意書きがあるので、手順にしたがって変更します。

sudo dpkg-reconfigure dash

Configuring dashの画面が開くので、Use dash as the default system shell?にNoを選択します。
/bin/shのシンボリックリンクがbashに変更されたかどうか、確認します。

ls -l /bin/sh

P.P.S UbuntuへのVivado+Vitisのインストールは、こちらを参照。

https://www.acri.c.titech.ac.jp/wordpress/archives/3403

P.P.P.S Analog Devicesが提供するHDLのレポジトリもクローンしておきます。

https://github.com/analogdevicesinc/hdl/tree/hdl_2021_r1

今回使用するブランチはhdl_2021_r1になります。

git clone https://github.com/analogdevicesinc/hdl.git
cd hdl
git checkout hdl_2021_r1
git status

P.P.P.P.S Petalinux 2021.1に必要なパッケージのリストは、
PetaLinux Tools Documentation Reference GuideのInstallation Requirementsに
リンクのあるMaster Answer Record: 76256からダウンロードできる
2021.1_PetaLinux_Package_List.xlsxに記載されています。
リストを見ると、Ubuntu 18.04.6もサポートされているようです。

https://support.xilinx.com/s/article/76526?language=en_US
コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

Sバンド測位信号の受信

2022-11-21 15:53:40 | ソフトウェア受信機
IRNSSのSバンド信号が受信できないのは、もう干渉信号くらいしか
原因が考えられないということで、キャンパスのメインエリアを離れ、
グラウンドで観測をしてみました。

PCの無線LANとBluetoothもOFFにします。

その結果、あっさりと受信が成功。ちょっと拍子抜けです。







電波干渉は問題になるだろうなと思ってはいましたが、信号捕捉がまったく
出来なくなるほどとは予想外でした。無線LANのアクセスポイントや携帯基地局が
乱立する都市部では、ほぼ使いものにならないのではないでしょうか。

ピンポイントでどの干渉信号が原因だったのか分かりませんが、
これはこれで研究テーマとして面白そうです。
コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

PlutoSDRでNavICの受信

2022-11-20 13:53:10 | ソフトウェア受信機
PlutoSDRでIRNSSの測位信号をdumpするためのツールが準備できました。

https://github.com/osqzss/PocketSDR/blob/master/python/plutosdr/pluto_dump.py

まずは、お試しでL1 C/A信号から受信してみます。

>python pluto_dump.py pluto_L1CA.bin



こちらは順調で、まったく問題ありません。

続いて、bladeRFでも受信が確認できているIRNSSのL5信号を受信してみます。

>python pluto_dump.py -sig I5S pluto_I5S.bin





PlutoSDRでも受信できましたが、ややC/N0が低めです。
PSDを見てみると、何やらインバンドで干渉信号が入ってきています。
L5信号(1176.45MHz)と共用している無線業務を調べてみると、航空用DMEがありました。
近くに小牧空港があるとはいえ、さすがにこれは違うように思えます。
bladeRFでは見られなかった干渉信号ですので、PlutoSDR自身のEMIかもしれません。

PlutoSDRの動作は確認できたので、最後に今回の主役のSバンド信号です。

>python pluto_dump.py -sig ISS pluto_ISS.bin





残念ながら、PlutoSDRでも測位信号が確認できませんでした。
ヒストグラムを見ると、DC成分が大きすぎます。このあたりは何か手当が必要かもしれません。

To be continued...

P.S. 4G周波数帯を調べてみると、WIMAXやWIMAX2+に使われている2.5GHz帯の
Band 41(2496MHz~2690MHz)がIRNSSのSバンド信号にかなり近い。
無線LANもチャンネル13、14あたりが影響しそう。
キャンパスの建物からもっと離れて実験しよう。

P.P.S bladeRFで受信したデータも確認してみたら、L5信号にはPlutoSDRと同じように
干渉信号が見られました。これ、何なのだろう?


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

PlutoSDR in Python

2022-11-19 11:48:41 | ソフトウェア受信機
bladeRFでIRNSSのSバンド信号受信が成功しない状況が続くので、
気分転換にPlutoSDRでの受信を試みてみます。



ついでに、PocketSDRのdumpツールのように、PythonでPlutoSDRを
動かす環境を整えます。

まずは、ドライバのインストール。PlutoSDR-M2k-USB-Drivers.exeを
ダウンロードします。現時点でのバージョンはv0.9です。

https://github.com/analogdevicesinc/plutosdr-m2k-drivers-win/releases

次に、libiioをインストールします。Windowsのインストーラは、
libiio-0.24.gc4498c2-Windows-setup.exeになります。

https://github.com/analogdevicesinc/libiio/releases

続いて、libad9361-iioをインストールします。libad9361-0.2-setup.exeを
ダウンロードして実行すると、win32またはwin64のzipファイルが自動的に
ダウンロードされて、インストールされます。

https://github.com/analogdevicesinc/libad9361-iio/releases

最後に、pyadi-iioをインストールします。これはインストーラではなく、
ソースファイルを一式、GitHubからダウンロードします。

https://github.com/analogdevicesinc/pyadi-iio

zipファイルを展開後、コマンドプロンプトで以下のコマンドを実行します。

cd pyadi-iio
python -m pip install --upgrade pip
pip3 install -r requirements.txt
python setup.py install

これで準備完了です。Pythonを起動して、PlutoSDRの動作を確認してみます。



無事に動作が確認できたので、次はPlutoSDR用のdumpツールを作ろう。

P.S. pyadi-iioでキャプチャされた複素数arrayのI/Qサンプルを、
int16のI,Qの順番でファイルに書き出す良い方法はないだろうか?

P.P.S 結局、こんなところに落ち着いた。

iq_samp_int16 = np.stack([np.real(rx_samples).astype(np.int16), np.imag(rx_samples).astype(np.int16)], 1)
iq_samp_int16.tofile("sc16dump.bin")

P.P.P.S

pyadi-iioは、ソースファイルからではなく、pipを使ってインストールした方が簡単。

https://wiki.analog.com/resources/tools-software/linux-software/pyadi-iio
コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

NavIC S-band IQ

2022-11-13 13:11:15 | ソフトウェア受信機
いろいろ試しているものの、いまだにIRNSSのSバンド信号の受信に成功しません。

何か見落としているのかなと、文献などをネットで調査していたところ、
偶然にIRNSSのL5とSバンドのサンプリングデータを見つけました。

https://zenodo.org/record/5699785#.Y3BvZ3bP0uV

PocketSDR側の動作確認に使えそうなので、早速ダウンロード。
フォーマットはINT16のIQなので、"-sdrfmt sc16"をオプションに追加します。
信号のオプションには、"-sig ISS"を選びます。







PocketSDRでSバンド信号の受信が確認できました。
どうやら問題はbladeRF側のようです。どこが間違っているのだろう?

set frequency rx 2492.028M
set bandwidth rx 3M
set samplerate rx 4M
set agc rx off
set gain rx 60
cal lms
cal dc rx
rx config format=bin n=400k file=S_IRNSS.bin
rx start
rx wait

P.S. PocketSDR v0.8のpocket_acq.pyでは、4MHzのサンプリングデータを
読み込んだときに、"-p"のオプションでエラーが発生します。これは、coffsのサイズを
計算するときの丸め誤差が原因ですので、102行目を次のように改修します。

coffs = np.arange(0, T * fs, 1.0, dtype='float32') / fs
コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

PocketSDR+Arty Z7

2022-11-12 13:27:38 | FPGA
PocketSDRのフロントエンドをArty Z7に接続するためのアダプタ基板を製作。



FX2LPの基板に搭載すればPocketSDRとして動作し、
Arty Z7に搭載すればZynqベースの2周波GNSS受信機開発用に使えます。
コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

Sバンドの拡散符号

2022-11-07 17:29:33 | ソフトウェア受信機
IRNSSのL5とSバンド信号の中身は同じものと思い込んでいましたが、
ICDをちゃんと読むと同じ衛星番号でも拡散符号が異なりました。RTFM!
PocketSDRを改修して、IRNSSのSバンドのコードを追加しよう。



P.S. IRNSSのSバンドのコードを追加しようとPocketSDRのソースを開いてみたら、
すでに実装されていました。オプションは"-sig ISS"。何でもできるな、PocketSDR。
コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする