exponenta event banner

Двоичный порядок с серым кодированием

Серое кодирование - это метод, который схемы многоуровневой модуляции часто используют для минимизации частоты битовых ошибок. Он состоит из упорядочения символов модуляции таким образом, что двоичные представления соседних символов различаются только на один бит. В этом разделе показана система связи с серо-кодированной 8-арной модуляцией фазовой манипуляции (8-PSK) для сравнения характеристик частоты ошибок серого и естественного двоично-кодированного упорядочения битов.

Введение

Пример в этом разделе модулирует кадры данных с серым и натуральным двоичным кодированием с использованием метода 8-PSK. Кадры данных проходят через канал AWGN и демодулируются с использованием демодулятора 8-PSK. Вычислитель частоты ошибок Системные объекты измеряют частоту ошибок символов и битов.

В этой системе связи система модуляторов PSK возражает:

  • Примите двоичные входные значения, представляющие целые числа от 0 до M - 1. M - порядок модуляции и равен 8 для 8-PSK модуляции.

  • Отображение двоичных представлений в точки созвездия с использованием последовательности с серым и естественным двоичным кодированием.

  • Производить комплексные фазорные выходы единичной величины с равномерно разнесенными фазами от 0 до (M-1 )/M.

Эта таблица показывает взаимосвязь между двоичными представлениями с серым кодированием на входе и фазорами на выходе. Второй столбец таблицы является промежуточным представлением, которое объект System использует при вычислениях.

Вход модулятораПорядок с серым кодированиемВыход модулятора
0000exp(0)
0011exp(jδ/4)
0103exp(j3π/4)
0112exp(jδ/2) = exp(j2π/4)
1007exp(j7π/4)
1016exp(j3π/2) = exp(j6π/4)
1104exp() = exp(j4π/4)
1115exp(j5π/4)

В этой таблице сортируются первые два столбца из предыдущей таблицы в соответствии с выходными значениями. Эта сортировка делает более ясным, что между соседними символами имеется только 1 битовая разница. На следующем рисунке обратите внимание, что числа во втором столбце таблицы отображаются в порядке против часовой стрелки.

Выход модулятораВход модулятора
exp(0)000
exp(jδ/4)001
exp(jδ/2) = exp(j2π/4)011
exp(j3π/4)010
exp() = exp(j4π/4)110
exp(j5π/4)111
exp(j3π/2) = exp(j6π/4)101
exp(j7π/4)100

Сравнение частоты ошибок для порядка с серым и двоичным кодированием

Сравнение кодирования Грея с естественным двоичным кодированием с использованием соответствующим образом сконфигурированных модулятора PSK и системных объектов демодулятора PSK. Это моделирование выполняет итерацию в диапазоне от битовой энергии до спектральной плотности мощности шума, Eb/N0, значений и выполняется до заданного максимального количества битовых ошибок (maxNumErrs) или максимальное количество битов (maxNumBits) достигается для кодирования Грея для каждой точки Eb/N0.

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

Инициализируйте системные переменные и создайте системные объекты для операций модуляции, демодуляции, канала AWGN и частоты ошибок. С момента comm.AWGNChannel object™ системы и randi функция использует поток случайных чисел по умолчанию, задает начальное число генератора случайных чисел для обеспечения воспроизводимых результатов. Состояние генератора случайных чисел сохраняется перед установкой начального числа случайного потока и восстанавливается в конце примера.

M = 8; % Modulation order for 8-PSK
SamplesPerFrame = 10000;
maxNumErrs=100;
maxNumBits=1e8;

prevState = rng;
rng(529558);

Создайте модулятор PSK, и Система демодулятора возражает, чтобы нанести на карту данные о двоичном входе к 8-PSK Серо-и закодированным набором из двух предметов созвездиям.

pskmod = comm.PSKModulator('ModulationOrder',M,'SymbolMapping','Gray', ...
    'PhaseOffset',0,'BitInput',true);
pskdemod = comm.PSKDemodulator('ModulationOrder',M,'SymbolMapping','Gray', ...
    'PhaseOffset',0,'BitOutput',true,'OutputDataType','uint8', ...
    'DecisionMethod','Hard decision');
pskmodb = comm.PSKModulator('ModulationOrder',M,'SymbolMapping','Binary', ...
    'PhaseOffset',0,'BitInput',true);
pskdemodb = comm.PSKDemodulator('ModulationOrder',M,'SymbolMapping','Binary', ...
    'PhaseOffset',0,'BitOutput',true,'OutputDataType','uint8', ...
    'DecisionMethod','Hard decision');

Создание системного объекта канала AWGN для добавления шума к модулированному сигналу. Способ шума сконфигурирован для Eb/N0 для цикла обработки. Модулятор PSK генерирует символы с мощностью 1 Вт, поэтому свойство мощности сигнала объекта канала AWGN также устанавливается равным 1 Вт.

awgnchan = comm.AWGNChannel('NoiseMethod','Signal to noise ratio (Eb/No)', ...
    'BitsPerSymbol',log2(M),'SignalPower',1);

