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