Сконфигурируйте Eb/No для Каналов AWGN с Кодированием

В этом примере показано, как установить энергию, подведенную к долоту на шумовое отношение плотности (Eb/No) для линий связи, использующих кодирование канала.

Задайте кодовую комбинацию и длину сообщения для кода Рида-Соломона. Задайте порядок модуляции.

N = 15;       % R-S codeword length in symbols
K = 9;        % R-S message length in symbols
M = 16;       % Modulation order

Создайте (15,9) энкодер Тростника-Solomon и модулятор с 16 PSK. Задайте объекты так, чтобы они приняли битные входные параметры.

rsEncoder = comm.RSEncoder('CodewordLength',N,'MessageLength',K, ...
    'BitInput',true);
pskModulator = comm.PSKModulator('ModulationOrder',M,'BitInput',true);

Создайте соответствующий декодер кода Рида-Соломона и объекты демодулятора с 16 PSK.

rsDecoder = comm.RSDecoder('CodewordLength',N,'MessageLength',K, ...
    'BitInput',true);
pskDemodulator = comm.PSKDemodulator('ModulationOrder',M,'BitOutput',true);

Вычислите уровень кода Рида-Соломона на основе отношения символов сообщения к длине кодовой комбинации. Определите биты на символ для модулятора PSK.

codeRate = K/N;
bitsPerSymbol = log2(M);

Задайте незакодированный Eb/No в дБ. Преобразуйте незакодированный Eb/No в закодированный Eb/No соответствия использование скорости кода.

UncodedEbNo = 6;
CodedEbNo = UncodedEbNo + 10*log10(codeRate);

Создайте канал AWGN, учитывающий количество битов на символ. Установите EbNo свойство channel к закодированному Eb/No.

channel = comm.AWGNChannel('BitsPerSymbol',bitsPerSymbol);
channel.EbNo = CodedEbNo;

Определите общий номер ошибок и битов для симуляции. Для точности должна запуститься симуляция до достаточного числа битовых ошибок столкнуты. Количество общих битов используется, чтобы гарантировать, что симуляция не запускается слишком долго.

totalErrors = 100;
totalBits = 1e6;

Создайте Систему калькулятора коэффициента ошибок object™ и инициализируйте вектор коэффициента ошибок.

errorRate = comm.ErrorRate;
errorVec = zeros(3,1);

Запустите симуляцию, чтобы определить BER.

while errorVec(2) < totalErrors && errorVec(3) < totalBits
    % Generate random bits
    dataIn = randi([0,1],360,1);
    % Use the RS (15,9) encoder to add error correction capability
    dataEnc = rsEncoder(dataIn);
    % Apply 16-PSK modulation
    txSig = pskModulator(dataIn);
    % Pass the modulated data through the AWGN channel
    rxSig = channel(txSig);
    % Demodulate the received signal
    demodData = pskDemodulator(rxSig);
    % Decode the demodulated data with the RS (15,9) decoder
    dataOut = rsDecoder(demodData);
    % Collect error statistics
    errorVec = errorRate(dataIn,demodData);
end

Отобразите результирующую частоту ошибок по битам.

ber = errorVec(1)
ber = 0.0935