Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
2
Добавлен:
15.01.2025
Размер:
2.94 Кб
Скачать
% Лабораторная работа: Моделирование систем связи MIMO
% Исследование помехоустойчивости для разных типов модуляции
% Очистка рабочего пространства
clc; clear; close all;

% Типы модуляции для исследования
modulations = [2, 4, 6]; % 2^2 (QAM-4), 2^4 (QAM-16), 2^6 (QAM-64)

% Создаем один график
figure('Position', [100, 100, 1200, 800]);
hold on;
grid on;
ax = gca;
ax.YScale = 'log';

% Цвета для разных типов модуляции
colors = {'m', 'b', 'r'};
markers = {'^', 's', 'o'};

% Диапазон Eb/N0
EbNoVec = 5:5:30;

% Цикл по типам модуляции
for currentModType = 1:length(modulations)
% Параметры MIMO системы
Ntx = 4; % передающие антенны
Nrx = 4; % приёмные антенны
Kch = 4;
Es = 1; % мощность БС
modOrd = modulations(currentModType); % количество бит на символ
hStr = RandStream('mt19937ar');

% Создание QAM-модулятора
hMod = comm.RectangularQAMModulator(...
'ModulationOrder', 2^modOrd, ...
'PhaseOffset', 0, 'BitInput', true, 'NormalizationMethod', 'Average power');

% Создание QAM-демодулятора
hDemod = comm.RectangularQAMDemodulator(...
'ModulationOrder', 2^modOrd, ...
'PhaseOffset', 0, 'BitOutput', true, 'NormalizationMethod', 'Average power');

hBERCalc = comm.ErrorRate('ComputationDelay', modOrd);

BER_final = zeros(length(EbNoVec), 3);

% Основной цикл моделирования
for idx = 1:length(EbNoVec)
reset(hBERCalc);
snrIndB = EbNoVec(idx) + 10*log10(modOrd);
snrLinear = 10^(0.1*snrIndB);
disp_noise = 1/snrLinear;

while (BER_final(idx, 3) < 10000) || (BER_final(idx, 2) < 1)
msg = randi([0 1], [Nrx*modOrd, 1]);
s = step(hMod, msg);
H = (randn(Nrx, Ntx) + 1i*randn(Nrx, Ntx))/sqrt(2);
y = H*s;
rxSig = awgn(y, snrIndB, 0, hStr);
G = H'*inv(H*H'+((Ntx)*disp_noise)*eye(Ntx));
UE = G*rxSig;
demod = step(hDemod, UE);
BER_final(idx, :) = step(hBERCalc, msg, demod);
end
end

% Построение точек на графике
semilogy(EbNoVec, BER_final(:, 1), [colors{currentModType}, '-', markers{currentModType}], 'linewidth', 1, 'DisplayName', ['QAM-', num2str(2^modOrd)]);
end

% Настройка графика
xlabel('Eb/No (dB)');
ylabel('Uncoded BER');
title('Помехоустойчивость MIMO для разных типов модуляции');
legend('show', 'Location', 'southwest');
xlim([EbNoVec(1)-0.01 EbNoVec(end)]);
ylim([1e-3 1]);
hold off;