BC-11AH-A2の最大スループット

Posted by: otsuka

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