Передайте закодированные данные Тростника-Solomon с помощью 8-PSK по каналу AWGN. Демодулируйте и декодируйте полученный сигнал и соберите ошибочные статистические данные. Постройте оценку частоты ошибок по битам.
Задайте параметры в качестве примера.
M = 8; % 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);
Установите область значений значения. Инициализируйте ошибочную матрицу статистики.
ebnoVec = (3:0.5:8)'; errorStats = zeros(length(ebnoVec),3);
Оцените частоту ошибок по битам для каждого значение. Запуски симуляции или до 100 ошибок или до с битами сталкиваются. Основная обработка цикла симуляции включает кодирование, модуляцию, демодуляцию и декодирование.
for i = 1:length(ebnoVec) awgnChannel.EbNo = ebnoVec(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
. Сгенерируйте оценку производительности 8-PSK, не кодируя использование berawgn
функция.
berCurveFit = berfit(ebnoVec,errorStats(:,1)); berNoCoding = berawgn(ebnoVec,'psk',8,'nondiff');
Отобразите на графике данные о BER, подгонку кривой BER и предполагаемую производительность без кодирования RS.
semilogy(ebnoVec,errorStats(:,1),'b*', ... ebnoVec,berCurveFit,'c-',ebnoVec,berNoCoding,'r') ylabel('BER') xlabel('Eb/No (dB)') legend('Data','Curve Fit','No Coding') grid
(7,5) код RS улучшается требуемый достигнуть a частота ошибок по битам, приблизительно, 1,4 дБ.