• Регистрация
Sancho
Sancho +99.25
н/д

Измерение вектора ошибки для системы стандарта IEEE 802.15.4 (ZigBee)

30.04.2019

Данный пример демонстрирует, как использовать системный объект COMM.EVM для измерения величины векторной ошибки (EVM) при симуляции передатчика стандарта IEEE® 802.15.4 [ 1 ]. IEEE 802.15.4 - это основной документ спецификации ZigBee.

Contents

  • Величина векторной ошибки
  • Параметры системы
  • Инициализация системы
  • Измерение величины векторной ошибки
  • Симуляция
  • Комментарии
  • Библиография

 

Величина векторной ошибки

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

Параметры системы

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

dataRate = 20e3;   % Скорость битового потока в Гц
M = 2;             % Порядок модуляции (BPSK)
chipValues = [1;1;1;1;0;1;0;1;1;0;0;1;0;0;0];
                   % Значения чипов для бита равного 0
                   % Значения чипов для 1 имеют противоположные значения

Раздел 6.7.3 из [ 1 ] определяет, что измерения проводятся для 1000 отсчетов синфазной (I) и квадратурной (Q) составляющих сигнала в основной полосе. Для учета задержки, вносимой фильтром, при симуляции передаваемых символов мы добавили 1 дополнительный бит. Передаваемый сигнал интерполируется с коэффициентом интерполяции, равным 4. Мы предполагаем отношение сигнал-шум (SNR) равное 60 дБ для учета искажений вносимых передатчиком и тестируемым оборудованием.

numSymbols = 1000;          % Число символов, необходимое для одного измерения EVM
numFrames = 100;            % Число фреймов
nSamps = 4;                 % Число отсчетов, представляющих символ
filtSpan = 8;               % Длина фильтра в символах
gain = length(chipValues);  % Усиление за счет расширения (число чипов в символе)
chipRate = gain*dataRate;   % Скорость потока чипов
sampleRate = nSamps*chipRate;    % Окончательная частота дискретизации
numBits = ceil((numSymbols)/gain)+1;
                            % Число бит, необходимое для одного измерения EVM
SNR = 60;                   % Отношение сигнал/шум в дБ

Инициализация системы

Мы можем получить символы с BPSK модуляцией, применив простое преобразование: 0 --> +1 и 1 --> -1. Если мы выполним такое же преобразование для последовательности чипов, то получим модулированный сигнал еще до преобразования битов в чипы. В этом случае появляется возможность использовать матричную математику и за счет этого получить эффективный код MATLAB. Спецификация ZigBee также определяет характеристики формирующего импульсы фильтра. Это должен быть фильтр типа приподнятого косинуса с коэффициентом сглаживания (roll-of factor) равным 1.

% Преобразование последовательности чипов
chipValues = 1 - 2*chipValues;

% Создание фильтра типа приподнятого косинуса с коэф. сглаживания равным 1
hTxFilter = comm.RaisedCosineTransmitFilter('RolloffFactor', 1, ...
  'OutputSamplesPerSymbol', nSamps, ...
  'FilterSpanInSymbols', filtSpan);
hRxFilter = comm.RaisedCosineReceiveFilter('RolloffFactor', 1, ...
  'InputSamplesPerSymbol', nSamps, ...
  'FilterSpanInSymbols', filtSpan, ...
  'DecimationFactor', nSamps);

Измерение величины векторной ошибки

Расширение Communications System Toolbox™ предоставляет системный объект COMM.EVM для расчета среднеквадратического, максимального и процентного значения EVM. Раздел 6.7.3 документа [ 1 ] определяет метод расчета EVM, при котором средняя ошибка по I и Q отсчетам нормируется к мощности символа. Для сигнала с BPSK мощности символом сигнального созвездия совпадают, поэтому мы можем использовать опцию нормировки 'Peak constellation power' (пиковая мощность сигнального созвездия). Доступные также и другие опции нормировки, которые могут использоваться в других стандартах систем связи. Это средняя мощность сигнального созвездия и средняя мощность эталонного сигнала.

hEVM = comm.EVM('Normalization', 'Peak constellation power')
hEVM = 

  System: comm.EVM 

  Properties:
               Normalization: 'Peak constellation power'
      PeakConstellationPower: 1                         
        MaximumEVMOutputPort: false                     
    XPercentileEVMOutputPort: false                     
 X 

Симуляция

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

1 ] требует, чтобы для расчета одного значения среднеквадратической EVM использовалось 1000 символов. Чтобы получить точные результаты, мы выполняем симуляцию 100 фреймов, каждый из которых содержит 1000 символов, и выбираем максимальное значение из 100 полученных измерений EVM. Можно заметить, что разработанный передатчик удовлетворяет требованиям, описанным в предыдущей секции Величина векторной ошибки:

% Задержки, вносимые фильтрами передатчика и приемника, одинаковы и равны
% половине длины фильтра. Общая задержка системы равняется их сумме, что
% равносильно длине одного фильтра.
refSigDelay = hTxFilter.FilterSpanInSymbols;

% Число символов в одном фрейме
simNumSymbols = numBits*gain;

% Начальное значение пиковой среднеквадратической EVM
peakRMSEVM = -inf;

% Создание объекта comm.DifferentialEncoder для дифференциального
% кодирования
hdiffenc = comm.DifferentialEncoder;

% Создание объекта comm.AWGNChannel и установка опции NoiseMethod
% в значение 'Signal to noise ratio (SNR)'
hChan = comm.AWGNChannel('NoiseMethod', 'Signal to noise ratio (SNR)',...
  'SNR', SNR);

% Цикл обработки пакетов
for p=1:numFrames
    % Создание случайно последовательности бит
    b = randi([0 M-1], numBits, 1);
    % Дифференциальное кодирование
    d = step(hdiffenc, b);
    % Модуляция
    x = 1-2*d;
    % Преобразование символов в чипы (расширение)
    c = reshape(chipValues*x', simNumSymbols, 1);
    % Формирование импульсов
    cUp = step(hTxFilter, c);
    % Расчет и настройка опции 'SignalPower' для объекта канала
    hChan.SignalPower = sum(cUp.^2)/length(cUp);
    % Добавление шума
    r = step(hChan, cUp);
    % Понижение частоты дискретизации сигнала. Учет задержек, вносимых
    % фильтрами.
    rd = step(hRxFilter, r);
    % Измерение с помощью системного объекта EVM
    rmsEVM = step(hEVM, ...
      complex(rd(refSigDelay+(1:numSymbols))), ...
      complex(c(1:numSymbols)));
    % Обновление пикового значения среднеквадратической EVM
    if (peakRMSEVM < rmsEVM)
        peakRMSEVM = rmsEVM;
    end
end

% Вывод результатов
fprintf(' Наихудшее значение RMS EVM (%%): %1.2f\n', peakRMSEVM)
 Наихудшее значение RMS EVM (%): 0.19

Комментарии

Здесь рассмотрено, как использовать объект COMM.EVM для тестирования передатчика ZigBee в соответствии с указаниями стандарта по расчету EVM. В данном примере использовалась грубая модель, учитывающая только аддитивный белый шум Гаусса, которая показала, что измеренное значение EVM меньше указанных в стандарте 35%.

Библиография

  1. IEEE Standard 802.15.4, Wireless Medium Access Control (MAC) and Physical Layer (PHY) Specifications for Low-Rate Wireless Personal Area Networks, 2003.

Теги

    30.04.2019

    Комментарии