Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
4
Добавлен:
15.01.2025
Размер:
3 Кб
Скачать
% Лабораторная работа: Моделирование систем связи 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;