Передача кодированных данных Рида-Соломона с использованием QPSK по каналу AWGN. Демодулировать и декодировать принятый сигнал и собирать статистику ошибок. Вычислите теоретическую частоту битовых ошибок (BER) для кодированных и некодированных данных. Постройте график результатов BER для сравнения производительности.
Определите параметры примера.
rng(1993); % Seed random number generator for repeatable results M = 4; % Modulation order bps = log2(M); % Bits per symbol N = 7; % RS codeword length K = 5; % RS message length
Создание модулятора, демодулятора, канала AWGN и объектов частоты ошибок.
pskModulator = comm.PSKModulator('ModulationOrder',M,'BitInput',true); pskDemodulator = comm.PSKDemodulator('ModulationOrder',M,'BitOutput',true); awgnChannel = comm.AWGNChannel('BitsPerSymbol',bps); errorRate = comm.ErrorRate;
Создайте (7,5) пару кодера Рида-Соломона и декодера, которая принимает битовые входы.
rsEncoder = comm.RSEncoder('BitInput',true,'CodewordLength',N,'MessageLength',K); rsDecoder = comm.RSDecoder('BitInput',true,'CodewordLength',N,'MessageLength',K);
Задайте диапазон значений Eb/N0 и учет усиления кодирования RS. Инициализируйте матрицу статистики ошибок.
ebnoVec = (3:0.5:8)';
ebnoVecCodingGain = ebnoVec + 10*log10(K/N); % Account for RS coding gain
errorStats = zeros(length(ebnoVec),3);Оцените частоту битовых ошибок для каждого значения Eb/N0. Моделирование выполняется до тех пор, пока не будет обнаружено 100 ошибок или 107 битов. Основная обработка цикла моделирования включает в себя кодирование, модуляцию, демодуляцию и декодирование.
for i = 1:length(ebnoVec) awgnChannel.EbNo = ebnoVecCodingGain(i); reset(errorRate) while errorStats(i,2) < 100 && errorStats(i,3) < 1e7 data = randi([0 1],1500,1); % Generate binary data encData = rsEncoder(data); % RS encode modData = pskModulator(encData); % Modulate rxSig = awgnChannel(modData); % Pass signal through AWGN rxData = pskDemodulator(rxSig); % Demodulate decData = rsDecoder(rxData); % RS decode errorStats(i,:) = errorRate(data,decData); % Collect error statistics end end
Подгонка кривой к данным BER с помощью berfit. Создание оценки производительности QPSK с кодированием и без него с использованием bercoding и berawgn функции.
berCurveFit = berfit(ebnoVecCodingGain,errorStats(:,1)); berwCoding = bercoding(ebnoVec,'RS','hard',N,K,'psk',M,'nondiff'); berNoCoding = berawgn(ebnoVec,'psk',M,'nondiff');
Постройте график кодированных данных BER RS, подгонки кривой данных BER, теоретической производительности с кодированием RS и теоретической производительности без кодирования RS. (7,5) Код RS улучшает , необходимую для достижения частоты ошибок 10-2 бит, приблизительно на 1,2 дБ.
semilogy(ebnoVecCodingGain,errorStats(:,1),'b*', ... ebnoVecCodingGain,berCurveFit,'c-',ebnoVecCodingGain,berwCoding,'r',ebnoVec,berNoCoding) ylabel('BER') xlabel('Eb/No (dB)') legend('RS coded BER','Curve Fit','Theory with coding','Theory no coding') grid
