Измерения EVM для системы 802.15.4 (ZigBee ®)

В этом примере показано, как использовать comm.EVM Система object™ для измерения величины вектора ошибок (EVM) моделируемого передатчика IEEE ® 802.15.4 [1]. IEEE 802.15.4 является базисом для спецификаций ZigBee.

Векторная Величина с ошибками (EVM)

Вектор величины ошибок (EVM) является мерой различия между формой волны ссылки, которая является модулированным сигналом без ошибок, и фактической переданной формой волны. EVM используется для количественной оценки точности модуляции передатчика. [1] требует, чтобы передатчик 802.15.4 не имел значения RMS EVM хуже 35%.

Системные параметры

Система 802.15.4 для полосы 868 МГц использует прямой спектр расширения последовательности (DSSS) с двоичной фазовой манипуляцией (BPSK), используемой для модуляции микросхемы и дифференциального кодирования, используемой для кодирования символов данных.

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.

В разделе 6.7.3 [1] указывается, что измерения выполняются по 1000 выборкам выходов I и Q основной полосы частот. Чтобы учесть задержки фильтра, мы включаем еще 1 бит в симуляцию переданных символов. Мы решили переопределить переданный сигнал на четыре. Мы принимаем ОСШ 60 дБ для учета дефектов передатчика и тестирования оборудования.

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

Инициализация

Мы можем получить модулированные BPSK символы с простым отображением от 0 до + 1 и от 1 до -1. Если мы также сопоставляем значения чипа, то мы можем модулировать перед преобразованием бита в чип и использовать матричную математику, чтобы записать эффективный код 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);

Измерения EVM

Communications Toolbox™ предоставляет comm.EVM для вычисления значений EVM RMS, Maximum EVM и X-го процентиля EVM. Раздел 6.7.3 [1] задает метод вычисления EVM, где средняя ошибка измеренных I и Q выборки нормирована степенью символа. Для системы BPSK степень обоих символов созвездия одинаковая. Поэтому мы можем использовать опцию нормализации 'Peak constellation power'. Другие доступные опции нормализации, которые могут использоваться с другими стандартами коммуникационной системы, являются средней степенью созвездия и средней степенью опорного сигнала.

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

Симуляция

Мы сначала генерируем случайные биты данных, дифференциально кодируем эти биты, используя comm.DifferentialEncoder Системный объект и модулируйте с использованием BPSK. Мы расширяем модулированные символы, используя матричное умножение с отображенными значениями чипа. Затем расширенные символы передаются через импульсный формирующий фильтр. Объект EVM принимает, что принятые символы, rd и опорные символы, c, синхронизируются и дискретизируются с той же скоростью. Мы понижаем значение полученного сигнала r и синхронизируем с опорным сигналом, c.

[1] требует, чтобы в одном вычислении RMS EVM использовалось 1000 символов. Чтобы убедиться, что у нас достаточно среднего, мы симулируем 100 системы координат 1000 символов и используем максимальное из этих 100 измерений EVM RMS в качестве результата измерения. Мы видим, что моделируемый передатчик соответствует критериям, упомянутым в разделе «Величина вектора ошибок» выше.

% 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

Комментарии

Мы показали, как использовать comm.EVM, чтобы протестировать, соответствует ли передатчик ZigBee заданным стандартным значениям EVM. Мы использовали сырую модель, которая только вводит аддитивный белый Гауссов шум и показала, что измеренный EVM меньше, чем стандартные заданные 35%.

Избранная библиография

  1. Стандарт IEEE 802.15.4, Спецификации к управлению доступом к беспроводной среде (MAC) и физическому слою (PHY) для низкоскоростных беспроводных персональных вычислительных сетей, 2003.