Серое кодирование является методом, который многоуровневые схемы модуляции часто используют, чтобы минимизировать вероятность битовой ошибки. Он состоит из упорядоченного расположения символов модуляции так, чтобы двоичные представления смежных символов отличались только на один бит. В этом разделе показана коммуникационная система с Серым кодом 8-арной фазы сдвига манипуляции (8-PSK) модуляцией для сравнения эффективности частоты ошибок Грея и природного двоичного кодированного битового упорядоченного расположения.
Пример в этом разделе модулирует серые и природные двухкомпонентные системы координат данных с использованием метода 8-PSK. Системы координат данных проходят через канал AWGN и демодулируются с помощью 8-PSK демодулятора. Калькулятор частоты ошибок Системные объекты измеряют вероятность битовой ошибки и символ.
В этой коммуникационной системе PSK Modulator System возражает:
Примите двоичные входы, которые представляют целые числа от 0 до M - 1. M является порядком модуляции и равен 8 для 8-PSK модуляции.
Сопоставьте двоичные представления с точками созвездия с помощью Грея-кодированного и природного двоичного-кодированного упорядоченного расположения.
Создайте комплексный фазор с единичной величиной выходов с равномерно расположенными фазами между 0 и 2 π (M - 1 )/ M.
Эта таблица указывает отношение между закодированными Серым двоичными представлениями во входе и фазорами в выходе. Второй столбец таблицы является промежуточным представлением, которое использует Системный объект в своих расчетах.
Вход модулятора | Серокодированные Упорядоченные расположения | Выход модулятора |
---|---|---|
000 | 0 | exp (0) |
001 | 1 | exp (<reservedrangesplaceholder0>) |
010 | 3 | exp (<reservedrangesplaceholder0>) |
011 | 2 | exp (<reservedrangesplaceholder1>) = exp (<reservedrangesplaceholder0>) |
100 | 7 | exp (<reservedrangesplaceholder0>) |
101 | 6 | exp (<reservedrangesplaceholder1>) = exp (<reservedrangesplaceholder0>) |
110 | 4 | exp (<reservedrangesplaceholder1>) = exp (<reservedrangesplaceholder0>) |
111 | 5 | exp (<reservedrangesplaceholder0>) |
Эта таблица сортирует первые два столбца из предыдущей таблицы в соответствии с выходом значениями. Эта сортировка делает более ясным, что существует только 1-битовое различие между соседними символами. На следующем рисунке обратите внимание, что числа во втором столбце таблицы отображаются в порядке против часовой стрелки.
Выход модулятора | Вход модулятора |
---|---|
exp (0) | 000 |
exp (jπ/4) | 001 |
exp (jπ/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. Эта симуляция итерация в области значений битовой энергии к спектральной плотности степени шума, , значения и запуски до заданного максимального количества битовых ошибок (maxNumErrs
) или максимальное количество бит (maxNumBits
) достигается для серого кодирования для каждого точка.
Инициализация
Инициализируйте системные переменные и создайте системные объекты для операций модуляции, демодуляции, канала 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, чтобы добавить шум к модулированному сигналу. Метод шума сконфигурирован на для цикла обработки. Модулятор 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 модуляции. Цикл моделирует коммуникационную систему для значения в области значений от 0 дБ до 12 дБ в шагах 2 дБ.
Для каждого значение, симуляция останавливается, когда либо максимальное количество ошибок (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
где erfc
- дополнительная функция ошибки, - отношение энергии в спектральной плотности символа к степени шума, и 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;