Этот пример показывает пространственные схемы мультиплексирования, где поток данных подразделен на независимые подпотоки, один для каждой используемой антенны передачи. Как следствие эти схемы обеспечивают усиление мультиплексирования и не требуют явной ортогонализации по мере необходимости для пространственно-временного блочного кодирования.
Пространственное мультиплексирование требует мощных методов декодирования в получателе все же. Из многих, предложенных [1], этот пример подсвечивает две упорядоченных схемы обнаружения Последовательной интерференционной отмены (SIC). Эти схемы подобны исходной Bell Labs Многоуровневое Пространство-время (BLAST) методы согласно [2], [3].
Для экспозиционных преимуществ пример использует основное 2x2, система MIMO, использующая два, передает, и два получают антенны. Поскольку незакодированный QPSK модулировал систему, это использует плоское Релеевское замирание по независимой передаче - получают ссылки. В конце получателя мы принимаем совершенное знание канала без обратной связи к передатчику, т.е. разомкнутый цикл пространственная система мультиплексирования.
Пример показывает два нелинейных интерференционных метода отмены - Принуждение нуля (ZF) и Минимальную среднеквадратичную погрешность (MMSE) - с отменой символа и сравнивает их производительность с получателем оптимума Наибольшего правдоподобия (ML).
Мы запускаем путем определения некоторых общих параметров симуляции
N = 2; % Number of transmit antennas M = 2; % Number of receive antennas EbNoVec = 2:3:8; % Eb/No in dB modOrd = 2; % constellation size = 2^modOrd
и настроенный симуляция.
% Create a local random stream to be used by random number generators for % repeatability. stream = RandStream('mt19937ar'); % Create PSK modulator and demodulator System objects pskModulator = comm.PSKModulator(... 'ModulationOrder', 2^modOrd, ... 'PhaseOffset', 0, ... 'BitInput', true); pskDemodulator = comm.PSKDemodulator( ... 'ModulationOrder', 2^modOrd, ... 'PhaseOffset', 0, ... 'BitOutput', true); % Create error rate calculation System objects for 3 different receivers zfBERCalc = comm.ErrorRate; mmseBERCalc = comm.ErrorRate; mlBERCalc = comm.ErrorRate; % Get all bit and symbol combinations for ML receiver allBits = de2bi(0:2^(modOrd*N)-1, 'left-msb')'; allTxSig = reshape(pskModulator(allBits(:)), N, 2^(modOrd*N)); % Pre-allocate variables to store BER results for speed [BER_ZF, BER_MMSE, BER_ML] = deal(zeros(length(EbNoVec), 3));
Цикл симуляции ниже одновременно оценивает производительность BER трех схем получателя каждого значения Eb/No с помощью тех же данных и реализации канала. Малая дальность значений Eb/No используется в целях симуляции. Результаты для большей области значений, с помощью того же кода, представлены позже.
% Set up a figure for visualizing BER results fig = figure; grid on; hold on; ax = fig.CurrentAxes; ax.YScale = 'log'; xlim([EbNoVec(1)-0.01 EbNoVec(end)]); ylim([1e-3 1]); xlabel('Eb/No (dB)'); ylabel('BER'); fig.NumberTitle = 'off'; fig.Renderer = 'zbuffer'; fig.Name = 'Spatial Multiplexing'; title('2x2 Uncoded QPSK System'); set(fig,'DefaultLegendAutoUpdate','off'); % Loop over selected EbNo points for idx = 1:length(EbNoVec) % Reset error rate calculation System objects reset(zfBERCalc); reset(mmseBERCalc); reset(mlBERCalc); % Calculate SNR from EbNo for each independent transmission link snrIndB = EbNoVec(idx) + 10*log10(modOrd); snrLinear = 10^(0.1*snrIndB); while (BER_ZF(idx, 3) < 1e5) && ((BER_MMSE(idx, 2) < 100) || ... (BER_ZF(idx, 2) < 100) || (BER_ML(idx, 2) < 100)) % Create random bit vector to modulate msg = randi(stream, [0 1], [N*modOrd, 1]); % Modulate data txSig = pskModulator(msg); % Flat Rayleigh fading channel with independent links rayleighChan = (randn(stream, M, N) + 1i*randn(stream, M, N))/sqrt(2); % Add noise to faded data rxSig = awgn(rayleighChan*txSig, snrIndB, 0, stream); % ZF-SIC receiver r = rxSig; H = rayleighChan; % Assume perfect channel estimation % Initialization estZF = zeros(N*modOrd, 1); orderVec = 1:N; k = N+1; % Start ZF nulling loop for n = 1:N % Shrink H to remove the effect of the last decoded symbol H = H(:, [1:k-1,k+1:end]); % Shrink order vector correspondingly orderVec = orderVec(1, [1:k-1,k+1:end]); % Select the next symbol to be decoded G = (H'*H) \ eye(N-n+1); % Same as inv(H'*H), but faster [~, k] = min(diag(G)); symNum = orderVec(k); % Hard decode the selected symbol decBits = pskDemodulator(G(k,:) * H' * r); estZF(modOrd * (symNum-1) + (1:modOrd)) = decBits; % Subtract the effect of the last decoded symbol from r if n < N r = r - H(:, k) * pskModulator(decBits); end end % MMSE-SIC receiver r = rxSig; H = rayleighChan; % Initialization estMMSE = zeros(N*modOrd, 1); orderVec = 1:N; k = N+1; % Start MMSE nulling loop for n = 1:N H = H(:, [1:k-1,k+1:end]); orderVec = orderVec(1, [1:k-1,k+1:end]); % Order algorithm (matrix G calculation) is the only difference % with the ZF-SIC receiver G = (H'*H + ((N-n+1)/snrLinear)*eye(N-n+1)) \ eye(N-n+1); [~, k] = min(diag(G)); symNum = orderVec(k); decBits = pskDemodulator(G(k,:) * H' * r); estMMSE(modOrd * (symNum-1) + (1:modOrd)) = decBits; if n < N r = r - H(:, k) * pskModulator(decBits); end end % ML receiver r = rxSig; H = rayleighChan; [~, k] = min(sum(abs(repmat(r,[1,2^(modOrd*N)]) - H*allTxSig).^2)); estML = allBits(:,k); % Update BER BER_ZF( idx, :) = zfBERCalc(msg, estZF); BER_MMSE(idx, :) = mmseBERCalc(msg, estMMSE); BER_ML( idx, :) = mlBERCalc(msg, estML); end % Plot results semilogy(EbNoVec(1:idx), BER_ZF( 1:idx, 1), 'r*', ... EbNoVec(1:idx), BER_MMSE(1:idx, 1), 'bo', ... EbNoVec(1:idx), BER_ML( 1:idx, 1), 'gs'); legend('ZF-SIC', 'MMSE-SIC', 'ML'); drawnow; end % Draw the lines semilogy(EbNoVec, BER_ZF( :, 1), 'r-', ... EbNoVec, BER_MMSE(:, 1), 'b-', ... EbNoVec, BER_ML( :, 1), 'g-'); hold off;
Мы замечаем, что получатель ML является лучшим в производительности, сопровождаемой MMSE-SIC и получателями ZF-SIC, равно как и замечено в [4]. С точки зрения сложности получателя ML растет экспоненциально с количеством антенн передачи, в то время как ZF-SIC и MMSE-SIC являются линейными получателями, объединенными с последовательной интерференционной отменой. Оптимизированный ZF-SIC и алгоритмы MMSE-SIC для уменьшаемой сложности могут быть найдены в [5].
Результаты симуляции, сравнивающие эти три схемы большей области значений значений Eb/No, отображены затем. Эти кривые позволяют вам измерять порядок разнообразия, достигнутый от наклона кривой BER.
openfig('spatMuxResults.fig');
Некоторые области дальнейшего исследования должны были бы попробовать эти методы за большее число антенн, с и без оценки канала.
Джордж Тсуос, Эд., "системная технология MIMO для радиосвязей", нажатие CRC, Бока-Ратон, FL, 2006.
Г. Й. Фоскини, "Разделенная на уровни пространственно-временная архитектура для радиосвязи в исчезающей среде при использовании нескольких антенн", Белл Сис. Технология. Журналируйте, 1996, № 1, стр 41-59.
П. В. Вольнианский, Г. Й. Фоскини, Г. Д. Голден, Р. А. Валенсуэла, "V-BLAST: Архитектура для понимания очень высоких скоростей передачи данных по богатому беспроводному каналу рассеивания", 1998 Международных Симпозиумов URSI по Сигналам, Системам и Электронике, 29 сентября 2 октября 1998, стр 295-300.
X. Литий, Х. Ц. Хуан, А. Лозано, Г. Й. Фоскини, "Алгоритмы обнаружения Уменьшаемой сложности для систем с помощью многоэлементных массивов", Конференция IEEE® Global Telecommunications, 2000. Объем 2, 27 ноября 1 декабря 2000, стр 1072-76.
И. Шан и Кс.-Г. Ся, "На быстрых рекурсивных алгоритмах для V-BLAST с оптимальным упорядоченным обнаружением SIC", Сделка IEEE. Радиосвязи, издание 8, № 6, стр 2860-2865, июнь 2009.