More Related Content
Similar to GNU Radio Study for Super beginner (20)
More from Industrial Technology Research Institute (ITRI)(工業技術研究院, 工研院) (20)
GNU Radio Study for Super beginner
- 4. ©SIProp Project, 2006-2019 4
コンセプト
ディジタルの知識不要
IQの知識さえ、不要!
プログラミングの知識不要
必要な部分のみ、きちんと解説します
intなどのプリミティブ型とは?
Pythonとは何か?
git, configure, makeとは何か?
Linux/Ubuntuの知識不要
必要なコマンドなどは、きちんと解説します
Linuxコマンドの基本
最終習得知識
インターネットにあるGNURadioレシピを改造して、使
いこなせるようにする!
- 5. ©SIProp Project, 2006-2019 5
SDR用のディジタル送受信ソフトウェア
GNURadio
オープンソースのソフトウェア信号処理器
フロー・ダイヤグラムによる実装が可能
ディジタル処理を行うためのソフトウェア
同様の機能を持つ商用のソフトウェア信号処理器
• MATLABのSimulink
• LabVIEWのVI
動作環境
Windows and Linux
https://www.gnuradio.org/
GRC(GNURadio-companion)
フローダイヤグラムエディタ
ブロック
信号処理を行う単位
フロー
信号の伝達ライン
- 8. ©SIProp Project, 2006-2019 8
必要機材
パソコン
CPU: 第四世代以降Core 3-9i、2コア以上(4コア推奨)
最新のパソコンを推奨
USBメモリ or USB-HDD or USB-SSD
USB3.0以上推奨
32GB以上(大容量のUSB-HDD推奨)
SDR(送信までしたい場合)
Lime SDR mini
https://www.crowdsupply.com/lime-micro/limesdr-mini
Pluto SDR
https://www.analog.com/jp/design-center/evaluation-
hardware-and-software/evaluation-boards-kits/adalm-
pluto.html
- 9. ©SIProp Project, 2006-2019 9
Linuxインストール方法(検討)
今あるWindowsの領域を縮小させて、そこにLinux
をインストールして、DualBootとする
一般的なLinuxのインストール方法
問題点:Linuxを消すことはできなく、デフォルトだとLinuxが起動
するモードとなる
OSに関する知識があれば、変更や削除可能
USBメモリにLinuxをインストールする
USBメモリを引き抜けば、Linuxの痕跡をすべて消せる
問題点:セットアップ時にミスをするとWindowsが起動しなくなる
修復にはOSに関する知識が必要
Live USBメモリのLinuxを利用する
USBメモリを引き抜けば、Linuxの痕跡をすべて消せる
問題点:データの保存領域が4GBしか作れない
そのため、本格的な利用は不可能
- 10. ©SIProp Project, 2006-2019 10
インストール環境
OS
Ubuntu 18.04 LTS 日本語Remix
LTS版Ubuntuの現時点(2019年)での最新版
https://www.ubuntulinux.jp/japanese
インストール方法
UNetBootin
USBメモリにLive Linuxをセットアップするためのツール
https://unetbootin.github.io/
これを使って、USBメモリやUSB-HDDにLinuxをセットアップ
する
- 12. ©SIProp Project, 2006-2019 12
Linuxとは?
Linux
Unixを参考にして作られたOS(POSIX非準拠)
Linuxの種類
ディストリビューション
各種コマンドやアプリケーションをパッケージ化したもの
Linuxとは本来Kernel(OSのコア)のみを指す
Ubuntu 18.04 LTS 日本語Remix
Ubuntu
Debian系ディストリビューションで一番使われている
18.04
前半がリリース年、後半はリリース月
LTS(Long Term Support)
10年間のサポートをする長期利用可能なリリース
偶数年の4月にリリースされる
これ以外は9か月
- 13. ©SIProp Project, 2006-2019 13
Linuxのセットアップ:PCの確認
ブートシステム(ファームウェア)
UEFI
Windows8(2012年)で採用されたためそれ以降のPCは個の
ブートシステムとなっている
問題点
セキュリティーが強化されているため、いろいろとオプションを
変えないとUSBメモリブートできない可能性がある
システムによって設定法が大きく違う
BIOS
UEFIの前のブートシステム
問題点
USBメモリブートに対応していない可能性がある
- 14. ©SIProp Project, 2006-2019 14
UTC(協定世界時)に変更する
Ubuntuは、UTCで時刻管理をしているため、
UbuntuからWindows(JSTでの管理)に戻ってくる
と9時間(JST分)時間がずれてしまう
WindowsをUTCに変更する
ロケール管理により、表示時間は自動的にUTC+9時間(JST
分)されるため、使い勝手に影響はない
reg add
"HKEY_LOCAL_MACHINESystemCurrentControlSetC
ontrolTimeZoneInformation" /v RealTimeIsUniversal /d 1
/t REG_DWORD /f
- 19. ©SIProp Project, 2006-2019 19
CUIにおける重要な概念
ディレクトリ
ルートディレクトリ
/
Windowsの「C:」に相当するもの
ホームディレクトリ
/home/[ユーザID]
Windowsの「PC」に相当するもの
ファイルなどはここに保存すること
パーミッション(permission)
ユーザ権限
LinuxはUnix系OSであるため権限がきちんと決められている
コマンド実行時にpermission系のエラーが出た場合
sudo コマンドを付けて実行すること
- 20. ©SIProp Project, 2006-2019 20
Linuxコマンド(使うものだけ抜粋)
基本コマンド
コピー
cp [コピー元] [コピー先]
cp –ar * ../docs/
再帰的に全て処理
ディレクトリ変更
cd [移動先]
cd ../
一つ上に戻る
ディレクトリ作成
mkdir [ディレクトリ名]
ディレクトリ表示
ls
ls -la
詳細表示
拡張コマンド
ソフトインストール
apt install [ソフト名]
スーパーユーザ実行
sudo [コマンド]
開発コマンド
ダウンロード
git clone [git URL]
コンフィグ
./configure
ビルド
make
インストール
sudo make install
user@pc:~ $ sudo raspi-config
- 21. ©SIProp Project, 2006-2019 21
GNURadioのインストール
インストールするもの
GNURadio本体
デフォルトのものはバージョンが古い
最新版を使いたい場合は、RFワールド No.44を参照
PlutoSDR用ドライバ
RTL-SDR用ドライバ
開発環境
user@pc:~ $ sudo apt update
user@pc:~ $ sudo apt upgrade
user@pc:~ $ sudo apt install gnuradio
user@pc:~ $ sudo apt install gr-iio
user@pc:~ $ sudo apt install rtl-sdr gr-osmosdr
user@pc:~ $ sudo apt install git cmake build-essential
- 26. ©SIProp Project, 2006-2019 26
ブロックの操作 1/2
検索
1. Ctrl + Fキーを押す
2. ライブラリウィンドに検索エリアが出る
3. 利用したいブロック名を入れる
4. 候補が表示される
追加
1. 利用したいブロックをダブルクリックする
2. フローエディタエリアにブロックが出現する
選択・変更
1. マウスでクリックすると選択できる
2. ダブルクリックするとオプション変更できる
移動
1. マウスでドラッグ&ドロップで移動可能
- 27. ©SIProp Project, 2006-2019 27
ブロックの操作 2/2
エラーの修正
1. 赤字部分がある場合、エラーがあるということである
2. ブロックやフローをクリックして、選択する
3. メニューの「エラー表示」アイコン(一時停止マーク)をクリックす
る
4. エラーメッセージウィンドウに表示されている内容に合わせて修
正する
- 28. ©SIProp Project, 2006-2019 28
実行する
実行
1. 「Run」アイコン(▷マーク)をクリックする
2. 自動で「generate」されて、実行される
停止
1. 「Stop」アイコン(×マーク)をクリックする
2. 終了する
- 29. ©SIProp Project, 2006-2019 29
保存する
保存
1. 「Save」アイコン(フロッピーディスクマーク)をクリックする
2. 保存先のディレクトリとファイル名を付けて、OKする
読み込み
1. 「Open」アイコン(フォルダマーク)をクリックする
2. 読み込みしたいファイルのディレクトリとファイル名を選択する
新規作成
1. 「New」アイコン(白紙マーク)をクリックする
- 31. ©SIProp Project, 2006-2019 31
演習1:波形の生成と出力
100Hzと150Hzのコサイン波を生成して、波形表
示を行う
目的
一番スタンダードな使い方をマスターする
内容
ブロック
接続
型の理解
生成
実行
演習用GRC
- 32. ©SIProp Project, 2006-2019 32
接続の方法と種類
基本型(必要なもののみ抜粋)
Complex(複素数=IQ)型
波形のこと
プログラム型
波形を信号処理した人間が理解できる数値
Float(小数点)
Integer(整数)
32bit(約-21億~約21億)
Bit(データ)型
波形を信号処理し、摘出されたデータ
パケット
配列(型の集合)
スカラー(1個)
ベクター(2個以上)
接続
n対1
1対n
- 33. ©SIProp Project, 2006-2019 33
演習1-1:波形の生成と出力
コサイン波を生成して、波形表示を行う
基本レシピを作る
1. 「Signal Source」ブロックを配置する
1. Frequencyを「100」に変更する
2. 「Qt Time Sink」ブロックを配置する
3. 接続する
- 34. ©SIProp Project, 2006-2019 34
演習1-1:波形の生成と出力
コサイン波を生成して、波形表示を行う
基本レシピを作る
1. 「Signal Source」ブロックを配置する
1. Frequencyを「100」に変更する
2. 「Qt Time Sink」ブロックを配置する
3. 接続する
- 35. ©SIProp Project, 2006-2019 35
IQ(変調)だけ、理解する
ディジタル通信=データ通信
それを実現しているのがIQ変調
実は、GNURadioを使う上では使わない・・・
出典:http://www.ni.com/tutorial/4805/ja/
- 37. ©SIProp Project, 2006-2019 37
演習1-3:波形の生成と出力
コサイン波を生成して、波形表示を行う
違う波形も表示する
1. 「Signal Source」ブロックを追加する
1. Frequencyを「150」にする
2. 「Qt Time Sink」ブロックの「Input of Number」を「2」にする
3. 接続する
- 38. ©SIProp Project, 2006-2019 38
演習2:SDRを接続し、各種表示を行う
SDRからの出力を、FFT、ウォーターフォール表
示させる
目的
SDRの使い方をマスターする
内容
周波数設定
サンプリングレート
ゲイン
各種GUIツール
- 39. ©SIProp Project, 2006-2019 39
演習2-1:SDRを接続し、各種表示を行う
SDRからの出力を、FFT、ウォーターフォール表
示させる
SDR Sourceの出力を表示する
1. 「Pluto SDR Source」ブロックを追加する
1. Device URLを「ip:pluto.local」とする
2. LO Frequencyを「438.2e6」とする
1. e6=10^6(10の6乗)
3. Sampling Rateを「samp_rate」とする
4. RF Bandwidthを「samp_rate」とする
2. 「Variable」ブロックのID:「samp_rate」を変更する
1. Valueを「2084000」とする
3. 「Qt GUI Sink」ブロックを追加する
1. Center Frequencyを「438.2e6」とする
2. Bandwidthを「samp_rate」とする
4. 接続する
1. LO Frequencyを「int(438.2e6)」とする
- 40. ©SIProp Project, 2006-2019 40
演習2-2:SDRを接続し、各種表示を行う
SDRからの出力を、FFT、ウォーターフォール表示さ
せる
先程のファイルをそのまま使います
SDR Sinkに入力したものを表示する
1. 「Pluto SDR Sink」ブロックを追加する
1. Device URLを「ip:pluto.local」とする
2. LO Frequencyを「int(438.2e6)」とする
1. e6=10^6(10の6乗)
3. Sampling Rateを「samp_rate」とする
4. RF Bandwidthを「samp_rate」とする
2. 「Signal Source」ブロックを追加する
3. 接続する
4. TXとRXを直結するか、ダミーローダーを接続する
!!!注意:電波が出来ます。ダミーローダの接続必須!!!
- 43. ©SIProp Project, 2006-2019 43
演習3:リアルタイム変更する
中心周波数を変更しながら、表示を行う
目的
周波数変更など、実際にGNURadioを使いこなすうえ
で必要な機能をマスターする
内容
スライドバー
https://www.amazon.co.jp/dp/B0032Y0OH0/
https://github.com/nanosyzygy/ShuttlePRO
変数
- 44. ©SIProp Project, 2006-2019 44
演習3-1:リアルタイム変更する
中心周波数を変更しながら、表示を行う
「固定値の変数化」を行う
1. 「Variable」ブロックを追加する
1. IDを「center_freq」とする
2. Valueを「center_freq_val」とする
2. 「Qt GUI Range」ブロックを追加する
1. IDを「center_freq_val」とする
2. Default Valueを「438.2e6」とする
3. Start=437e6, Stop=439e6, Step=200をする
最小周波数、最大周波数、ステップ周波数
3. 「Pluto SDR Source」ブロックを追加する
1. LO Frequencyを「int(center_freq)」にする
2. 他は「演習2」と同じにする
4. 「Qt GUI」ブロックを追加する
1. Center Frequencyを「438.2e6」
2. Bandwidthは「samp_rate」とする
- 45. ©SIProp Project, 2006-2019 45
おまけ
ジョグダイヤルを使えるようにする
ターゲット製品
ShuttleXpress 3D
https://www.amazon.co.jp/dp/B0032Y0OH0/
インストール方法
https://github.com/nanosyzygy/ShuttlePRO
使い方
1. Ubuntuを起動する
2. USBに本製品を挿す
3. デスクトップ上の「ジョグダイヤル」アイコンをダブルクリック
する
4. GNURadioの「Range」にフォーカスを合わせる
5. ジョグを回す
- 46. ©SIProp Project, 2006-2019 46
実は・・・
ここまでは、GNURadioに無線機として、最低限あ
るべき機能を付加した
基本的な機能
電波の送受信
各種情報の表示
中心周波数変更
これ以降は、無線機としての完成度向上やSDR
ならではの機能を付加していく
無線機の性能を上げる
LPFやAGCなど
無線機の機能を増やす
IQデータを保存する
GMSKなどの変調方式
データ処理(TNC)
- 47. ©SIProp Project, 2006-2019 47
演習4:波形を保存して、再生する
SDR受信波をファイルに保存して、その保存した
サイン波を「まったく同じに」読み込む
目的
GNURadioにおけるタイミング処理の概念を理解する
FPGAなどにおけるクロック処理の概念となる
1クロック≒一定時間を理解する
内容
保存
読み込み
処理時間の概念の把握
既存の無線機の違い
保存して、何度でも再生し、実験できる
- 48. ©SIProp Project, 2006-2019 48
演習4-1:波形を保存して、再生する
SDR受信波をファイルに保存して、その保存した
サイン波を「まったく同じに」読み込む
「演習3」のファイルをそのまま使います
IQデータをファイルに保存する
1. 「File Sink」ブロックを追加する
1. Fileに「iq_data.wav」を入力する
2. 「Pluto SDR Source」ブロックと接続する
- 49. ©SIProp Project, 2006-2019 49
演習4-2:波形を保存して、再生する
SDR受信波をファイルに保存して、その保存した
サイン波を「まったく同じに」読み込む
新規作成をします
ファイルに保存したIQデータを再生する
1. 「File Source」ブロックを追加する
1. Fileに「iq_data.wav」を入力する
2. Repeatを「No」にする
2. 「Qt GUI Sink」ブロックを追加する
1. Center Frequencyを「438.2e6」とする
1. 保存時の中心周波数と同じ値にする
3. 接続する
- 50. ©SIProp Project, 2006-2019 50
演習4-3:波形を保存して、再生する
SDR受信波をファイルに保存して、その保存した
サイン波を「まったく同じに」読み込む
先程のファイルをそのまま使います
処理時間を実時間に同期させる
1. 「Throttle」ブロックを追加する
1. Sampling Rateに「2084000」を入力する
1. 保存時のSampling Rateと同じ値にする
2. 「File Source」ブロックの間に挿入する
3. 「Qt GUI Sink」ブロックを変更する
1. Bandwidthに「2084000」を入力する
1. 任意の値でよいが、初期値が32000と低すぎるため、
変更したほうが見栄えが良い。
- 51. ©SIProp Project, 2006-2019 51
演習5:LPFをマスターする
LPFをいれて、波形を表示する
目的
アナログの処理器が付いていることを理解する
アナログ処理器ではあるが、内部的にはディジタル処理して
いる
Tapで処理内容を変えられる
内容
LPFの設定内容の解説
既存の無線機の違い
各種フィルターを固定値ではなく、自分で設計できる
- 52. ©SIProp Project, 2006-2019 52
演習5-1:LPFをマスターする
LPFをいれて、波形を表示する
「演習3」のファイルをそのまま使います
GNURadioにおけるLPFを理解する
1. 「Low Pass Filter」ブロックを追加する
1. Cutoff Freqに「640000」を入力する
2. Transition Widthに「120000」を入力する
2. 「Pluto SDR Source」ブロックの間に挿入する
出典:RFワールドNo.44
- 53. ©SIProp Project, 2006-2019 53
演習5:LPFをマスターする
よくあるLPFにみえるけど・・・
アナログLPFとディジタルLPFの違い
実数と複素数の違い!!!
ここだけ、抑えればアナログもディジタルも同じ!!!
出典:RFワールドNo.44
- 54. ©SIProp Project, 2006-2019 54
演習6:GMSK Demodをマスターする
GMSKを実際に受信して、データ化する
ただし、ファイルから読み込む形式
目的
コンスタレーション表示やアイパターン表示のさせ方
を理解する
内容
GMSKの可視化
既存の無線機の違い
アイパターンやコンスタレーションも表示可能
ウォーターフォールだけじゃない!
- 55. ©SIProp Project, 2006-2019 55
演習6-1:GMSK Demodをマスターする
GMSK9600を実際に受信して、データ化する
先程のファイルをそのまま使います
GMSK復調し、タイム表示やコンスタレーション表示する
1. 「GMSK Demod」ブロックを追加する
1. 「Low Pass Filter」ブロックの後に接続する
2. 「Low Pass Filter」ブロックを変更する
1. Decimationに「samp_rate/9600/2」を入力する
2. Cutoff Freqに「9600/2」を入力する
3. Transition Widthに「600」を入力する
3. 「Qt GUI Sink」ブロックを変更する
1. Bandwidthに「9600*2」を入力する
4. 「File Sink」ブロックを追加する
1. Fileに「GMSK_demod.dat」を入力する
2. Input Typeを「Byte」に変更する
5. 保存したデータの表示コマンド
1. hexdump –C GMSK_demod.dat
- 57. ©SIProp Project, 2006-2019 57
演習7:APRSパケット受信器を作成する
APRSパケットを受信してみる
目的
Audio入出力を利用して、既存のアマチュア無線機と
連携させる
内容
サンプリングレート
≒インピーダンスマッチング
ハードウェア連携
既存の無線機の違い
bit(データ)操作により、TNCを作成できる
- 58. ©SIProp Project, 2006-2019 58
演習7-1:APRSパケット受信器を作成する
APRSパケットを受信してみる
「study_7_start.grc」ファイルを読み込む
1. 「Audio Sink」ブロックを追加する
2. 「Multiply Const」ブロックを追加する
1. IO Typeを「Float」に変更する
2. Constantを「0.1」に変更する
1. これがボリュームとなる
3. 「Audio Sink」と「AX.25 FSK Mod」の間に接続する
3. 「Audio Source」ブロックを追加する
1. 「FSK Demodulator」と接続する
2. 「Qt GUI Time Sink」と接続する
AFを利用し、既存無線機と連携する
「Audio Sink」がスピーカー出力
「Audio Source」がマイク入力である
実際に動かすには下記のライブラリが必要です
https://github.com/tkuester/gr-bruninga と https://github.com/dl1ksv/gr-ax25
- 60. ©SIProp Project, 2006-2019 60
演習8: GR-satellitesをビルドする
GR-satellitesをビルドして、GNURadioに登録する
目的
ネットに一杯存在しているGNURadioのレシピを自力で
使えるようにする
ネットに存在しているものは、「ソースコード」の状態で存在し
てるため、コンパイル(ビルド)する必要がある
GR-satellites
https://github.com/daniestevez/gr-satellites
内容
ライブラリの追加の方法
既存の無線機の違い
他人が作った機能を追加できる
- 61. ©SIProp Project, 2006-2019 61
コンパイル(ビルド)とは?
ソースコード(プログラム)を実行できる形に変換
すること
その作業に必要なコマンド(ツール)
git clone [プログラムのURL]
ソースコードをダウンロードするためのコマンド
./configure
コンパイルに必要な設定を自動で行うコマンド
cmake ../
上記のconfigureと同じ。プログラムにより、こちらを使う場合も
ある
make
コンパイル(ビルド)を実際に行うコマンド
sudo make install
プログラムをインストールするコマンド
- 62. ©SIProp Project, 2006-2019 62
演習8-1: GR-satellitesをビルドする
ソースコードをダウンロードして、ビルドし、インス
トールする
赤字部分がレシピ(アプリ)特有部分であとは同じである
user@pc:~ $ git clone https://github.com/daniestevez/libfec
user@pc:~ $ cd libfec
user@pc:~ $ ./configure
user@pc:~ $ make
user@pc:~ $ sudo make install
user@pc:~ $ cd ../
user@pc:~ $ git clone https://github.com/daniestevez/gr-satellites
user@pc:~ $ cd gr-satellites
user@pc:~ $ mkdir build
user@pc:~ $ cd build
user@pc:~ $ cmake ../
user@pc:~ $ make
user@pc:~ $ sudo make install
user@pc:~ $ cd ../../