
GNU Radio の out-of-tree (OOT) モジュール(QRadioLink ブロック用)
重要なお知らせ: これはAIが生成したコードです。
このコードはプロのコーダーによるレビューを受けておらず、大規模なタスクです。コードベースにはテストが用意されていますので、それらとそのコードを確認してください。
GNU Radio out-of-tree (OOT)モジュール for QRadioLink blocks.
ブランチ main: GNU Radio 3.10 OOT (CMake find_package(gnuradio)). 実験的なGNU Radio 4ポートはブランチ gnuradio4 にあります(そのブランチのREADME_gr4.md)。
コードナビゲーション: docs/CODE_MAP.md(ファイル、関数、ブロックインデックス)。gr-ident ZMQモードルーティング: docs/GRIDENT_ZMQ.md(gr-identプリアンブル、ポート :5560)。
変調器ブロックのリファレンスIQは、radio-modulation-validator(2026-05-31)でチェックされました。要約: SOFT FAIL — 6/19ブロック合格、13ソフト不合格、0ハード不合格、3スキップ。
テストされたすべてのモードは、正しい変調ファミリ(FSK、PSK、AM、FM)で識別されました。次数レベルのソフト不合格(例えば、FSKが4FSKやGMSKではなくCPFSKと予測されたなど)は、バリデーターの次数分類器の限界を反映しており、これらの変調器が間違った波形ファミリを生成する証拠ではありません。
スキャンは組み込みのリファレンスIQを使用しており(OOTブロックはビルドされていません)、結果は main のこのREADMEにリストされているモードに適用され、gnuradio4 にも反映されています。
ブロックごとの完全な結果: VALIDATION_REPORT.md
このプロジェクトは以下のプレプリントで文書化されています:
Cryptographically Keyed Gaussian-Distributed Spread-Spectrum for Enhanced Covert Communications: Design, Implementation, and Simulated Performance in ITU Channel Models
IACR Cryptology ePrint Archive, Paper 2025/108456
https://eprint.iacr.org/2025/108456
アーカイブ記録タイムスタンプ:2026年3月21日。
このモジュールは、アマチュア無線およびデジタル音声通信に特化した、さまざまなデジタルおよびアナログ変調方式用のGNU Radioブロックを提供します。
このモジュールは、QRadioLinkアプリケーションから変換されました。QRadioLinkは、GNU Radio、ADALM-Pluto、LimeSDR、USRP、その他のSDRハードウェア向けのマルチモードSDRトランシーバーです。元のソースコードはhttps://codeberg.org/qradiolink/qradiolinkにあります。
検証: QRadioLinkに対応するブロックを持つ変換されたブロックは、元のQRadioLinkソース(ブランチ next、codeberg.org/qradiolink/qradiolink)に対して検証され、フローグラフ、フィルターパラメータ、スケーリング定数、ブロックの動作が一致するようにされています。SSBおよびAM変調器/復調器チェーン(CESSB構造およびクリッパー/ストレッチャー定数を含む)は、乖離があった箇所を元に戻して一致するように復元されました。このモジュールの一部のブロックにはQRadioLinkの src/gr/ に対応するソースがなく、その起源は以下の表に示されています。
クレジットと起源:
next、src/gr/ に対して検証済み):変調/復調(2FSK、4FSK、GMSK、BPSK、QPSK、AM、SSB、NBFM、WBFM)、デジタル音声(FreeDV、M17、DMR)、およびサポートブロック(RSSI、M17デフレーマー、MMDVMソース/シンク、クリッパー、ストレッチャー、zero_idle_bursts、gr_4fsk_discriminator、demod_mmdvm_multi、demod_mmdvm_multi2、mod_mmdvm_multi2)。これらのブロックのDSPとモード動作は、QRadioLinkアプリケーションから派生または再実装されました。src/gr/ に gr_* ソースがないもの):8FSK、SOQPSK、CPM-4FSK、dPMR、NXDN、POCSAG、D-STAR、YSF、P25。それらの起源は以下のブロック起源表に記載されています。ブロック起源(検証/帰属):
コードはlibFuzzerを使用して広範囲にファジングされ、複数のブロックで1億400万回以上の実行が行われ、クラッシュやメモリリークは発見されませんでした。カバレッジの詳細についてはfuzzing-results/results.mdを参照してください。
SOQPSKは、標準のQPSKと比較して改善されたスペクトル効率を提供する帯域効率の高い変調方式です。実装は2つの動作モードをサポートしています:
モード1: VHF/UHF単一チャネル
モード2: VHF/UHFマルチキャリア(フェージング耐性)
利用可能な最大帯域幅セグメント:
SOQPSK効率: ~1.5 bps/Hz
キャリアあたりの容量:
キャリア仕様:
すべてのブロックはPythonバインディングを介して利用可能であり、以下を含みます:
Pythonバインディングにより、GNU Radio CompanionのフローグラフやPythonスクリプトでの使用が可能になります。
gr-qradiolink/ ├── CMakeLists.txt # Top-level CMake configuration ├── include/ # Public header files │ └── gnuradio/ │ └── qradiolink/ ├── lib/ # Implementation files ├── python/ # Python bindings │ └── qradiolink/ │ └── bindings/ ├── grc/ # GNU Radio Companion block definitions ├── docs/ # Documentation │ ├── doxygen/ │ ├── CODE_MAP.md # Code and function map (all modules) │ ├── GRIDENT_ZMQ.md # gr-ident ZMQ mode routing guide │ ├── DSSS_BLOCKS.md # DSSS spreader/despreader guide │ ├── GDSS_BLOCKS.md # GDSS spreader/despreader guide │ └── PTT_CONTROL.md # PTT control with gr-osmosdr ├── examples/ # Example flowgraphs ├── tests/ # Unit tests └── cmake/ # CMake modules └── Modules/
## 依存関係
必要な依存関係とオプションの依存関係の完全なリストは、[DEPENDENCIES.md](https://github.com/supermagnum/gr-qradiolink/blob/HEAD/DEPENDENCIES.md) を参照してください。
**クイックサマリー:**
- `git clone --recursive` でクローンする(またはクローン後に `git submodule update --init --recursive` を実行する)
- GNU Radio >= 3.10(Codec2 サポート付きでビルドされたボコーダコンポーネントを含む)
- CMake >= 3.16
- Boost ライブラリ
- Volk(ベクトル最適化カーネルライブラリ)
- ZeroMQ(オプション、MMDVM ブロックおよび gr-ident プリアンブル SUB 用)
- Python 3.x(NumPy を含む、Python バインディング用)
- fmt ライブラリ(テスト用)
## テスト
このモジュールは、すべてのブロックに対する包括的なユニットテストを含んでいます。テストは CTest と Boost.Test フレームワークを使用して実行されます。
### テスト結果
すべてのテストは正常に合格します。C++ ユニットテスト、Python テストハーネス、エッジケースの結果については [tests/results.md](https://github.com/supermagnum/gr-qradiolink/blob/HEAD/tests/results.md) を参照してください。ファジングと MMDVM プロトコルテストの詳細については [fuzzing-results/results.md](https://github.com/supermagnum/gr-qradiolink/blob/HEAD/fuzzing-results/results.md) を参照してください。
**C++ ユニットテスト:**```
100% tests passed
Test Breakdown:
- 12 Manual tests (with int main): test_mod_2fsk, test_mod_4fsk, test_mod_8fsk,
test_mod_am, test_mod_gmsk, test_mod_bpsk, test_mod_mmdvm, test_mod_freedv,
test_gdss_spreader_cc, test_gdss_despreader_cc, test_dsss_cdma_transmitter_cc,
test_dsss_cdma_receiver_cc
- Boost.Test tests: mod_ssb, mod_qpsk, mod_nbfm, mod_wbfm, mod_dsss, all
demodulators, rssi_tag_block (8 tests), interleaver_bb (13 tests with edge cases)
- gr-ident: test_grident_zmq (JSON parse and mode_id to demod mapping)
Test Coverage:
- Modulators: 2FSK, 4FSK, 8FSK, AM, GMSK, BPSK, SSB, QPSK, NBFM, WBFM, DSSS, M17, DMR, dPMR, NXDN
- Demodulators: 2FSK, 4FSK, 8FSK, AM, GMSK, BPSK, SSB, QPSK, NBFM, WBFM, DSSS, M17, DMR, dPMR, NXDN
- FEC: interleaver_bb (HF burst error handling, 13 tests including edge cases)
- Note: SOQPSK and CPM-4FSK blocks are implemented and available but unit tests are planned for future releases
MMDVM プロトコルテスト (Python):``` 41 tests passed, 0 tests failed
See [fuzzing-results/results.md](https://github.com/supermagnum/gr-qradiolink/blob/HEAD/fuzzing-results/results.md) で完全なMMDVMプロトコルテスト結果を参照してください。
**DSSS BERシミュレーション** ([examples/dsss_ber_simulation.py](https://github.com/supermagnum/gr-qradiolink/blob/HEAD/examples/dsss_ber_simulation.py)) は、スプレッダー→AWGN→デスプレッダーを実行し、N=64, 128, 256 についてBER対SNRをプロットし、理論曲線 0.5*erfc(sqrt(N*Es/N0/2)) を重ね合わせます。曲線はシミュレーションノイズの範囲内で一致し、DSSSの動作が正しいことを確認します。
### テストの実行
テストスイートをビルドして実行するには:```bash
cd build
cmake ..
make
ctest --output-on-failure
このモジュールは、libFuzzerを使用した包括的なファジングカバレッジを含んでいます。完全なファジングキャンペーンの結果については、fuzzing-results/results.mdを参照してください。結果には以下が含まれます:
このモジュールには、すべての変調タイプに対するPythonベースの検証テストが含まれています。検証テストの結果については、fuzzing-results/results.mdを参照してください。すべてのデジタル音声モード (FreeDV, M17, DMR, dPMR, NXDN) にPythonバインディングと検証サポートが追加されました。SOQPSKブロックにはPythonバインディングがあり使用可能です。検証テストは将来のリリースで計画されています。
mode_idからの復調/変調バンクの切り替え。全てのブロックは、grc/ ディレクトリ内にGRC(GNU Radio Companion)ブロック定義を持っています。主要ブロック:
デジタル変調:
アナログ変調:
デジタル音声:
MMDVMプロトコル:
gr-ident (オプション、libzmq):
FEC:
全ブロックの完全なリストについては、grc/ ディレクトリを参照してください。
このプロジェクトは、GNU General Public License v3.0以降(GPL-3.0-or-later)の下でライセンスされています。
詳細については、QRadioLinkリポジトリのLICENSEファイルを参照してください。
| ブロック名 | 起源 | 備考 |
|---|
| 2FSK, 4FSK, GMSK, BPSK, QPSK, AM, SSB, NBFM, WBFM, FreeDV, M17, DMR | QRadioLink | QRadioLink src/gr/ (gr_demod_, gr_mod_)に対して検証済み。 |
| MMDVM ソース/シンク、demod_mmdvm_multi、demod_mmdvm_multi2、mod_mmdvm_multi2、RSSI、クリッパー、ストレッチャー、zero_idle_bursts、gr_4fsk_discriminator | QRadioLink | QRadioLink src/gr/ に対して検証済み。 |
| 8FSK | このモジュール用に実装 | QRadioLink には gr_demod_8fsk/gr_mod_8fsk はありません。4FSKスタイル設計の拡張。 |
| SOQPSK | このモジュール用に実装 | QRadioLink には gr_demod_soqpsk/gr_mod_soqpsk はありません。SOQPSK文献/仕様に基づく。 |
| CPM-4FSK | このモジュール用に実装 | QRadioLink には gr_mod_cpm_4fsk はありません。 |
| dPMR | このモジュール用に実装 | QRadioLink に gr_* はありません。ETSI TS 102 658(テストベクターとコードコメント)に基づく。 |
| NXDN | このモジュール用に実装 | QRadioLink に gr_* はありません。NXDNフォーラム仕様に基づく。シンボルマッピングはMMDVMの慣例を参照。 |
| POCSAG | このモジュール用に実装 | QRadioLink に gr_* はありません。POCSAG/ITU-R M.584-2に基づく。MMDVMHostと互換性あり。 |
| D-STAR | このモジュール用に実装 | QRadioLink に gr_* はありません。D-STAR/JARL仕様(Golay FEC)に基づく。MMDVMHostと互換性あり。 |
| YSF | このモジュール用に実装 | QRadioLink に gr_* はありません。YSFプロトコル文書に基づく。MMDVMHostと互換性あり。 |
| P25 | このモジュール用に実装 | QRadioLink に gr_* はありません。P25 Phase 1 TIA-102に基づく。MMDVMHostと互換性あり。 |
| DSSS (基本) | QRadioLink | QRadioLink gr_demod_dsss/gr_mod_dsssに対して検証済み。 |
| DSSS (拡張), GDSS | このモジュール | DSSS: QRadioLink基本機能の上に拡張。GDSS: Shakeelら、Sensors 2023に基づく。 |
| gr-ident ZMQルーティング | このモジュール | gr-ident プリアンブルPUBとの相互運用。QRadioLink由来ではない。 |
tcp://127.0.0.1:5560 でデコードされた mode_id をサブスクライブし、一致する復調/変調ブロックファミリを選択します(GRIDENT_ZMQ.md、CODE_MAP.mdを参照)
libzmqが必要)route_out に demod_block / mod_block をパブリッシュ