Main Content

エンドツーエンドの 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 帯域の標準のレイズド コサイン フィルター) に渡されます。詳細は Clause 10 [1] を参照してください。

  • BPSK PHY: BPSK PHY は PPDU ビットを差分符号化します。得られた各ビットは、15 ビット シーケンスに拡散されます。その後で、チップ シーケンスは BPSK 変調され、標準のレイズド コサイン フィルターに渡されます。詳細は Clause 11 [1] を参照してください。

  • ASK PHY: ASK PHY はプリアンブルと SFD のみのために BPSK 変調を使用します。残りの PPDU ビット、すなわち PHY ヘッダー (PHR) と MPDU は、まず 868 MHz 帯域の 20 ビット シンボルにマップされ、次に 915 MHz 帯域の 5 ビット シンボルにマップされます。各シンボルは、Parallel Sequence Spread Spectrum (PSSS) または Orthogonal Code Division Multiplexing (OCDM) として知られる手法を使用して 32 チップ シーケンスに拡散されます。その後で、チップ シーケンスは ASK 変調され、ルート レイズド コサイン フィルターに渡されます。詳細は Clause 12 [1] を参照してください。

  • GFSK PHY: GFSK PHY は、はじめに剰余 2 の加算と PN9 シーケンスを使用して PPDU ビットを白色化します。その後で、白色化されたビットは GFSK 復調されます。詳細は Clause 15 [1] を参照してください。

波形の生成、復号化、BER 曲線計算

このコードは、さまざまな周波数帯域で波形の生成関数および復号化関数を使用して対応する BER 曲線を比較する方法を示します。

EcNo = -25:2.5:17.5;% Ec/No range of BER curvesspc = 4;%样本每个芯片msgLen = 8*120;% length in bitsmessage = randi([0 1], msgLen, 1);% transmitted message% Preallocate vectors to store BER results:[berOQPSK2450, berOQPSK780, berBPSK, berASK915,...berASK868, berGFSK] = deal(zeros(1, length(EcNo)));foridx = 1:length(EcNo)% loop over the EcNo range% O-QPSK PHY, 2450 MHzwaveform = lrwpan.PHYGeneratorOQPSK(message, spc,'2450 MHz'); K = 2;% information bits per symbolSNR = 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, 780MHzwaveform = 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 MHzwaveform = lrwpan.PHYGeneratorBPSK(message, spc); K = 1;% information bits per symbolSNR = 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 MHzwaveform = lrwpan.PHYGeneratorASK(message, spc,'915 MHz'); K = 1;% information bits per symbolSNR = 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 MHzwaveform = lrwpan.PHYGeneratorASK(message, spc,'868 MHz'); K = 1;% information bits per symbolSNR = 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 MHzwaveform = lrwpan.PHYGeneratorGFSK(message, spc); K = 1;% information bits per symbolSNR = 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 curvefigure 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]) gridon

その他の調査

ジェネレーター関数と復号化関数の詳細については、次の情報を参照してください。

参考文献

  1. IEEE 802.15.4-2011 - IEEE Standard for Local and metropolitan area networks--Part 15.4: Low-Rate Wireless Personal Area Networks (LR-WPANs)