このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。
この例では、
System object™ を使用して、シミュレートされた IEEE® 802.15.4 [1] 送信機のエラー ベクトル振幅 (EVM) を測定する方法を示します。ZigBee 仕様は IEEE 802.15.4 に基づきます。comm.EVM
エラー ベクトル振幅 (EVM) は、エラーのない変調信号である基準波形と実際に送信された波形の差の測定値です。EVM は、送信機の変調精度を定量化するときに使用します。[1] は、802.15.4 送信機が RMS EVM 値が 35% より悪くならないことを規定しています。
868 MHz 帯域対応の 802.15.4 システムは、チップ変調に使用する 2 位相シフト キーイング (BPSK) とデータ シンボル符号化に使用する差分符号化がある直接シーケンス スペクトル拡散 (DSSS) を利用します。
dataRate = 20e3; % Bit rate in Hz M = 2; % Modulation order (BPSK) chipValues = [1;1;1;1;0;1;0;1;1;0;0;1;0;0;0]; % Chip values for bit 0. % Chip values for 1 is the opposite.
[ 1 ] の 6.7.3 節では、1000 以上の I および Q のベースバンド出力サンプルで測定を実行することを指定しています。フィルター遅延を考慮して、送信シンボルのシミュレーションではビットを 1 つ多く含めます。送信信号を 4 個オーバーサンプリングすることにします。送信機とテスト ハードウェアにおける信号劣化を考慮して SNR が 60 dB であると仮定しています。
numSymbols = 1000; % Number of symbols required for one EVM value numFrames = 100; % Number of frames nSamps = 4; % Number of samples that represents a symbol filtSpan = 8; % Filter span in symbols gain = length(chipValues); % Spreading gain (number of chips per symbol) chipRate = gain*dataRate; % Chip rate sampleRate = nSamps*chipRate; % Final sampling rate numBits = ceil((numSymbols)/gain)+1; % Number of bits required for one EVM value SNR = 60; % Simulated signal-to-noise ratio in dB
0 ~ +1 および 1 ~ -1 の簡単なマッピングを行うと、BPSK 変調されたシンボルを取得できます。チップ値もマッピングした場合、ビット チップ変換前に変調し、行列演算を使用して効率的な MATLAB® コードを作成できます。ZigBee 仕様では、パルス整形フィルターを、ロールオフ係数 1 のレイズド コサイン パルスをもつと定義することもできます。
% Map chip values chipValues = 1 - 2*chipValues; % Design a raised cosine filter with rolloff factor 1 rctFilt = comm.RaisedCosineTransmitFilter('RolloffFactor', 1, ... 'OutputSamplesPerSymbol', nSamps, ... 'FilterSpanInSymbols', filtSpan); rcrFilt = comm.RaisedCosineReceiveFilter('RolloffFactor', 1, ... 'InputSamplesPerSymbol', nSamps, ... 'FilterSpanInSymbols', filtSpan, ... 'DecimationFactor', nSamps);
Communications Toolbox™ には、RMS EVM、最大 EVM、および X 番目のパーセンタイル EVM 値を計算する comm.EVM があります。[ 1 ] の 6.7.3 節では EVM の計算方法が定義され、測定された I および Q サンプルの平均誤差はシンボルの強度で正規化されます。BPSK システムの場合、両方のコンスタレーション シンボルの強度は同じです。これにより、'ピーク コンスタレーション電力' 正規化オプションを使用できます。他の通信システム規格で使用できるその他の正規化オプションには、平均コンスタレーション電力と平均基準信号強度があります。
evm = comm.EVM('Normalization', 'Peak constellation power')
evm = comm.EVM with properties: Normalization: 'Peak constellation power' PeakConstellationPower: 1 ReferenceSignalSource: 'Input port' MeasurementIntervalSource: 'Input length' AveragingDimensions: 1 MaximumEVMOutputPort: false XPercentileEVMOutputPort: false
最初にランダム データ ビットを生成し、
System object を使用してこれらのビットを差分符号化し、BPSK を使用して変調します。変調されたシンボルを、マップされたチップ値で行列乗算を行うことで拡散します。拡散されたシンボルはパルス整形フィルターを介して渡されます。EVM オブジェクトでは、受信シンボル rd および基準シンボル c は同期されており、かつ同じレートでしサンプリングされると想定されています。受信信号 r をダウンサンプリングし、基準信号 c と同期させます。comm.DifferentialEncoder
[ 1 ] では、1 回の RMS EVM 計算で 1000 個のシンボルを使用する必要があります。十分な平均を取るために、1000 個のシンボルを 100 フレーム シミュレートしてこれらの 100 RMS EVM 測定値の最大値を測定結果として使用します。シミュレートした送信機は前のエラー ベクトル振幅の節に示される基準を満たしています。
% Tx and Rx filter delays are identical and equal to half the filter span. % Total delay is equal to the sum of two filter delays, which is the filter % span of one filter. refSigDelay = rctFilt.FilterSpanInSymbols; % Simulated number of symbols in a frame simNumSymbols = numBits*gain; % Initialize peak RMS EVM peakRMSEVM = -inf; % Create a comm.DifferentialEncoder object to differentially encode data diffenc = comm.DifferentialEncoder; % Create an comm.AWGNChannel System object and set its NoiseMethod property % to 'Signal to noise ratio (SNR)' chan = comm.AWGNChannel('NoiseMethod', 'Signal to noise ratio (SNR)',... 'SNR', SNR); % Loop over bursts for p=1:numFrames % Generate random data b = randi([0 M-1], numBits, 1); % Differentially encode d = diffenc(b); % Modulate x = 1-2*d; % Convert symbols to chips (spread) c = reshape(chipValues*x', simNumSymbols, 1); % Pulse shape cUp = rctFilt(c); % Calculate and set the 'SignalPower' property of the channel object chan.SignalPower = sum(cUp.^2)/length(cUp); % Add noise r = chan(cUp); % Downsample received signal. Account for the filter delay. rd = rcrFilt(r); % Measure using the EVM System object rmsEVM = evm(complex(rd(refSigDelay+(1:numSymbols))), ... complex(c(1:numSymbols))); % Update peak RMS EVM calculation if (peakRMSEVM < rmsEVM) peakRMSEVM = rmsEVM; end end % Display results fprintf(' Worst case RMS EVM (%%): %1.2f\n', peakRMSEVM)
Worst case RMS EVM (%): 0.19
ZigBee 送信機が指定された EVM 値に準拠するかどうかを、comm.EVM を利用してテストする方法を示しました。加法性ホワイト ガウス ノイズのみを発生する大まかなモデルを使用し、測定された EVM が指定された標準値を 35% 下回ることを示しました。
IEEE Standard 802.15.4, Wireless Medium Access Control (MAC) and Physical Layer (PHY) Specifications for Low-Rate Wireless Personal Area Networks, 2003.