Добавил:
salahtinov.ilua2010.ru@gmail.com Реклама разрешена - рекламирую. Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Лаб. 4

.docx
Скачиваний:
5
Добавлен:
09.08.2022
Размер:
112.53 Кб
Скачать

Министерство Цифрового Развития, Связи и Массовых Коммуникаций Российской Федерации Федеральное Государственное Бюджетное Образовательное Учреждение Высшего Образования Ордена Трудового Красного знамени «Московский технический университет связи и информатики»

Кафедра Информационная Безопасность

Лабораторный практикум №5

Снижение вычислительной сложности алгоритмов демодуляции

Москва, 2021

Цель работы: получить навыки работы с программой MATLAB, ознакомиться с различными способами снижения вычислительной сложности алгоритмов.

Код программы:

clc;

clear;

SNR=1:2:50;

Modulator = comm.PSKModulator('ModulationOrder', 4,'BitInput', true, 'PhaseOffset', 0);

Demodulator = comm.PSKDemodulator('ModulationOrder', 4,'BitOutput', true, 'PhaseOffset', 0);

res(2, Modulator, Demodulator, SNR)

function result = res(bits, Modulator, Demodulator, SNR)

N = 4;

M = 4;

rang = min(N, M);

SNR_linear=10.^(SNR/10);

noiseVar = 1./SNR_linear;

allBits = de2bi(0:2^(bits* N)-1, 'left-msb')';

allTrans = reshape(step(Modulator, allBits(:)), N, 2^(bits* N));

result_zf=zeros(1, length(SNR));

result_mmse=zeros(1, length(SNR));

result_ml=zeros(1, length(SNR));

result1=zeros(1,20);

result2=zeros(1,20);

result3=zeros(1,20);

n = 1;

for n=1:length(SNR)

disp(n);

nn = 1;

for nn=1:1000

numErr_zf=0;

numErr_mmse=0;

numErr_ml=0;

numBits_zf=0;

numBits_mmse=0;

numBits_ml=0;

while numErr_zf<10 && numBits_zf<1e5

msg =randi([0 1],[N * bits, 1]);

symbol_msg = step(Modulator, msg);

H = (randn(M, N)+1i* randn(M, N))/sqrt(2);

y_ZF = awgn(H* symbol_msg, SNR(n),'measured');

H_decorr_ZF = pinv(H);

demodulate_msg_ZF = step(Demodulator, H_decorr_ZF* y_ZF);

[count1 probability1] = biterr(msg, demodulate_msg_ZF);

numErr_zf = numErr_zf+count1;

numBits_zf = numBits_zf+(N* bits);

end

while numErr_mmse<10 && numBits_mmse<1e5

msg =randi([0 1],[N * bits, 1]);

symbol_msg = step(Modulator, msg);

H = (randn(M, N)+1i* randn(M, N))/sqrt(2);

y_MMSE=awgn(H* symbol_msg, SNR(n),'measured');

H_mmse = (H'*H + noiseVar(n)*eye(N)) \ H';

demodulate_msg_mmse = step(Demodulator, H_mmse* y_MMSE);

[count2 probability2] = biterr(msg, demodulate_msg_mmse);

numErr_mmse = numErr_mmse+count2;

numBits_mmse = numBits_mmse+(N* bits);

end

while numErr_ml<10 && numBits_ml<1e5

msg =randi([0 1],[N * bits, 1]);

symbol_msg = step(Modulator, msg);

H = (randn(M, N)+1i* randn(M, N))/sqrt(2);

y = awgn(H* symbol_msg, SNR(n),'measured');

[~, k] = min(sum(abs(repmat(y,[1, 2 ^ (bits * N)]) - H* allTrans).^2));

estML = allBits(:, k);

[count3 probability3] = biterr(msg, estML);

numErr_ml = numErr_ml+count3;

numBits_ml = numBits_ml+(N* bits);

end

result1(nn)=numErr_zf/numBits_zf;

result2(nn)=numErr_mmse/numBits_mmse;

result3(nn)=numErr_ml/numBits_ml;

nn = nn + 1;

end

result_zf(n) = sum(result1)/20;

result_mmse(n) = sum(result2)/20;

result_ml(n) = sum(result3)/20;

n = n + 1;

end

semilogy(SNR, result_zf)

hold on

semilogy(SNR, result_mmse)

semilogy(SNR, result_ml)

grid on

xlabel('SNR, dB');

ylabel('BER');

end

Рисунок 1. График зависимости BER от ОСШ

Вывод: наиболее помехоустойчивым методом демодуляции является ML, однако он проигрывает алгоритмам ZF и MMSE по вычислительной сложности. Наиболее оптимальным вариантом является использование метода MMSE (МСКО) – при равной ZF вычислительной сложности, он выигрывает по помехоустойчивости.

Соседние файлы в предмете Моделирование информационных систем