このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。
エンドツーエンドの IEEE 802.15.4 PHY シミュレーション
この例では、Communications Toolbox™ Library for ZigBee and UWB を使用して、波形を生成する方法、波形を復号化する方法、IEEE® 802.15.4™ 規格 [1] のさまざまな PHY 仕様の BER 曲線を計算する方法を説明します。
背景
IEEE 802.15.4 規格は、低速無線パーソナル エリア ネットワーク (LR-WPAN) [1] の PHY 層と MAC 層を定義します。IEEE 802.15.4 の PHY 層と MAC 層は、ZigBee、WirelessHart®、6LoWPAN、MiWi などの他の上位層の規格のベースを提供します。このような規格は、ホーム オートメーションやセンサー ネットワーキングに使用例があり、モノのインターネット (IoT) の流行にも密接に関連しています。
IEEE 802.15.4 の物理層実装
元の IEEE 802.15.4 規格とその改訂版は、複数の PHY 層を規定しています。これらはさまざまな変調方式を使用しさまざまなデータ転送速度をサポートします。これらの物理層は、特定の周波数帯域に関して、特定の国々をある程度想定して考案されました。この例では、元の IEEE 802.15.4 仕様 (2.4 GHz の OQPSK、868/915 MHz の BPSK)、IEEE 802.15.4b (868/915 MHz の OQPSK および ASK)、IEEE 802.15.4c (780 MHz の OQPSK)、および IEEE 802.15.4d (950 MHz の GFSK および BPSK) で提案されている物理層の波形を生成および復号化する関数を提供します。
これらの物理層は、プリアンブルやフレーム開始区切り記号 (SFD) などの PHY プロトコル データ ユニット (PPDU) の形式、MAC プロトコル データ ユニット (MPDU) の長さと内容を規定します。プリアンブルと SFD は、フレーム レベルの同期で使用します。次の説明で、項記号はチップ シーケンスの整数インデックスを示します (IEEE 802.15.4 規格による)。複素数などの変調シンボルではありません。
OQPSK PHY: すべての OQPSK PHY はすべての 4 PPDU ビットを 1 つのシンボルにマップします。2.4 GHz OQPSK PHY は、各シンボルを 32 チップ シーケンスに拡散させますが、他の OQPSK PHY は 16 チップ シーケンスに拡散させます。その後で、チップ シーケンスは OQPSK 変調され、ハーフ サイン パルス整形フィルター (780 MHz 帯域の標準のレイズド コサイン フィルター) に渡されます。詳細については、[1] の Clause 10 を参照してください。
BPSK PHY: BPSK PHY は PPDU ビットを差分符号化します。得られた各ビットは、15 ビット シーケンスに拡散されます。その後で、チップ シーケンスは BPSK 変調され、標準のレイズド コサイン フィルターに渡されます。詳細については、[1] の Clause 11 を参照してください。
ASK PHY: ASK PHY はプリアンブルと SFD のみのために BPSK 変調を使用します。PHY ヘッダー (PHR) や MPDU などの残りの PPDU ビットは、まず 868 MHz 帯域の 20 ビット シンボルにマップされ、次に 915 MHz 帯域の 5 ビット シンボルにマップされます。各シンボルは、Parallel Sequence Spread Spectrum (PSSS) または Orthogonal Code Division Multiplexing (OCDM) として知られる手法を使用して 32 チップ シーケンスに拡散されます。その後で、チップ シーケンスは ASK 変調され、ルート レイズド コサイン フィルターに渡されます。詳細については、[1] の Clause 12 を参照してください。
GFSK PHY: GFSK PHY は、はじめに剰余 2 の加算と PN9 シーケンスを使用して PPDU ビットを白色化します。その後で、白色化されたビットは GFSK 復調されます。詳細については、[1] の Clause 15 を参照してください。
波形の生成、復号化、BER 曲線計算
このコードは、さまざまな周波数帯域で波形の生成関数および復号化関数を使用して対応する BER 曲線を比較する方法を示します。
EcNo = -25:2.5:17.5; % Ec/No range of BER curves spc = 4; % samples per chip msgLen = 8*120; % length in bits s = rng(54806); % Seed random number generator message = randi([0 1],msgLen,1); % transmitted message % Preallocate vectors to store BER results: [berOQPSK2450, berOQPSK780, berBPSK, berASK915, ... berASK868, berGFSK] = deal(zeros(1,length(EcNo))); for idx = 1:length(EcNo) % loop over the EcNo range % O-QPSK PHY, 2450 MHz waveform = lrwpan.PHYGeneratorOQPSK( ... message,spc,'2450 MHz'); K = 2; % information bits per symbol SNR = EcNo(idx) - 10*log10(spc) + 10*log10(K); received = awgn(waveform, SNR); bits = lrwpan.PHYDecoderOQPSKNoSync( ... received,spc,'2450 MHz'); [~, berOQPSK2450(idx)] = biterr(message, bits); % O-QPSK PHY, 780MHz waveform = lrwpan.PHYGeneratorOQPSK( ... message,spc,'780 MHz'); % or '868 MHz'/'915 MHz' SNR = EcNo(idx) - 10*log10(spc) + 10*log10(K); received = awgn(waveform, SNR); bits = lrwpan.PHYDecoderOQPSKNoSync( ... received,spc,'780 MHz'); % or '868 MHz'/'915 MHz' [~, berOQPSK780(idx)] = biterr(message,bits); % BPSK PHY, 868/915/950 MHz waveform = lrwpan.PHYGeneratorBPSK(message,spc); K = 1; % information bits per symbol SNR = EcNo(idx) - 10*log10(spc) + 10*log10(K); received = awgn(waveform, SNR); bits = lrwpan.PHYDecoderBPSK(received,spc); [~, berBPSK(idx)] = biterr(message,bits); % ASK PHY, 915 MHz waveform = lrwpan.PHYGeneratorASK(message,spc,'915 MHz'); K = 1; % information bits per symbol SNR = EcNo(idx) - 10*log10(spc) + 10*log10(K); received = awgn(waveform, SNR); bits = lrwpan.PHYDecoderASK(received, spc,'915 MHz'); [~, berASK915(idx)] = biterr(message, bits(1:msgLen)); % ASK PHY, 868 MHz waveform = lrwpan.PHYGeneratorASK(message,spc,'868 MHz'); K = 1; % information bits per symbol SNR = EcNo(idx) - 10*log10(spc) + 10*log10(K); received = awgn(waveform, SNR); bits = lrwpan.PHYDecoderASK(received, spc,'868 MHz'); [~, berASK868(idx)] = biterr(message, bits(1:msgLen)); % GFSK PHY, 950 MHz waveform = lrwpan.PHYGeneratorGFSK(message,spc); K = 1; % information bits per symbol SNR = EcNo(idx) - 10*log10(spc) + 10*log10(K); received = awgn(waveform, SNR); bits = lrwpan.PHYDecoderGFSK(received,spc); [~, berGFSK(idx)] = biterr(message, bits); end % plot BER curve figure semilogy(EcNo,berOQPSK2450,'-o',EcNo,berOQPSK780,'-*', ... EcNo,berBPSK,'-+',EcNo,berASK915,'-x',EcNo,berASK868, ... '-s',EcNo,berGFSK,'-v') legend('OQPSK, 2450 MHz','OQPSK, 780 MHz', ... 'BPSK, 868/915/950 MHz','ASK, 915 MHz', ... 'ASK, 868 MHz','GFSK, 950 MHz', ... 'Location','southwest') title('IEEE 802.15.4 PHY BER Curves') xlabel('Chip Energy to Noise Spectral Density, Ec/No (dB)') ylabel('BER') axis([min(EcNo) max(EcNo) 10^-2 1]) grid on
その他の調査
この例で使用している Communications Toolbox Library for ZigBee and UWB アドオンのオブジェクトおよび関数は次のとおりです。
lrwpan.PHYGeneratorOQPSK、lrwpan.PHYDecoderOQPSKNoSync、および lrwpan.PHYDecoderOQPSK: IEEE 802.15.4 OQPSK 波形の作成と復号化
lrwpan.PHYGeneratorBPSK および lrwpan.PHYDecoderBPSK: IEEE 802.15.4 BPSK 波形の作成と復号化
lrwpan.PHYGeneratorASK および lrwpan.PHYDecoderASK: IEEE 802.15.4 ASK 波形の作成と復号化
lrwpan.PHYGeneratorGFSK および lrwpan.PHYDecoderGFSK: IEEE 802.15.4 GFSK 波形の作成と復号化
これらのユーティリティはドキュメンテーションになく、API または機能が将来変更される可能性があります。これらのユーティリティのいずれかについてソース コードを表示するには、関数edit
を使用します。たとえば、次のように入力します。
edit lrwpan.PHYDecoderOQPSK
MATLAB® コマンド ラインで上のように入力すると、lrwpan.PHYGeneratorOQPSK
が開きます。
参考文献
1 - "IEEE Standard for Local and Metropolitan Area Networks--Part 15.4: Low-Rate Wireless Personal Area Networks (LR-WPANs)," in IEEE Std 802.15.4-2011 (Revision of IEEE Std 802.15.4-2006) , vol., no., pp.1-314, 5 Sept. 2011, doi: 10.1109/IEEESTD.2011.6012487.