Передайте закодированные данные Тростника-Solomon с помощью 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) энкодер Тростника-Solomon и пара декодера, которая принимает битные входные параметры.
rsEncoder = comm.RSEncoder('BitInput',true,'CodewordLength',N,'MessageLength',K); rsDecoder = comm.RSDecoder('BitInput',true,'CodewordLength',N,'MessageLength',K);
Установите область значений значения и счет на усиление кодирования RS. Инициализируйте матрицу статистики ошибок.
ebnoVec = (3:0.5:8)';
ebnoVecCodingGain = ebnoVec + 10*log10(K/N); % Account for RS coding gain
errorStats = zeros(length(ebnoVec),3);
Оцените частоту ошибок по битам для каждого значение. Запуски симуляции или до 100 ошибок или до с битами сталкиваются. Основная обработка цикла симуляции включает кодирование, модуляцию, демодуляцию и декодирование.
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 улучшается требуемый достигнуть a частота ошибок по битам приблизительно на 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