Elecrowから届いた基板で,HackRF Oneのexternal clockピンに10MHzのTCXOを接続.
![](https://blogimg.goo.ne.jp/user_image/34/2d/0699b71177a31f1f0383b218968f8070.png)
TCXOはDigikeyから購入したFOX924B.周波数安定性は2.5ppmです.
3.3Vの電源は,近くのヘッダピンから取っています.
GPSDOほどの安定性は望めませんが,それでも内蔵のXOよりはましなはず.
早速,GPS信号のrecord & playbackを試してみます.
![](https://blogimg.goo.ne.jp/user_image/69/1d/f7149fe15c6397568a6a33dce359cfe9.png)
結果は残念賞.多少は信号が安定して航法メッセージのデコードまで進むものの,
Qiは相変わらず4から6あたりを行ったり来たり.信号強度もふらふらしています.
(クリックで拡大)
何がいけないのだろう?
HackRF Oneは手軽なデバイスなので,なんとかしたいな.
![](https://blogimg.goo.ne.jp/user_image/34/2d/0699b71177a31f1f0383b218968f8070.png)
TCXOはDigikeyから購入したFOX924B.周波数安定性は2.5ppmです.
3.3Vの電源は,近くのヘッダピンから取っています.
GPSDOほどの安定性は望めませんが,それでも内蔵のXOよりはましなはず.
早速,GPS信号のrecord & playbackを試してみます.
![](https://blogimg.goo.ne.jp/user_image/69/1d/f7149fe15c6397568a6a33dce359cfe9.png)
結果は残念賞.多少は信号が安定して航法メッセージのデコードまで進むものの,
Qiは相変わらず4から6あたりを行ったり来たり.信号強度もふらふらしています.
![](https://blogimg.goo.ne.jp/user_image/0a/ef/dad278de185f4dcde2c9436d0ee10241.png)
何がいけないのだろう?
HackRF Oneは手軽なデバイスなので,なんとかしたいな.
GPS signal simulatorに,航法メッセージの機能を追加しました.
RINEXファイルから読み込んだephemerisでsubframe 1,2,3を生成.
almanacの生成は面倒だったので,subframe 4と5はpage 25に固定しています.
読み込んだephemerisの衛星番号と同じPRN02でbaseband信号を生成し,
bladeRFでTXした結果がこちら.
(クリックで拡大)
航法メッセージの追加で,信号のQiが3から7になり,
Z-counterとephemerisのデコードにも成功しています!
後は,ephemerisから計算された衛星位置と任意の受信機位置から
疑似距離を計算し,それに応じた適切なコード遅延をC/Aコードに
与えれば,GPS信号シミュレータの完成です.
【追記】いい加減なコード遅延を与えても,とりあえず測位演算を
してくれるようです.ただし,疑似距離残差が無茶苦茶なので,
測位結果はNo Fixのまま.
(クリックで拡大)
RINEXファイルから読み込んだephemerisでsubframe 1,2,3を生成.
almanacの生成は面倒だったので,subframe 4と5はpage 25に固定しています.
読み込んだephemerisの衛星番号と同じPRN02でbaseband信号を生成し,
bladeRFでTXした結果がこちら.
![](https://blogimg.goo.ne.jp/user_image/7c/f0/534438e1bc3ef0bc6dc3a56b65a6137f.png)
航法メッセージの追加で,信号のQiが3から7になり,
Z-counterとephemerisのデコードにも成功しています!
後は,ephemerisから計算された衛星位置と任意の受信機位置から
疑似距離を計算し,それに応じた適切なコード遅延をC/Aコードに
与えれば,GPS信号シミュレータの完成です.
【追記】いい加減なコード遅延を与えても,とりあえず測位演算を
してくれるようです.ただし,疑似距離残差が無茶苦茶なので,
測位結果はNo Fixのまま.
![](https://blogimg.goo.ne.jp/user_image/77/18/dadff7ebb70806ee116bb09a37bfb4da.png)
GPS信号のrecord & playbackが出来るようになったので,次のステップとして,
numericalに生成したベースバンド信号のTXに挑戦です.
まずは,単純にドップラーなしのC/Aコードを生成し,サンプリングします.
C/AコードはPRN01を選びました.
信号の生成を簡単にするために,1チップにつき4サンプルとしたので,
サンプリング周波数は1.023×4=4.092MHzとなります.
これに適当なガウスノイズを加えた後,ローパスフィルタを通します.
今回はTXにbladeRFを使うため,量子化は12ビットに収まるようにしています.
(クリックで拡大)
(クリックで拡大)
FIRフィルタの設計は初めてなので,いまひとつパラメータの設定が
思うようにいきませんが,とりあえずこれで良しとします.
確認のためにソフトウェア受信機で信号を探してみると,当然ながら
PRN01だけが見つかります.
(クリックで拡大)
さて,これでベースバンド信号は準備できましたので,bladeRFを
GPS受信機に接続し,1575.42MHzの中心周波数でTXしてみます.
(クリックで拡大)
無事にPRN01の受信が確認できましたが,Qiは3と低いままです.
航法メッセージがないとダメなのかな?
まだまだ課題は山積みですが,GPS信号シミュレータへ一歩近づきました.
【追記】bladeRFはtxvga1でattenuationが設定できるので,
ベースバンド信号にノイズを加えなくても適切なSNRが得られます.
USRP N210やHackRFにはない機能で,地味に便利.
(クリックで拡大)
複数衛星もいける!
(クリックで拡大)
【追記2】libbladeRF.hで定義されているtxvga1の最大値と最小値.
#define BLADERF_TXVGA1_GAIN_MIN (-35)
#define BLADERF_TXVGA1_GAIN_MAX (-4)
【追記3】NAV-SVINFOのQiフラグ.
Signal Quality indicator (range 0..7). The following list shows the meaning of the different QI values:
0: This channel is idle
1: Channel is searching
2: Signal aquired
3: Signal detected but unusable
4: Code Lock on Signal
5, 6, 7: Code and Carrier locked
3のunusableは,どんな状態なんだろうか.
4のCode Lockに進む条件が不明.
numericalに生成したベースバンド信号のTXに挑戦です.
まずは,単純にドップラーなしのC/Aコードを生成し,サンプリングします.
C/AコードはPRN01を選びました.
信号の生成を簡単にするために,1チップにつき4サンプルとしたので,
サンプリング周波数は1.023×4=4.092MHzとなります.
これに適当なガウスノイズを加えた後,ローパスフィルタを通します.
今回はTXにbladeRFを使うため,量子化は12ビットに収まるようにしています.
![](https://blogimg.goo.ne.jp/user_image/66/1b/605bbe7dc3badd173d28e63be4bd0433.png)
![](https://blogimg.goo.ne.jp/user_image/72/65/fbd4b71778ce68c79088c75425594ef4.png)
FIRフィルタの設計は初めてなので,いまひとつパラメータの設定が
思うようにいきませんが,とりあえずこれで良しとします.
確認のためにソフトウェア受信機で信号を探してみると,当然ながら
PRN01だけが見つかります.
![](https://blogimg.goo.ne.jp/user_image/36/3c/ead26514d763b038f77b768a4fcc8cc1.png)
さて,これでベースバンド信号は準備できましたので,bladeRFを
GPS受信機に接続し,1575.42MHzの中心周波数でTXしてみます.
![](https://blogimg.goo.ne.jp/user_image/72/6e/04b8f28d18182c36ed61613597136ca4.png)
無事にPRN01の受信が確認できましたが,Qiは3と低いままです.
航法メッセージがないとダメなのかな?
まだまだ課題は山積みですが,GPS信号シミュレータへ一歩近づきました.
【追記】bladeRFはtxvga1でattenuationが設定できるので,
ベースバンド信号にノイズを加えなくても適切なSNRが得られます.
USRP N210やHackRFにはない機能で,地味に便利.
![](https://blogimg.goo.ne.jp/user_image/20/54/78429603227d886e8585c847e728ecf7.png)
複数衛星もいける!
![](https://blogimg.goo.ne.jp/user_image/5f/92/e92d68aee633fc63b68cf04db7304a4c.png)
【追記2】libbladeRF.hで定義されているtxvga1の最大値と最小値.
#define BLADERF_TXVGA1_GAIN_MIN (-35)
#define BLADERF_TXVGA1_GAIN_MAX (-4)
【追記3】NAV-SVINFOのQiフラグ.
Signal Quality indicator (range 0..7). The following list shows the meaning of the different QI values:
0: This channel is idle
1: Channel is searching
2: Signal aquired
3: Signal detected but unusable
4: Code Lock on Signal
5, 6, 7: Code and Carrier locked
3のunusableは,どんな状態なんだろうか.
4のCode Lockに進む条件が不明.
bladeRFのTXが安定しなかったのも,RXデータのHDDへの書き込み速度の
問題かと思われるので,同じセットアップでramdiskへ記録してみました.
![](https://blogimg.goo.ne.jp/user_image/30/68/cd7e11808735a26d2cd84521996c266e.png)
その結果,bladeRFでも無事にGPS信号のplaybackに成功.
bladeRFのTXに接続されたubloxのGPS受信機で,とても安定した
受信と測位ができています.
(クリックで拡大)
TXデータの読み出しは,HDDからでもramdiskからでも変化なし.
RXデータの書き込み速度だけの問題のようです.
そろそろSSD搭載の新しいノートPCを買わないとダメかな.
nuandのショップから購入できるbladeRFは,出荷前にVCTCXOの
周波数オフセットを40ppb(0.04ppm)にキャリブレートしてくれるようです.
nuand: bladeRF x40
別売りの専用ケースも購入すると,bladeRF x40は合計で$440.
リファレンスクロックが20ppmのXOで,送受信がhalf-duplexの
hackRFが$300することを考えると,お買い得かも.
【追記】bladeRFもWindowsで動くようにしておこう.
bladeRF wiki: Getting Started: Windows
Nuand: bladeRF Windows installation guide
【追記2】Windowsでも動作確認
(クリックで拡大)
問題かと思われるので,同じセットアップでramdiskへ記録してみました.
![](https://blogimg.goo.ne.jp/user_image/30/68/cd7e11808735a26d2cd84521996c266e.png)
その結果,bladeRFでも無事にGPS信号のplaybackに成功.
bladeRFのTXに接続されたubloxのGPS受信機で,とても安定した
受信と測位ができています.
![](https://blogimg.goo.ne.jp/user_image/12/30/d7a060f6811b4a6156146a5634f5427c.png)
TXデータの読み出しは,HDDからでもramdiskからでも変化なし.
RXデータの書き込み速度だけの問題のようです.
そろそろSSD搭載の新しいノートPCを買わないとダメかな.
nuandのショップから購入できるbladeRFは,出荷前にVCTCXOの
周波数オフセットを40ppb(0.04ppm)にキャリブレートしてくれるようです.
nuand: bladeRF x40
別売りの専用ケースも購入すると,bladeRF x40は合計で$440.
リファレンスクロックが20ppmのXOで,送受信がhalf-duplexの
hackRFが$300することを考えると,お買い得かも.
【追記】bladeRFもWindowsで動くようにしておこう.
bladeRF wiki: Getting Started: Windows
Nuand: bladeRF Windows installation guide
【追記2】Windowsでも動作確認
![](https://blogimg.goo.ne.jp/user_image/2c/47/1e02dd870671d436a71d777144ec92fc.png)
GPSDOをお借りすることができたので,HackRF OneのCLKINに接続.
その効果を試してみます.
Jackson Labs: GPSTCXO Eval Board
![](https://blogimg.goo.ne.jp/user_image/70/3b/8bdf260aeb47e98b46f008da6c1bdf4f.png)
HackRF OneのCLKINへの入力は,10MHzのLVCMOSレベルとなります.
3.3Vを超えたりマイナスの電圧にならないよう,注意しましょう.
HackRF Oneは,CLKINへの入力を検知すると,自動的にそちらに
リファレンスを切り替えます.CLKINが選択されているかどうかは,
以下のコマンドで確認できます.
$ hackrf_si5351c -n 0 -r
[ 0] -> 0x01
ちなみに,CLKINが選択されていないときは,0x51が返ってきます.
後は,これまでと同じように,GPS信号を記録・再生します.
![](https://blogimg.goo.ne.jp/user_image/64/a8/7fc6b66ec9be31f6ae7704bc4ef099bb.png)
GPSDOの効果はてき面で,再生したGPS信号でスムーズに測位できました.
信号のQiもすべて7で,問題なく航法データがデコードできています.
信号強度も高目な気がします.
(クリックで拡大)
これはもうGPSDOを買うしかない!
【追記】4万円とか,hackRF本体より高い…
DST: GPS同期10MHzのTCXO信号源 GPSTCXO
その効果を試してみます.
Jackson Labs: GPSTCXO Eval Board
![](https://blogimg.goo.ne.jp/user_image/70/3b/8bdf260aeb47e98b46f008da6c1bdf4f.png)
HackRF OneのCLKINへの入力は,10MHzのLVCMOSレベルとなります.
3.3Vを超えたりマイナスの電圧にならないよう,注意しましょう.
HackRF Oneは,CLKINへの入力を検知すると,自動的にそちらに
リファレンスを切り替えます.CLKINが選択されているかどうかは,
以下のコマンドで確認できます.
$ hackrf_si5351c -n 0 -r
[ 0] -> 0x01
ちなみに,CLKINが選択されていないときは,0x51が返ってきます.
後は,これまでと同じように,GPS信号を記録・再生します.
![](https://blogimg.goo.ne.jp/user_image/64/a8/7fc6b66ec9be31f6ae7704bc4ef099bb.png)
GPSDOの効果はてき面で,再生したGPS信号でスムーズに測位できました.
信号のQiもすべて7で,問題なく航法データがデコードできています.
信号強度も高目な気がします.
![](https://blogimg.goo.ne.jp/user_image/46/e3/dac1f78cb98201feffd04004f2626347.png)
これはもうGPSDOを買うしかない!
【追記】4万円とか,hackRF本体より高い…
DST: GPS同期10MHzのTCXO信号源 GPSTCXO
小型衛星向けのスマートアンテナであるfireantの受信性能を,
市販のGPS+GLONASSアンテナに接続したfirefly評価キットと
比較してみました.
評価キットに付属しているアンテナは,TallysmanのTW4421になります.
fireantと一緒にならべて,屋上で受信します.
![](https://blogimg.goo.ne.jp/user_image/6a/7a/27c88bbf343fac7549216c5c1da8addf.png)
実験したときのskyplotは,こんな感じです.
![](https://blogimg.goo.ne.jp/user_image/39/9c/f5504cac9df90d434ee2c4de631f1665.png)
Tallysmanのアンテナで受信した信号強度はこちら.
![](https://blogimg.goo.ne.jp/user_image/4c/f7/56f3ad87bea2da9a17f9d450bb47bd74.png)
それに対して,スマートアンテナのfireantはこちら.
![](https://blogimg.goo.ne.jp/user_image/6c/fc/ccc37c75be7723f9c25eb8f6f8952a04.png)
高仰角の衛星の信号強度はfireantの方がわずかに低めになり,
低仰角だと逆にfireantの方が随分と高めに出ています.
グランドプレーンの効果があまりなく,ビームが広めなのかもしれません.
地上ではマルチパスの問題がありますが,宇宙であれば関係ないかも.
また,fireantではGLONASSの信号強度の方がGPSより低めです.
アンテナの中心周波数がずれているのかな?
何の調整もせずにそれなりに受信できていますが,いまひとつ.
もう少し受信性能を改善したいところです.
【追記】NMEAの衛星IDでは,GLONASSは65番から96番にアサインされています.
つまり,衛星IDから64を引いた値が,GLONASSのスロット番号になります.
ちなみに,SBASの衛星IDには33番から64番がリザーブされています.
NMEAの衛星IDに87を加えると,SBASのPRNになります.
みちびき(QZS-1)が193番で表示されているのはNMEAの仕様外です.
市販のGPS+GLONASSアンテナに接続したfirefly評価キットと
比較してみました.
評価キットに付属しているアンテナは,TallysmanのTW4421になります.
fireantと一緒にならべて,屋上で受信します.
![](https://blogimg.goo.ne.jp/user_image/6a/7a/27c88bbf343fac7549216c5c1da8addf.png)
実験したときのskyplotは,こんな感じです.
![](https://blogimg.goo.ne.jp/user_image/39/9c/f5504cac9df90d434ee2c4de631f1665.png)
Tallysmanのアンテナで受信した信号強度はこちら.
![](https://blogimg.goo.ne.jp/user_image/4c/f7/56f3ad87bea2da9a17f9d450bb47bd74.png)
それに対して,スマートアンテナのfireantはこちら.
![](https://blogimg.goo.ne.jp/user_image/6c/fc/ccc37c75be7723f9c25eb8f6f8952a04.png)
高仰角の衛星の信号強度はfireantの方がわずかに低めになり,
低仰角だと逆にfireantの方が随分と高めに出ています.
グランドプレーンの効果があまりなく,ビームが広めなのかもしれません.
地上ではマルチパスの問題がありますが,宇宙であれば関係ないかも.
また,fireantではGLONASSの信号強度の方がGPSより低めです.
アンテナの中心周波数がずれているのかな?
何の調整もせずにそれなりに受信できていますが,いまひとつ.
もう少し受信性能を改善したいところです.
【追記】NMEAの衛星IDでは,GLONASSは65番から96番にアサインされています.
つまり,衛星IDから64を引いた値が,GLONASSのスロット番号になります.
ちなみに,SBASの衛星IDには33番から64番がリザーブされています.
NMEAの衛星IDに87を加えると,SBASのPRNになります.
みちびき(QZS-1)が193番で表示されているのはNMEAの仕様外です.
GNSS-SDRLIBでHackRFを使うためには,Visual Studioでビルドできないとダメなのかと思い,
こちらを参考にVisual Studio Express 2012で試してみました.
HackRF.net: Compile HackRF using Visual Studio
中国語ですが,雰囲気は判ります.
すでにCMakeはインストール済みなので,libusb-1.0とpthreadをダウンロードし,Cドライブの直下に展開します.
libusb-1.0.18-win.7z (2014-01-25)
pthreads-w32-2-9-1-release.zip (2012-07-12)
HackRFのパッケージは,新たにC:\hackrf_vseに展開しました.
これで準備が整ったので,コマンドプロンプトからCMakeを実行し,Visual Studioのプロジェクトを生成します.
(クリックで拡大)
生成されたソリューションファイルをダブルクリックして,Visual Studioでプロジェクトを開きます.
(クリックで拡大)
さて,このままBuild Solutionを実行すると,エラーが発生します.
(クリックで拡大)
これは,変数の宣言を関数の先頭に移すことで解決します.
(クリックで拡大)
ビルドが成功すると,HackRFのライブラリとツールが,それぞれ以下のフォルダに出来上がります.
C:\hackrf_vse\host\build\libhackrf\src\Release
C:\hackrf_vse\host\build\hackrf-tools\src\Release
ツールの実行に必要なファイルを一式,C:\hackrf_vse\binにコピーします.
libusb-1.0.18-win\MS32\dll\libusb-1.0.dll
pthreads-w32-2-9-1-release\Pre-built.2\dll\x86\pthreadVSE2.dll
C:\hackrf_vse\host\build\libhackrf\src\Release\hackrf.dll
C:\hackrf_vse\host\build\hackrf-tools\src\Release\hackrf_info.exe
C:\hackrf_vse\host\build\hackrf-tools\src\Release\hackrf_transfere.exe
これでVisual StudioでビルドしたHackRFのツールが使えるようになりました.
こちらを参考にVisual Studio Express 2012で試してみました.
HackRF.net: Compile HackRF using Visual Studio
中国語ですが,雰囲気は判ります.
すでにCMakeはインストール済みなので,libusb-1.0とpthreadをダウンロードし,Cドライブの直下に展開します.
libusb-1.0.18-win.7z (2014-01-25)
pthreads-w32-2-9-1-release.zip (2012-07-12)
HackRFのパッケージは,新たにC:\hackrf_vseに展開しました.
これで準備が整ったので,コマンドプロンプトからCMakeを実行し,Visual Studioのプロジェクトを生成します.
![](https://blogimg.goo.ne.jp/user_image/4a/d0/dfbce749a96e7536be49fa6e98afd400.png)
生成されたソリューションファイルをダブルクリックして,Visual Studioでプロジェクトを開きます.
![](https://blogimg.goo.ne.jp/user_image/1d/70/3792039e1ab5f6da2b9163d03a0bf27f.png)
さて,このままBuild Solutionを実行すると,エラーが発生します.
![](https://blogimg.goo.ne.jp/user_image/4f/fa/8bc693da7dd9e833898ec59e70ad530b.png)
これは,変数の宣言を関数の先頭に移すことで解決します.
![](https://blogimg.goo.ne.jp/user_image/3f/67/a0fd3dbb586def6d1a6af697ad254c24.png)
ビルドが成功すると,HackRFのライブラリとツールが,それぞれ以下のフォルダに出来上がります.
C:\hackrf_vse\host\build\libhackrf\src\Release
C:\hackrf_vse\host\build\hackrf-tools\src\Release
ツールの実行に必要なファイルを一式,C:\hackrf_vse\binにコピーします.
libusb-1.0.18-win\MS32\dll\libusb-1.0.dll
pthreads-w32-2-9-1-release\Pre-built.2\dll\x86\pthreadVSE2.dll
C:\hackrf_vse\host\build\libhackrf\src\Release\hackrf.dll
C:\hackrf_vse\host\build\hackrf-tools\src\Release\hackrf_info.exe
C:\hackrf_vse\host\build\hackrf-tools\src\Release\hackrf_transfere.exe
これでVisual StudioでビルドしたHackRFのツールが使えるようになりました.
HackRF Oneのhost softwareをWindowsでbuildしようとしたのですが,
いろいろと嵌ったので,メモを残しておきます.
公式の手順はこちら.あっさりしすぎ.
HackRF: How to build host software on Windows
まずは,MinGWをインストールします.
MinGW: mingw-get-setup.exe (2013-10-04)
インストール先はC:\MinGWを選びます.
(クリックで拡大)
Basic Setupからは,以下のパッケージを選択しました.
mingw-developer-toolkit
mingw32-base
mingw32-gcc-g++
msys-base
(クリックで拡大)
pthreadsも忘れずにインストールします.
(クリックで拡大)
パッケージの選択が完了したら,InstallationメニューからApply Changesをクリックし,
インストールを開始します.
(クリックで拡大)
さて,ここでMinGWのインストールの確認のためにgccを実行してみると,
ドライブにディスクがありませんと警告がでます.
(クリックで拡大)
どうやら,MinGWのパッケージに含まれるgccは,まずはEドライブを探しに行くようです.
実行環境によっては,Eドライブが存在しないために,この警告が出てしまいます.
MinGWのフォーラムにバグとして報告されているのですが,去年の12月から動きがありません.
MinGW: No Disk error when running g++ from cmd/tcc while a card reader with empty slots is connected
Windows版のgccの開発は,MinGW-w64にシフトしたようなので,こちらをインストールします.
MinGW-w64: mingw-w64-install.exe (2014-10-30)
設定はとりあえずデフォルトで.インストール先はC:\mingw-w64にしています.
(クリックで拡大)
次に,CMakeをインストールします.
CMake: Win32 Installer (cmake-3.1.0-rc2-win32-x86.exe)
インストール先のフォルダはC:\CMakeを選びます.PATHは後から追加します.
(クリックで拡大)
これで開発ツールは整いました.環境変数のPATHに以下の順番でフォルダを追加します.
C:\CMake\bin;C:\mingw-w64;C:\MinGW\bin;C:\MinGW\msys\1.0\bin
つづいて,libusbxをダウンロードして,C:\libusbx-1.0.18-winへ展開します.
libusbx: libusbx-1.0.18-win.7z (2014-01-25)
最後に,HackRFのパッケージをダウンロードして,C:\hackrfへ展開します.
HackRF: hackrf-2014.08.1.zip (2014-08-28)
これでbuildに必要なパッケージがすべて揃いました.
Windowsのアクセサリからコマンドプロンプトを起動し,以下の手順でhost softwareをbuildします.
>cd C:\hackrf\host
>mkdir build
>cd build
>cmake ../ -G "MSYS Makefiles" -DLIBUSB_INCLUDE_DIR=C:\libusbx-1.0.18-win\include\libusbx-1.0 -DLIBUSB_LIBRARIES=C:\libusbx-1.0.10-win\MinGW32\dll\libusb-1.0.dll
>make
こでれ,HackRFのツールとライブラリがbuildされます.
ツールの実行に必要な以下のファイルを一式,C:\hackrf\binにコピーします.
C:\MinGW\bin\pthreadGC2.dll
C:\libusbx-1.0.18-win\MinGW32\dll\libusb-1.0.dll
C:\hackrf\host\build\libhackrf\src\libhackrf.dll
C:\hackrf\host\build\hackrf-tools\src\hackrf_info.exe
C:\hackrf\host\build\hackrf-tools\src\hackrf_transfere.exe
HackRFのUSBドライバのインストールには,zadigを使用します.
zadig.akeo.ie: zadig_v2.1.1.exe (2014-11-30)
HackRFをUSBポートに接続し,zadigを実行します.
デバイスにHackRF Oneを選び,WinUSBをインストールします.
(クリックで拡大)
デバイスマネージャーを開くと,Universal Serial Bus devicesとして
HackRF Oneが認識されています.
(クリックで拡大)
コマンドプロンプトからhackrf_infoを実行すると,無事にHackRF Oneが見つかりました.
(クリックで拡大)
ubuntuと同様に,まずはファイル書き込みなしで受信データの転送を確認します.
Linuxの/dev/nullは,Windowsではnulになります.(nullではないので注意.)
>hackrf_transfer.exe -r nul -f 1575420000 -s 2600000 -n 260000000 -g 30 -l 40 -a 0
データ転送は問題ないようですが,実行停止の際にエラーが発生します.
これは,HackRFのページでもNote for Windows buildとして言及されていますが,
コマンドプロンプトを使っても解決しない?
とりあえず,WindowsからでもHackRF Oneが動きそうなので,
taro君のGNSS-SDRLIBに繋いでみよう.
taroz: GNSS-SDRLIB
いろいろと嵌ったので,メモを残しておきます.
公式の手順はこちら.あっさりしすぎ.
HackRF: How to build host software on Windows
まずは,MinGWをインストールします.
MinGW: mingw-get-setup.exe (2013-10-04)
インストール先はC:\MinGWを選びます.
![](https://blogimg.goo.ne.jp/user_image/77/f4/5bd230b93eb1718357cfd05095f57331.png)
Basic Setupからは,以下のパッケージを選択しました.
mingw-developer-toolkit
mingw32-base
mingw32-gcc-g++
msys-base
![](https://blogimg.goo.ne.jp/user_image/16/ad/def6ad68cf42734aa52d8772ba123388.png)
pthreadsも忘れずにインストールします.
![](https://blogimg.goo.ne.jp/user_image/52/d9/5b78792cfe44ad63d7de58b965d9c1b2.png)
パッケージの選択が完了したら,InstallationメニューからApply Changesをクリックし,
インストールを開始します.
![](https://blogimg.goo.ne.jp/user_image/48/77/a497717acb8f0bc2836529e33605bafb.png)
さて,ここでMinGWのインストールの確認のためにgccを実行してみると,
ドライブにディスクがありませんと警告がでます.
![](https://blogimg.goo.ne.jp/user_image/5a/d4/a4bcd42301c8a6f6d3b83743eded647a.png)
どうやら,MinGWのパッケージに含まれるgccは,まずはEドライブを探しに行くようです.
実行環境によっては,Eドライブが存在しないために,この警告が出てしまいます.
MinGWのフォーラムにバグとして報告されているのですが,去年の12月から動きがありません.
MinGW: No Disk error when running g++ from cmd/tcc while a card reader with empty slots is connected
Windows版のgccの開発は,MinGW-w64にシフトしたようなので,こちらをインストールします.
MinGW-w64: mingw-w64-install.exe (2014-10-30)
設定はとりあえずデフォルトで.インストール先はC:\mingw-w64にしています.
![](https://blogimg.goo.ne.jp/user_image/0a/13/748fb6e865d3053e701abe94c3478101.png)
次に,CMakeをインストールします.
CMake: Win32 Installer (cmake-3.1.0-rc2-win32-x86.exe)
インストール先のフォルダはC:\CMakeを選びます.PATHは後から追加します.
![](https://blogimg.goo.ne.jp/user_image/58/44/bbac66d1e2bfcda8390398dfb350f9b2.png)
これで開発ツールは整いました.環境変数のPATHに以下の順番でフォルダを追加します.
C:\CMake\bin;C:\mingw-w64;C:\MinGW\bin;C:\MinGW\msys\1.0\bin
つづいて,libusbxをダウンロードして,C:\libusbx-1.0.18-winへ展開します.
libusbx: libusbx-1.0.18-win.7z (2014-01-25)
最後に,HackRFのパッケージをダウンロードして,C:\hackrfへ展開します.
HackRF: hackrf-2014.08.1.zip (2014-08-28)
これでbuildに必要なパッケージがすべて揃いました.
Windowsのアクセサリからコマンドプロンプトを起動し,以下の手順でhost softwareをbuildします.
>cd C:\hackrf\host
>mkdir build
>cd build
>cmake ../ -G "MSYS Makefiles" -DLIBUSB_INCLUDE_DIR=C:\libusbx-1.0.18-win\include\libusbx-1.0 -DLIBUSB_LIBRARIES=C:\libusbx-1.0.10-win\MinGW32\dll\libusb-1.0.dll
>make
こでれ,HackRFのツールとライブラリがbuildされます.
ツールの実行に必要な以下のファイルを一式,C:\hackrf\binにコピーします.
C:\MinGW\bin\pthreadGC2.dll
C:\libusbx-1.0.18-win\MinGW32\dll\libusb-1.0.dll
C:\hackrf\host\build\libhackrf\src\libhackrf.dll
C:\hackrf\host\build\hackrf-tools\src\hackrf_info.exe
C:\hackrf\host\build\hackrf-tools\src\hackrf_transfere.exe
HackRFのUSBドライバのインストールには,zadigを使用します.
zadig.akeo.ie: zadig_v2.1.1.exe (2014-11-30)
HackRFをUSBポートに接続し,zadigを実行します.
デバイスにHackRF Oneを選び,WinUSBをインストールします.
![](https://blogimg.goo.ne.jp/user_image/19/eb/a9ab15c3285cbea5ad41c569634b248d.png)
デバイスマネージャーを開くと,Universal Serial Bus devicesとして
HackRF Oneが認識されています.
![](https://blogimg.goo.ne.jp/user_image/35/1e/b456007e41bbe1a1b9fb0ea46b3b5b5c.png)
コマンドプロンプトからhackrf_infoを実行すると,無事にHackRF Oneが見つかりました.
![](https://blogimg.goo.ne.jp/user_image/39/f6/21ddec21b13090846f96586e080e49c2.png)
ubuntuと同様に,まずはファイル書き込みなしで受信データの転送を確認します.
Linuxの/dev/nullは,Windowsではnulになります.(nullではないので注意.)
>hackrf_transfer.exe -r nul -f 1575420000 -s 2600000 -n 260000000 -g 30 -l 40 -a 0
データ転送は問題ないようですが,実行停止の際にエラーが発生します.
これは,HackRFのページでもNote for Windows buildとして言及されていますが,
コマンドプロンプトを使っても解決しない?
とりあえず,WindowsからでもHackRF Oneが動きそうなので,
taro君のGNSS-SDRLIBに繋いでみよう.
taroz: GNSS-SDRLIB
小型衛星用GNSS受信機モジュールfireflyの実装例として,スマートアンテナを設計してみました.
Elecrowから基板が届いたので,早速実装.
![](https://blogimg.goo.ne.jp/user_image/3e/be/654a90f4d44836a10eb2e6ae41bfa9d3.png)
![](https://blogimg.goo.ne.jp/user_image/22/df/c0ecce1228f0c2a9244218e9c61c2e5a.png)
firefly受信機モジュールのスマートアンテナということで,「fireant」と命名.
アンテナのantと,小型であるということで蟻を掛けています.
FreeCADで設計した筐体の試作には,光造形を試してみました.
切削加工はさすがに高価なので,3Dプリントサービスを調べていたら,こんなサービスを発見.
株式会社クロスエフェクト:光造形エコノミー便
小型の造形物で,納品まで10日待てるのであれば,通常の1/3程度の価格でサービスが受けられます.
仕上がってきた筐体がこちら.
厚みのある板状のためか,多少反っていますが,フィットチェックにはまったく問題ありません.
![](https://blogimg.goo.ne.jp/user_image/14/1f/e01302e71a7537c0f565418fb800389d.png)
半透明の素材のおかげで,展示用に丁度良いかも.
![](https://blogimg.goo.ne.jp/user_image/41/a2/0bc9900ee1130aae6c0211863cc4e360.png)
![](https://blogimg.goo.ne.jp/user_image/58/db/7dff0e9483115afbc81d3033344ae84e.png)
何だかこれで満足してしまいましたが,本題の受信性能もちゃんと調べます.
Elecrowから基板が届いたので,早速実装.
![](https://blogimg.goo.ne.jp/user_image/3e/be/654a90f4d44836a10eb2e6ae41bfa9d3.png)
![](https://blogimg.goo.ne.jp/user_image/22/df/c0ecce1228f0c2a9244218e9c61c2e5a.png)
firefly受信機モジュールのスマートアンテナということで,「fireant」と命名.
アンテナのantと,小型であるということで蟻を掛けています.
FreeCADで設計した筐体の試作には,光造形を試してみました.
切削加工はさすがに高価なので,3Dプリントサービスを調べていたら,こんなサービスを発見.
株式会社クロスエフェクト:光造形エコノミー便
小型の造形物で,納品まで10日待てるのであれば,通常の1/3程度の価格でサービスが受けられます.
仕上がってきた筐体がこちら.
厚みのある板状のためか,多少反っていますが,フィットチェックにはまったく問題ありません.
![](https://blogimg.goo.ne.jp/user_image/14/1f/e01302e71a7537c0f565418fb800389d.png)
半透明の素材のおかげで,展示用に丁度良いかも.
![](https://blogimg.goo.ne.jp/user_image/41/a2/0bc9900ee1130aae6c0211863cc4e360.png)
![](https://blogimg.goo.ne.jp/user_image/58/db/7dff0e9483115afbc81d3033344ae84e.png)
何だかこれで満足してしまいましたが,本題の受信性能もちゃんと調べます.