Сконфигурируйте 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) энкодер Рида-Соломона и модулятор 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;

Создайте калькулятор частоты ошибок System 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