Измерения 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], указывает, что измерения выполняются более чем 1 000 выборок меня и основополосных выходных параметров 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, чтобы вычислить RMS EVM, Максимальный EVM и процентиль Xth значения EVM. Разделите 6.7.3 из [1], задает метод расчета EVM, где средняя погрешность измеренных я и выборки 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

Симуляция

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

[1] требует, чтобы 1 000 символов использовались в одной RMS вычисление EVM. Чтобы убедиться у нас есть достаточно усреднения, мы симулируем 100 систем координат 1 000 символов и используем максимум этих 100 RMS измерения EVM как результат измерения. Мы видим, что симулированный передатчик соответствует критериям, упомянутым в разделе Error Vector Magnitude выше.

% 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.