Серокодированное двоичное упорядоченное расположение

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

Введение

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

В этой коммуникационной системе PSK Modulator System возражает:

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

  • Сопоставьте двоичные представления с точками созвездия с помощью Грея-кодированного и природного двоичного-кодированного упорядоченного расположения.

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

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

Вход модулятораСерокодированные Упорядоченные расположенияВыход модулятора
0000exp(0)
0011exp(<reservedrangesplaceholder0>)
0103exp(<reservedrangesplaceholder0>)
0112exp(<reservedrangesplaceholder1>) = exp(<reservedrangesplaceholder0>)
1007exp(<reservedrangesplaceholder0>)
1016exp(<reservedrangesplaceholder1>) = exp(<reservedrangesplaceholder0>)
1104exp(<reservedrangesplaceholder1>) = exp(<reservedrangesplaceholder0>)
1115exp(<reservedrangesplaceholder0>)

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

Выход модулятораВход модулятора
exp(0)000
exp(/4)001
exp(/2) = exp(j 2 <reservedrangesplaceholder0>/4)011
exp(j 3 <reservedrangesplaceholder0>/4)010
exp(<reservedrangesplaceholder1>) = exp(j 4 <reservedrangesplaceholder0>/4)110
exp(j 5 <reservedrangesplaceholder0>/4)111
exp(j 3 <reservedrangesplaceholder1>/2) = exp(j 6 <reservedrangesplaceholder0>/4)101
exp(j 7 <reservedrangesplaceholder0>/4)100

Сравнение частоты ошибок для серых и двоичных Упорядоченных расположений

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

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

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

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) обрабатывается калькулятором вероятности битовой ошибки Системный объект достигается для кодированных бит Gray.

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)log2MPbM/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.