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

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

Введение

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

В этой системе связи, Системных объектах Модулятора PSK:

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

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

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

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

Вход модулятораСеро-закодированное упорядоченное расположениеМодулятор Выход
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(/4)001
exp(/2) = exp(j 2π/4)011
exp(j 3π/4)010
exp() = exp(j 4π/4)110
exp(j 5π/4)111
exp(j 3π/2) = exp(j 6π/4)101
exp(j 7π/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) обработанный Системным объектом калькулятора частоты ошибок по битам достигнут закодированные биты Грэя.

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;