Этот пример показывает, как установить отношение энергии битов к плотности шума (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;
Создайте системный 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