Создайте вычислитель частоты ошибок символов и частоты ошибок битов Системные объекты для сравнения демодулированных целочисленных и битовых данных с исходными исходными данными. Это сравнение дает статистику ошибок символов и битовых ошибок. Вывод системного объекта калькулятора частоты ошибок представляет собой трехэлементный вектор, содержащий вычисленную частоту ошибок, количество обнаруженных ошибок и количество обработанных данных. Для определения времени остановки моделирования используется трехэлементный вектор.

symerror = comm.ErrorRate;
biterror = comm.ErrorRate;
biterrorb = comm.ErrorRate;

Цикл обработки кадров

Сконфигурируйте контур обработки кадров, в котором данные кодируются, модулируются и демодулируются с использованием 8-PSK модуляции. Контур моделирует систему связи для Eb/N0 значений в диапазоне от 0 дБ до 12 дБ с шагом 2 дБ.

Для каждого значения Eb/N0 моделирование останавливается, если максимальное количество ошибок (maxNumErrs) или максимальное количество битов (maxNumBits), обрабатываемый вычислителем частоты битовых ошибок, достигается системный объект для битов, кодированных серым цветом.

EbNoVec = 0:2:12; % Eb/No values to simulate
SERVec = zeros(size(EbNoVec)); % Initialize SER history
BERVec = zeros(size(EbNoVec)); % Initialize BER history for Gray ordered
BERVecb = zeros(size(EbNoVec)); % Initialize BER history for binary ordered
for p = 1:length(EbNoVec)
  % Reset System objects
  reset(symerror);
  reset(biterror);
  reset(biterrorb);
  awgnchan.EbNo = EbNoVec(p);
  % Reset SER / BER for the current Eb/No value
  SER = zeros(3,1);
  BER = zeros(3,1);
  while (BER(2)<maxNumErrs) && (BER(3)<maxNumBits)
    % Generate random data
    txSym = randi([0 M-1],SamplesPerFrame,1,'uint8');  
    txBits = reshape(de2bi(txSym,log2(M),'left-msb')',[],1); % Convert symbols to bits
    
    tx = pskmod(txBits);
    txb = pskmodb(txBits);
    rx = awgnchan(tx);
    rxb = awgnchan(txb);
    rxBits = pskdemod(rx);
    rxBitsb = pskdemodb(rxb);
    rxSym = bi2de(reshape(rxBits,log2(M),[])','left-msb');
    
    SER = symerror(txSym,rxSym); % Symbol error rate for Gray-coded data 
    BER = biterror(txBits,rxBits); % Bit error rate for Gray-coded data
    BERb = biterrorb(txBits,rxBitsb); % Bit error rate for natural binary-coded data
  end
  % Save history of SER and BER values
  SERVec(p) = SER(1);
  BERVec(p) = BER(1);
  BERVecb(p) = BERb(1);
end

Восстановите поток по умолчанию.

rng(prevState)

Анализ результатов

Проанализируйте данные из примера и сравните теоретическую производительность с производительностью моделирования. Теоретическая вероятность ошибки символа MPSK равна

PE (M) = erfc (ESN0sin (øM))

где erfc - комплементарная функция ошибки, ES/N0 - отношение энергии в символе к спектральной плотности мощности шума, и M - количество символов.

Чтобы определить вероятность битовой ошибки, преобразуйте вероятность символьной ошибки PE в ее эквивалент битовой ошибки. Нет общей формулы для преобразования символов в битовые ошибки. Тем не менее, верхний и нижний пределы легко установить. Фактическая вероятность битовых ошибок, Pb, может быть ограничена

PE (M) log2M≤Pb≤M/2M-1PE (M)

Нижний предел соответствует случаю, когда символы подверглись кодированию Грея. Верхний предел соответствует случаю чистого двоичного кодирования.

Рассчитайте теоретические вероятности ошибок с помощью berawgn функция. Постройте график моделируемой частоты ошибок символов для кодирования Грея, частоты битовых ошибок для кодирования Грея и естественного двоичного кодирования, а также теоретических вероятностей ошибок символов и битовых ошибок для кодирования Грея.

[theorBER,theorSER] = berawgn(EbNoVec,'psk',M,'nondiff');

figure;
semilogy(EbNoVec,SERVec,'o',EbNoVec,BERVecb,'x',EbNoVec,BERVec,'*', ...
         EbNoVec,theorSER,'-',EbNoVec,theorBER,'-');
legend('Symbol error rate','Bit error rate (Binary)','Bit error rate (Gray)', ...
          'Theoretical Symbol error rate','Theoretical Bit error rate', ...
          'Location','SouthWest');
xlabel('Eb/No (dB)'); ylabel('Error Probability');
title('Symbol and Bit Error Probability');
grid on;

Figure contains an axes. The axes with title Symbol and Bit Error Probability contains 5 objects of type line. These objects represent Symbol error rate, Bit error rate (Binary), Bit error rate (Gray), Theoretical Symbol error rate, Theoretical Bit error rate.