BC-11AH-A2 を用いて11ah通信のスループットを計測する方法は
nrc7394_sw_pkg パッケージ内に同梱の
NRC7394 Evaluation Kit User Guide (Host Mode)
の
4 NRC7394 EVK performance evaluation
に紹介されています。
この方法で計測してみて「11ah の理論値ほどはスループットが出ないな」
と思われている方もいらっしゃるかもしれません。
そこで BC-11AH-A2 で使用している 11ah 通信用 chip nrc7394 の設定項目を調整し、
ハードウェアとして最大でどれだけのスループットが得られるのか計測してみました。
使用したハードウェアは
- BC-11AH-A2
- AP:Raspberry Pi 4 B
- STA:Raspberry Pi 4 Compute Module + Compute Module 4 IO Board
ソフトウェアは
2025.11 Release image for BC-11AH-A/A2 の 32bi版を使用、すなわち
- Raspberry Pi OS bullseye 2025-05-06 Release
- NRC7394 SW PKG v1.3.1
です。
この計測時には 10% duty の設定を off にするため
アッテネーターを介して AP と STA のアンテナ端子を同軸ケーブルで接続し
空中には電波が飛ばないようにして計測しました。
また、11ah インタフェースを AP モードまたは STA モードで up するスクリプト
start.py の中に設定する項目の値を以下のようにしています。
1. 10% duty 設定を停止
設定: duty_cycle_enable = 0 に。
10% duty を off にしているので断続的に電波の出力を停止することなく
通信し続けることになります。
2. A-MPDU の有効化
設定: ampdu_enable = 1(default では 2 auto になっているのを on にします。)
複数のデータフレームを1つの大きなフレームにまとめて送ることで、
通信ごとの無駄な待ち時間(IFS)やヘッダー情報を劇的に減らすことができます。
さらに同時に
ndp_ack_1m = 0 (default でもともと 0 です。) であることを確認します。
1MHz 時は設定に関わらず連結できるデータ数が最大8個ですが、
2MHzまたは4MHz帯域使用時に連結できるデータ数が16個に倍増し速度がさらに上がります。
3. ガードインターバルの短縮
設定: guard_int = 'short' (デフォルトは 'long')
データ間の隙間(ガードインターバル)を短くすることで、
単位時間あたりに送れるデータ量を微増させることができます。
この設定で start.py により AP と STA をそれぞれ起動して接続し 11ah 通信を開始、
その後に MCS の設定を変更します。
無線通信における MCS(Modulation and Coding Scheme)とは、
データの送り方(変調方式)と、エラー訂正の強さ(符号化率)の組み合わせを数値化した指標のことです。
規格としての 11ah は MCS 0 から 10 までが定められていますが、
8、9 は NRC7394 では実装されていません。
(Morse Micro 社の 11ah chip MM6108 も 8、9 は実装していません。)
IEEE 802.11ah(Wi-Fi HaLow)の MCS(Modulation and Coding Scheme)インデックスに基づいて
各パラメータをまとめた表を以下に示します。
802.11ah は IEEE 802.11acのクロックを 1/10 に落とした(10倍ダウンクロック)仕様となっており、
ガードインターバル(GI)も10倍の長さになります。
下の表の速度は一般的な ロングガードインターバル(8.0μs/16.0μs)
かつ 単一空間ストリーム(1SS)での理論値です。
IEEE 802.11ah MCS パラメータ対応表
| MCS |
変調方式 |
符号化率 |
1MHz幅 (Mbps) |
2MHz幅 (Mbps) |
4MHz幅 (Mbps) |
特徴 |
| 0 |
BPSK |
1/2 |
0.30 |
0.65 |
1.35 |
基本的な低速・長距離モード |
| 1 |
QPSK |
1/2 |
0.60 |
1.30 |
2.70 |
バランスの取れた標準モード |
| 2 |
QPSK |
3/4 |
0.90 |
1.95 |
4.05 |
効率を高めたQPSKモード |
| 3 |
16-QAM |
1/2 |
1.20 |
2.60 |
5.40 |
中距離・中速向け |
| 4 |
16-QAM |
3/4 |
1.80 |
3.90 |
8.10 |
安定した通信環境での常用モード |
| 5 |
64-QAM |
2/3 |
2.40 |
5.20 |
10.80 |
高速化(64-QAM)の開始 |
| 6 |
64-QAM |
3/4 |
2.70 |
5.85 |
12.15 |
高スループット向け |
| 7 |
64-QAM |
5/6 |
3.00 |
6.50 |
13.50 |
4MHz幅等で高い伝送能力を発揮 |
| 10 |
BPSK |
1/2 (2回繰返) |
0.15 |
N/A |
N/A |
1MHz限定。最も頑強で遠くまで届く |
MCS の設定変更は NRC 11ah driver と通信して設定を行うアプリケーション cli_app で行います。
cli_app の詳細は
NRC7394 Evaluation Kit User Guide (CLI Application)
をご覧ください。
cli_app は start.py で 11ah インタフェースが up しているときしか設定を行うことができません。
MCS は default では通信状態によって自動で調整されます。
現在の MCS を確認するには AP、STA でそれぞれ以下のコマンドを実行します。
AP では show sta
pi@raspberrypi:~/nrc_pkg/script $ ./cli_app show sta 0
STATION MAC_ADDR AID STATE TX bit rate RX bit rate
===================================================================================
0 a0:8a:06:35:04:5b 1 ASSOC 7.22MBit/s(MCS 5) 7.22MBit/s(MCS 6)
Duplicate AID count : 0
===================================================================================
OK
STA では show ap
pi@raspberrypi:~/nrc_pkg/script $ ./cli_app show ap 0
BSSID BW TX bit rate RX bit rate
=====================================================================
a0:8a:06:35:07:b7 2M 7.22MBit/s(MCS 6) 7.22MBit/s(MCS 5)
=====================================================================
OK
これを以下の操作で常に 7 になるよう固定します。
1. レイトコントロール(自動選択)をオフにします。
AP、STA とも同様に実行します。
pi@raspberrypi:~/nrc_pkg/script $ ./cli_app set rc off
------------------------ updated rate control -------------------------
rc : off vif_id : 0 mode : NRC
-----------------------------------------------------------------------
OK
2. MCSを指定の値に固定します。
こちらも AP、STA それぞれで以下を実行します。
pi@CM4otsuka:~/nrc_pkg/script $ ./cli_app test mcs 7
OK
MCS 7 に固定した状態で iperf3 による計測を実行します。
AP 側でサーバを実行
pi@raspberrypi:~/nrc_pkg/script $ iperf3 -s
-----------------------------------------------------------
Server listening on 5201
-----------------------------------------------------------
STA 側でクライアントを実行。
11ah の帯域での純粋な無線性能を見るため UDP オプションで実行し、
bitrate の limit は 0(すなわちリミットなし)で実行します。
pi@CM4:~ $ iperf3 -B 192.168.200.36 -c 192.168.200.1 --timestamp -u -b 0
このオプションによる計測を、1MHz、2MHz、4MHz の各帯域幅でそれぞれ10試行した平均は
以下のようになりました。
| 帯域幅 |
実測値 (Receiver) |
PHYレート (理論値) |
効率 (実測/理論) |
| 1MHz |
2.11 Mbps |
3.0 Mbps |
約 70% |
| 2MHz |
5.10 Mbps |
6.5 Mbps |
約 78% |
| 4MHz |
9.22 Mbps |
13.5 Mbps |
約 68% |
Wi-Fi規格全般において、UDPの実効スループットはPHYレートの
70%〜80%程度 になるのが一般的(最高に効率が良い状態)です。
そのため、この実測値は
NRC7394 が「11ahの性能をほぼ出し切る性能を有している」
ことを示していると考えます。
以下、10 試行時の各帯域幅ごとのログへのリンクです。
1MHz_no_duty_MCS7_iperf3_client_udb_log_20260317.txt
2MHz_no_duty_MCS7_iperf3_client_udb_log_20260317.txt
4MHz_no_duty_MCS7_iperf3_client_udb_log_20260317.txt