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