Этот пример показывает системы Нескольких входов нескольких выводов (MIMO), которые используют несколько антенн в концах передатчика и получателя системы радиосвязи. Системы MIMO все больше принимаются в системах связи для потенциальных усилений в способности, которую они понимают при использовании нескольких антенн. Несколько антенн используют пространственную размерность в дополнение ко времени и единицам частоты, не изменяя требования пропускной способности системы.
Для типичной линии связи этот пример фокусируется на разнообразии передачи вместо традиционного, получают разнообразие. Используя плоское исчезновение канал Рейли, это иллюстрирует концепцию Ортогонального Пространственно-временного Блочного кодирования, которое трудоспособно, когда несколько антенн передатчика используются. Это принято здесь, что канал подвергается независимому исчезновению между передачей нескольких - получают пары антенны.
Для выбранной системы это также обеспечивает меру ухудшения производительности, когда канал недостаточно хорошо оценивается в получателе, по сравнению со случаем совершенного знания канала в получателе.
Используя разнообразие прием является известным методом, чтобы смягчить последствия исчезновения по линии связи. Однако это было в основном понижено к концу получателя. В [1], Аламоути предлагает схему разнообразия передачи, которая предлагает подобные усиления разнообразия, с помощью нескольких антенн в передатчике. Это было задумано, чтобы быть более практичным как, например, будет только требоваться несколько антенн в базовой станции по сравнению с несколькими антеннами для каждого мобильного телефона в системе сотовой связи.
Этот раздел подсвечивает, что это сравнение передачи по сравнению с получает разнообразие путем симуляции когерентной модуляции бинарного манипулирования сдвига фазы (BPSK) по плоскому исчезновению каналы Рейли. Для разнообразия передачи мы используем две антенны передачи, и каждый получает антенну (2x1 письменным образом), в то время как для получают разнообразие, мы используем одну антенну передачи, и два получают антенны (1x2 письменным образом).
Симуляция покрывает комплексную систему, показывающую кодируемое и/или переданное сообщение, модель канала, и прием и демодуляцию полученного сигнала. Это также обеспечивает ссылку без разнообразия (одна передача - получают случай антенны), и теоретическая производительность ссылки разнообразия второго порядка для сравнения. Это принято здесь, что канал известен отлично в получателе для всех систем. Мы запускаем симуляцию в области значений точек Eb/No, чтобы сгенерировать результаты BER, которые позволяют нам сравнивать различные системы.
Мы запускаем путем определения некоторых общих параметров симуляции
frmLen = 100; % frame length numPackets = 1000; % number of packets EbNo = 0:2:20; % Eb/No varying to 20 dB N = 2; % maximum number of Tx antennas M = 2; % maximum number of Rx antennas
и настроенный симуляция.
% Create comm.BPSKModulator and comm.BPSKDemodulator System objects(TM) P = 2; % modulation order bpskMod = comm.BPSKModulator; bpskDemod = comm.BPSKDemodulator('OutputDataType','double'); % Create comm.OSTBCEncoder and comm.OSTBCCombiner System objects ostbcEnc = comm.OSTBCEncoder; ostbcComb = comm.OSTBCCombiner; % Create two comm.AWGNChannel System objects for one and two receive % antennas respectively. Set the NoiseMethod property of the channel to % 'Signal to noise ratio (Eb/No)' to specify the noise level using the % energy per bit to noise power spectral density ratio (Eb/No). The output % of the BPSK modulator generates unit power signals; set the SignalPower % property to 1 Watt. awgn1Rx = comm.AWGNChannel(... 'NoiseMethod', 'Signal to noise ratio (Eb/No)', ... 'SignalPower', 1); awgn2Rx = clone(awgn1Rx); % Create comm.ErrorRate calculator System objects to evaluate BER. errorCalc1 = comm.ErrorRate; errorCalc2 = comm.ErrorRate; errorCalc3 = comm.ErrorRate; % Since the comm.AWGNChannel System objects as well as the RANDI function % use the default random stream, the following commands are executed so % that the results will be repeatable, i.e., same results will be obtained % for every run of the example. The default stream will be restored at the % end of the example. s = rng(55408); % Pre-allocate variables for speed H = zeros(frmLen, N, M); ber_noDiver = zeros(3,length(EbNo)); ber_Alamouti = zeros(3,length(EbNo)); ber_MaxRatio = zeros(3,length(EbNo)); ber_thy2 = zeros(1,length(EbNo));
% Set up a figure for visualizing BER results fig = figure; grid on; ax = fig.CurrentAxes; hold(ax,'on'); ax.YScale = 'log'; xlim(ax,[EbNo(1), EbNo(end)]); ylim(ax,[1e-4 1]); xlabel(ax,'Eb/No (dB)'); ylabel(ax,'BER'); fig.NumberTitle = 'off'; fig.Renderer = 'zbuffer'; fig.Name = 'Transmit vs. Receive Diversity'; title(ax,'Transmit vs. Receive Diversity'); set(fig, 'DefaultLegendAutoUpdate', 'off'); fig.Position = figposition([15 50 25 30]); % Loop over several EbNo points for idx = 1:length(EbNo) reset(errorCalc1); reset(errorCalc2); reset(errorCalc3); % Set the EbNo property of the AWGNChannel System objects awgn1Rx.EbNo = EbNo(idx); awgn2Rx.EbNo = EbNo(idx); % Loop over the number of packets for packetIdx = 1:numPackets % Generate data vector per frame data = randi([0 P-1], frmLen, 1); % Modulate data modData = bpskMod(data); % Alamouti Space-Time Block Encoder encData = ostbcEnc(modData); % Create the Rayleigh distributed channel response matrix % for two transmit and two receive antennas H(1:N:end, :, :) = (randn(frmLen/2, N, M) + ... 1i*randn(frmLen/2, N, M))/sqrt(2); % assume held constant for 2 symbol periods H(2:N:end, :, :) = H(1:N:end, :, :); % Extract part of H to represent the 1x1, 2x1 and 1x2 channels H11 = H(:,1,1); H21 = H(:,:,1)/sqrt(2); H12 = squeeze(H(:,1,:)); % Pass through the channels chanOut11 = H11 .* modData; chanOut21 = sum(H21.* encData, 2); chanOut12 = H12 .* repmat(modData, 1, 2); % Add AWGN rxSig11 = awgn1Rx(chanOut11); rxSig21 = awgn1Rx(chanOut21); rxSig12 = awgn2Rx(chanOut12); % Alamouti Space-Time Block Combiner decData = ostbcComb(rxSig21, H21); % ML Detector (minimum Euclidean distance) demod11 = bpskDemod(rxSig11.*conj(H11)); demod21 = bpskDemod(decData); demod12 = bpskDemod(sum(rxSig12.*conj(H12), 2)); % Calculate and update BER for current EbNo value % for uncoded 1x1 system ber_noDiver(:,idx) = errorCalc1(data, demod11); % for Alamouti coded 2x1 system ber_Alamouti(:,idx) = errorCalc2(data, demod21); % for Maximal-ratio combined 1x2 system ber_MaxRatio(:,idx) = errorCalc3(data, demod12); end % end of FOR loop for numPackets % Calculate theoretical second-order diversity BER for current EbNo ber_thy2(idx) = berfading(EbNo(idx), 'psk', 2, 2); % Plot results semilogy(ax,EbNo(1:idx), ber_noDiver(1,1:idx), 'r*', ... EbNo(1:idx), ber_Alamouti(1,1:idx), 'go', ... EbNo(1:idx), ber_MaxRatio(1,1:idx), 'bs', ... EbNo(1:idx), ber_thy2(1:idx), 'm'); legend(ax,'No Diversity (1Tx, 1Rx)', 'Alamouti (2Tx, 1Rx)',... 'Maximal-Ratio Combining (1Tx, 2Rx)', ... 'Theoretical 2nd-Order Diversity'); drawnow; end % end of for loop for EbNo % Perform curve fitting and replot the results fitBER11 = berfit(EbNo, ber_noDiver(1,:)); fitBER21 = berfit(EbNo, ber_Alamouti(1,:)); fitBER12 = berfit(EbNo, ber_MaxRatio(1,:)); semilogy(ax,EbNo, fitBER11, 'r', EbNo, fitBER21, 'g', EbNo, fitBER12, 'b'); hold(ax,'off'); % Restore default stream rng(s);
Система разнообразия передачи имеет сложность вычисления, очень похожую на ту из получить системы разнообразия.
Получившиеся результаты симуляции показывают, что с помощью двух антенн передачи и каждый получает антенну, обеспечивает тот же порядок разнообразия, как система максимального отношения объединено (MRC) одной антенны передачи и два получает антенны.
Также заметьте, что разнообразие передачи имеет недостаток на 3 дБ, когда по сравнению с MRC получают разнообразие. Это вызвано тем, что мы смоделировали общую переданную степень быть тем же самым в обоих случаях. Если мы калибруем переданную степень, таким образом, что полученная степень для этих двух случаев является тем же самым, то производительность была бы идентична. Теоретическая производительность ссылки разнообразия второго порядка совпадает с системой разнообразия передачи, когда это нормирует общую степень через все ответвления разнообразия.
Сопроводительные функциональные скрипты, mrc1m.m и ostbc2m.m помогают дальнейшему исследованию для заинтересованных пользователей.
Основываясь на теории ортогональных проектов, Tarokh и др. [2] схема разнообразия передачи обобщенного Аламоути к произвольному числу антенн передатчика, ведя к концепции Пространственно-временных Блочных кодов. Для комплексных сигнальных созвездий они показали, что схема Аламоути является единственной схемой полного уровня двух антенн передачи.
В этом разделе мы учимся, производительность такой схемы с два получают антенны (т.е. 2x2 система) с и без оценки канала. В реалистическом сценарии, где информация о состоянии канала не известна в получателе, это должно быть извлечено от полученного сигнала. Мы принимаем, что средство оценки канала выполняет этого использующего ортогонального пилота сигналы, которые предварительно ожидаются к каждому пакету [3]. Это принято, что канал остается неизменным для длины пакета (т.е. это подвергается медленному исчезновению).
Симуляция, подобная той, описанной в предыдущем разделе, используется здесь, который приводит нас оценивать, что производительность BER для пространственно-временного блока закодировала систему с помощью два, передают, и два получают антенны.
Снова мы запускаем путем определения общих параметров симуляции
frmLen = 100; % frame length maxNumErrs = 300; % maximum number of errors maxNumPackets = 3000; % maximum number of packets EbNo = 0:2:12; % Eb/No varying to 12 dB N = 2; % number of Tx antennas M = 2; % number of Rx antennas pLen = 8; % number of pilot symbols per frame W = hadamard(pLen); pilots = W(:, 1:N); % orthogonal set per transmit antenna
и настроенный симуляция.
% Create a comm.MIMOChannel System object to simulate the 2x2 spatially % independent flat-fading Rayleigh channel chan = comm.MIMOChannel( ... 'MaximumDopplerShift', 0, ... 'SpatialCorrelationSpecification', 'None', ... 'NumTransmitAntennas', N, ... 'NumReceiveAntennas', M, ... 'PathGainsOutputPort', true); % Change the NumReceiveAntennas property value of the hAlamoutiDec System % object to M that is 2 release(ostbcComb); ostbcComb.NumReceiveAntennas = M; % Release the hAWGN2Rx System object release(awgn2Rx); % Set the global random stream for repeatability s = rng(55408); % Pre-allocate variables for speed HEst = zeros(frmLen, N, M); ber_Estimate = zeros(3,length(EbNo)); ber_Known = zeros(3,length(EbNo));
% Set up a figure for visualizing BER results fig = figure; grid on; ax = fig.CurrentAxes; hold(ax,'on'); ax.YScale = 'log'; xlim(ax,[EbNo(1), EbNo(end)]); ylim(ax,[1e-4 1]); xlabel(ax,'Eb/No (dB)'); ylabel(ax,'BER'); fig.NumberTitle = 'off'; fig.Name = 'Orthogonal Space-Time Block Coding'; fig.Renderer = 'zbuffer'; title(ax,'Alamouti-coded 2x2 System'); set(fig,'DefaultLegendAutoUpdate','off'); fig.Position = figposition([41 50 25 30]); % Loop over several EbNo points for idx = 1:length(EbNo) reset(errorCalc1); reset(errorCalc2); awgn2Rx.EbNo = EbNo(idx); % Loop till the number of errors exceed 'maxNumErrs' % or the maximum number of packets have been simulated while (ber_Estimate(2,idx) < maxNumErrs) && ... (ber_Known(2,idx) < maxNumErrs) && ... (ber_Estimate(3,idx)/frmLen < maxNumPackets) % Generate data vector per frame data = randi([0 P-1], frmLen, 1); % Modulate data modData = bpskMod(data); % Alamouti Space-Time Block Encoder encData = ostbcEnc(modData); % Prepend pilot symbols for each frame txSig = [pilots; encData]; % Pass through the 2x2 channel reset(chan); [chanOut, H] = chan(txSig); % Add AWGN rxSig = awgn2Rx(chanOut); % Channel Estimation % For each link => N*M estimates HEst(1,:,:) = pilots(:,:).' * rxSig(1:pLen, :) / pLen; % assume held constant for the whole frame HEst = HEst(ones(frmLen, 1), :, :); % Combiner using estimated channel decDataEst = ostbcComb(rxSig(pLen+1:end,:), HEst); % Combiner using known channel decDataKnown = ostbcComb(rxSig(pLen+1:end,:), ... squeeze(H(pLen+1:end,:,:,:))); % ML Detector (minimum Euclidean distance) demodEst = bpskDemod(decDataEst); % estimated demodKnown = bpskDemod(decDataKnown); % known % Calculate and update BER for current EbNo value % for estimated channel ber_Estimate(:,idx) = errorCalc1(data, demodEst); % for known channel ber_Known(:,idx) = errorCalc2(data, demodKnown); end % end of FOR loop for numPackets % Plot results semilogy(ax,EbNo(1:idx), ber_Estimate(1,1:idx), 'ro'); semilogy(ax,EbNo(1:idx), ber_Known(1,1:idx), 'g*'); legend(ax,['Channel estimated with ' num2str(pLen) ' pilot symbols/frame'],... 'Known channel'); drawnow; end % end of for loop for EbNo % Perform curve fitting and replot the results fitBEREst = berfit(EbNo, ber_Estimate(1,:)); fitBERKnown = berfit(EbNo, ber_Known(1,:)); semilogy(ax,EbNo, fitBEREst, 'r', EbNo, fitBERKnown, 'g'); hold(ax,'off'); % Restore default stream rng(s)
Для 2x2 моделируемая система, порядок разнообразия отличается, чем видевший или 1x2 или 2x1 системы в предыдущем разделе.
Обратите внимание на то, что с 8 экспериментальными символами для каждого 100 символов данных, оценка канала вызывает приблизительно ухудшение на 1 дБ в производительности для выбранной области значений Eb/No. Это улучшается с увеличением количества экспериментальных символов на кадр, но добавляет к издержкам ссылки. В этом сравнении мы сохраняем переданный ОСШ на символ, чтобы быть тем же самым в обоих случаях.
Сопроводительный функциональный скрипт, ostbc2m_e.m помогает дальнейшему экспериментированию для заинтересованных пользователей.
В этом итоговом разделе мы представляем некоторые результаты производительности для ортогонального пространственно-временного блочного кодирования с помощью четырех антенн передачи (4x1 система) использование кода полууровня, G4, согласно [4].
Мы ожидаем, что система предложит порядок разнообразия 4, и сравним ее с 1x4 и 2x2 системы, которые имеют тот же порядок разнообразия также. Чтобы допускать справедливое сравнение, мы используем четверичный PSK с полууровнем код G4, чтобы достигнуть той же скорости передачи 1 бита/секунды/Гц.
Эти результаты занимают время, чтобы сгенерировать на одноядерном. Если вам не установили Parallel Computing Toolbox™ (PCT), мы загружаем результаты предшествующей симуляции. Функциональный скрипт ostbc4m.m включен, который, наряду с mrc1m.m и ostbc2m.m, использовался, чтобы сгенерировать эти результаты. Если PCT установлен, эти симуляции выполняются параллельно. В этом случае функциональные скрипты ostbc4m_pct.m, mrc1m_pct.m и ostbc2m_pct.m используются. Пользователя убеждают использовать эти скрипты в качестве отправной точки, чтобы изучить другие коды и системы.
[licensePCT,~] = license( 'checkout' , 'Distrib_Computing_Toolbox'); if ( licensePCT && ~isempty(ver('distcomp'))) EbNo = 0:2:20; [ber11, ber14, ber22, ber41] = mimoOSTBCWithPCT(100,4e3,EbNo); else load ostbcRes.mat; end % Set up a figure for visualizing BER results fig = figure; grid on; ax = fig.CurrentAxes; hold(ax,'on'); fig.Renderer = 'zbuffer'; ax.YScale = 'log'; xlim(ax,[EbNo(1), EbNo(end)]); ylim(ax,[1e-5 1]); xlabel(ax,'Eb/No (dB)'); ylabel(ax,'BER'); fig.NumberTitle = 'off'; fig.Name = 'Orthogonal Space-Time Block Coding(2)'; title(ax,'G4-coded 4x1 System and Other Comparisons'); set(fig,'DefaultLegendAutoUpdate','off'); fig.Position = figposition([30 15 25 30]); % Theoretical performance of fourth-order diversity for QPSK BERthy4 = berfading(EbNo, 'psk', 4, 4); % Plot results semilogy(ax,EbNo, ber11, 'r*', EbNo, ber41, 'ms', EbNo, ber22, 'c^', ... EbNo, ber14, 'ko', EbNo, BERthy4, 'g'); legend(ax,'No Diversity (1Tx, 1Rx), BPSK', 'OSTBC (4Tx, 1Rx), QPSK', ... 'Alamouti (2Tx, 2Rx), BPSK', 'Maximal-Ratio Combining (1Tx, 4Rx), BPSK', ... 'Theoretical 4th-Order Diversity, QPSK'); % Perform curve fitting fitBER11 = berfit(EbNo, ber11); fitBER41 = berfit(EbNo(1:9), ber41(1:9)); fitBER22 = berfit(EbNo(1:8), ber22(1:8)); fitBER14 = berfit(EbNo(1:7), ber14(1:7)); semilogy(ax,EbNo, fitBER11, 'r', EbNo(1:9), fitBER41, 'm', ... EbNo(1:8), fitBER22, 'c', EbNo(1:7), fitBER14, 'k'); hold(ax,'off');
Starting parallel pool (parpool) using the 'local' profile ... Connected to the parallel pool (number of workers: 12).
Как ожидалось подобные наклоны кривых BER для 4x1, 2x2 и 1x4 системы указывают на идентичный порядок разнообразия для каждой системы.
Также наблюдайте штраф на 3 дБ за 4x1 система, которая может быть приписана тому же общему переданному предположению степени, сделанному для каждой из этих трех систем. Если мы калибруем переданную степень, таким образом, что полученная степень для каждой из этих систем является тем же самым, то эти три системы выполнили бы тождественно. Снова, теоретическая производительность совпадает с производительностью симуляции 4x1 система, когда общая степень нормирована через ответвления разнообразия.
Этот пример использует следующие функции помощника:
С. М. Аламоути, "Простой метод разнообразия передачи для радиосвязей", Журнал IEEE® на Выбранных областях в Коммуникациях, Издании 16, № 8, октябрь 1998, стр 1451-1458.
V. Tarokh, Х. Джэфархэми и А.Р. Колдербэнк, "Пространственно-временные блочные коды из ортогональных проектов", Транзакции IEEE на Теории информации, Издании 45, № 5, июль 1999, стр 1456-1467.
А.Ф. Нэгуиб, В. Тэрох, Н. Сесадри и А.Р. Колдербэнк, "Пространственно-временные коды для высокой радиосвязи скорости передачи данных: Не соответствуйте анализу", Продолжения IEEE Международная Конференция по Коммуникациям, стр 309-313, июнь 1997.
V. Tarokh, Х. Джэфархэми и А.Р. Колдербэнк, "Пространственно-временные блочные коды для радиосвязей: результаты Производительности", Журнал IEEE на Выбранных областях в Коммуникациях, Издании 17, № 3, март 1999, стр 451-460.