exponenta event banner

blkdiagbfweights

Блок-диагонализированные веса канала MIMO

Описание

пример

[wp,wc] = blkdiagbfweights(chanmat,ns) возвращает веса предварительного кодирования, wpи объединение весов, wc, полученные из матриц отклика канала, содержащихся в массиве ячеек MATLAB ® chanmat.

  • Можно указать несколько пользовательских каналов, поместив каждый канал в chanmat ячейка. chanmat{k} представляет kthchannel от передатчика пользователю.

    • Для одной частоты укажите ячейку канала в качестве матрицы.

    • Для умножения частот укажите канальную ячейку как трехмерный массив, где строки представляют различные поднесущие.

  • Укажите несколько подканалов на канал с помощью ns аргумент. Подканалы представляют различные потоки данных. ns определяет количество подканалов для каждого канала пользователя. Умножьте потоки данных на веса предварительного кодирования, wp.

Предварительное кодирование и объединение весов диагонализуют канал в независимые подканалы, так что для ктузера матрица wp*chanmat{k}*wc{k} диагональ для каждой поднесущей.

пример

[wp,wc] = blkdiagbfweights(chanmat,ns,pt) также определяет общую передаваемую мощность, pt, на поднесущую.

Примеры

свернуть все

Начните с базовой станции, состоящей из однородной линейной матрицы (ULA) с 16 антеннами и двух пользователей, имеющих приемные матрицы ULA с 8 и 4 антеннами соответственно. Показать, что использование предварительного кодирования на основе блок-диагонализации и объединения весов обеспечивает пространственное мультиплексирование, где принятый сигнал у каждого пользователя может быть декодирован без помех от другого пользователя. Укажите два потока данных для каждого пользователя.

Укажите местоположение датчика в txpos и два местоположения пользовательских получателей в rxpos1 и rxpos2. Элементы решетки разнесены на половину длины волны.

txpos = (0:15)*0.5;
rxpos1 = (0:7)*0.5;
rxpos2 = (0:3)*0.5;

Создание массива ячеек матрицы канала с помощью scatteringchanmtx и затем вычислить веса для формирования луча wp и wc. Каждый канал соответствует пользователю. Предположим, что каналы имеют 10 рассеивателей. Каждый канал имеет два подканала, заданных вектором ns.

chanmat = {scatteringchanmtx(txpos,rxpos1,10), ...
    scatteringchanmtx(txpos,rxpos2,10)};
ns = [2 2];
[wp,wc] = blkdiagbfweights(chanmat,ns);

Веса диагонализуют канальные матрицы для каждого пользователя.

Для канала 1:

disp(wp*chanmat{1}*wc{1})
   8.2269 + 0.0000i  -0.0000 - 0.0000i
   0.0000 + 0.0000i   6.1371 - 0.0000i
  -0.0000 - 0.0000i   0.0000 - 0.0000i
   0.0000 + 0.0000i   0.0000 + 0.0000i

Для канала 2:

disp(wp*chanmat{2}*wc{2})
   0.0000 - 0.0000i   0.0000 - 0.0000i
  -0.0000 + 0.0000i  -0.0000 + 0.0000i
   8.7543 + 0.0000i   0.0000 - 0.0000i
   0.0000 + 0.0000i   4.4372 + 0.0000i

Сначала создайте четыре подканала для передачи потоков данных: два подканала на канал. Каждый поток данных содержит 20 выборок ± 1. Выполните предварительную кодировку входных потоков и объедините их для получения восстановленных сигналов.

x = 2*round(rand([20,4])) - 1;
xp = x*wp;
y1 = xp*chanmat{1} + 0.1*randn(20,8);
y2 = xp*chanmat{2} + 0.1*randn(20,4);
y = [y1*wc{1},y2*wc{2}];

Графики наложения входных и восстановленных сигналов, показывающие, что принятые сигналы пользователя являются такими же, как и переданные сигналы.

for m = 1:4
    subplot(4,1,m)
    s = stem([x(:,m) 2*((real(y(:,m)) > 0) - 0.5)]);
    s(1).LineWidth = 2;
    s(2).MarkerEdgeColor = 'none';
    s(2).MarkerFaceColor = 'r';
    ylabel('Signal')
    title(sprintf('User %d Stream %d',ceil(m/2),rem(m-1,2) + 1))
    if m==1
        legend('Input','Recovered','Location','best')
    end
end
xlabel('Samples')

Figure contains 4 axes. Axes 1 with title User 1 Stream 1 contains 2 objects of type stem. These objects represent Input, Recovered. Axes 2 with title User 1 Stream 2 contains 2 objects of type stem. Axes 3 with title User 2 Stream 1 contains 2 objects of type stem. Axes 4 with title User 2 Stream 2 contains 2 objects of type stem.

Начните с базовой станции, состоящей из однородной линейной матрицы (ULA) с 16 антеннами и двух пользователей, имеющих приемные матрицы ULA с 8 и 5 антеннами соответственно. Покажите, как использовать трехмерные массивы канальных матриц для обработки двух поднесущих. Затем канальная матрица для первого пользователя принимает вид 2 на 16 на 8, а канальная матрица для второго пользователя принимает вид 2 на 16 на 5. Также предположим, что для каждого пользователя существует два потока данных.

Укажите местоположение датчика в txpos и два местоположения пользовательских получателей в rxpos1 и rxpos2. Элементы решетки разнесены на половину длины волны.

nr1 = 8;
nr2 = 5;
txpos = (0:15)*0.5;
rxpos1 = (0:(nr1-1))*0.5;
rxpos2 = (0:(nr2-1))*0.5;

Создание матриц каналов с помощью scatteringchanmtx и поместить их в клеточный массив. Чтобы создать второй подканал для каждого приемника, дублируйте каждую канальную матрицу. Предположим 10 точечных рассеивателей при вычислении канальной матрицы.

smtmp1 = scatteringchanmtx(txpos,rxpos1,10);
smtmp2 = scatteringchanmtx(txpos,rxpos2,10);
sm1 = zeros(2,16,8);
sm2 = zeros(2,16,5);
sm1(1,:,:) = smtmp1;
sm1(2,:,:) = smtmp1;
sm2(1,:,:) = smtmp2;
sm2(2,:,:) = smtmp2;
chanmat = {sm1,sm2};

Укажите, что для каждого пользователя существует два потока данных.

ns = [2 2];

Укажите передаваемые мощности для каждой поднесущей.

pt = [1.0 1.5];

Вычислите веса для формирования луча.

[wp,wc] = blkdiagbfweights(chanmat,ns,pt);

Показать, что каналы диагонализированы для первой поднесущей.

ksubcr = 1;
wpx = squeeze(wp(ksubcr,:,:));
chanmat1 = squeeze(chanmat{1}(ksubcr,:,:));
chanmat2 = squeeze(chanmat{2}(ksubcr,:,:));
wc1 = squeeze(wc{1}(ksubcr,:,:));
wc2 = squeeze(wc{2}(ksubcr,:,:));
wpx*chanmat1*wc1
ans = 4×2 complex

   8.2104 - 0.0000i  -0.0000 - 0.0000i
   0.0000 + 0.0000i   5.9732 - 0.0000i
   0.0000 - 0.0000i   0.0000 + 0.0000i
  -0.0000 - 0.0000i  -0.0000 - 0.0000i

wpx*chanmat2*wc2
ans = 4×2 complex

   0.0000 - 0.0000i  -0.0000 + 0.0000i
  -0.0000 - 0.0000i  -0.0000 - 0.0000i
   8.8122 + 0.0000i  -0.0000 + 0.0000i
  -0.0000 - 0.0000i   4.8186 - 0.0000i

Распространить сигналы на каждого пользователя и затем декодировать. Создайте четыре потока случайных данных, содержащих -1 и + 1 и имеющих два столбца для каждого пользователя. Каждый поток является подканалом.

x = 2*(round(rand([20 4]))) - 1;

Выполните предварительное кодирование потоков данных.

xp = x*wpx;
y1 = xp*chanmat1 + 0.1*randn(20,8);
y2 = xp*chanmat2 + 0.1*randn(20,5);

Декодируйте потоки данных.

y = [y1*wc1,y2*wc2];

Графики наложения входных и восстановленных сигналов, показывающие, что принятые сигналы пользователя являются такими же, как и переданные сигналы.

for m = 1:4
    subplot(4,1,m)
    s = stem([x(:,m) 2*((real(y(:,m)) > 0) - 0.5)]);
    s(1).LineWidth = 2;
    s(2).MarkerEdgeColor = 'none';
    s(2).MarkerFaceColor = 'r';
    ylabel('Signal')
    title(sprintf('User %d Stream %d',ceil(m/2),rem(m-1,2) + 1))
    if m==1
        legend('Input','Recovered','Location','best')
    end
end
xlabel('Samples')

Figure contains 4 axes. Axes 1 with title User 1 Stream 1 contains 2 objects of type stem. These objects represent Input, Recovered. Axes 2 with title User 1 Stream 2 contains 2 objects of type stem. Axes 3 with title User 2 Stream 1 contains 2 objects of type stem. Axes 4 with title User 2 Stream 2 contains 2 objects of type stem.

Входные аргументы

свернуть все

Матрицы отклика канала, заданные как массив ячеек Nu-элемента. Nu - количество приемных массивов. Каждая ячейка соответствует отдельному каналу и содержит матрицу отклика канала или трехмерную матрицу MATLAB. Массив ячеек должен содержать либо все матрицы, либо все массивы. Для матриц число строк для всех матриц должно быть одинаковым. Для трехмерных массивов число строк и столбцов должно быть одинаковым.

  • Если k-я ячейка является матрицей, матрица имеет размер Nt-by-Nr (k). Nt - количество элементов в передающем массиве, а Nr (k) - количество элементов в k-ом принимающем массиве.

  • Если k-я ячейка является массивом, массив имеет размер L-by-Nt-by-Nr (k). L - количество поднесущих. Nt - количество элементов в матрице передачи, а Nr (k) - количество элементов в k-ой матрице приема.

Типы данных: double
Поддержка комплексного номера: Да

Число потоков данных на принимаемый массив, указанное как вектор строки Nu-элемента положительных целых чисел. Nu - количество приемных массивов.

Типы данных: double

Общая передаваемая мощность на поднесущую, заданная как положительный скаляр или L-элементный вектор положительных значений. L - количество поднесущих. Если pt является скаляром, все поднесущие имеют одинаковую передаваемую мощность. Если pt является вектором, каждый элемент вектора определяет передаваемую мощность для соответствующей поднесущей. Мощность в линейных единицах.

Типы данных: double

Выходные аргументы

свернуть все

Веса предварительного кодирования, возвращаемые в виде матрицы Nst-by-Nt с комплексными значениями или матрицы MATLAB с комплексными значениями L-by-Nst-by-Nt.

  • Если chanmat содержит матрицы, wp является комплекснозначной матрицей Nst-by-Nt, где Nst - общее число каналов данных (sum(ns)).

  • Если chanmat содержит трехмерные массивы MATLAB, wp является комплекснозначным массивом L-за-Nst-за-nt MATLAB, где Nst - общее количество каналов данных (sum(ns)).

Единицы измерения безразмерны.

Типы данных: double
Поддержка комплексного номера: Да

Объединение весов, возвращаемых как массив ячеек Nu-элемента. Единицы измерения безразмерны.

  • Если chanmat содержит матрицы, k-я ячейка в wc содержит матрицу с комплексным значением Nr (k) -by-Ns (k). Ns (k) - значение аргументаns для k-го принимающего массива.

  • Если chanmat содержит трехмерные матрицы MATLAB, k-я ячейка wc содержит комплексный массив L-by-Nr (k) -by-Ns (k) MATLAB. Ns (k) - значение k-ой записи ns вектор.

Типы данных: double
Поддержка комплексного номера: Да

Ссылки

[1] Heath, Robert W., et al. «Обзор методов обработки сигналов для MIMO-систем миллиметровых волн». IEEE Journal of Selected Topics in Signal Processing, vol. 10, no. 3, Apr. 2016, pp. 436-53. DOI.org (Crossref), doi:10.1109/JSTSP.2016.2523924. Библиография

[2] Tse, D. and P. Viswanath, Основы беспроводной связи, Кембридж: Cambridge University Press, 2005.

[3] Паулрадж, А. Введение в беспроводную космическую связь, Кембридж: Cambridge University Press, 2003.

[4] Спенсер, Q.H., et al. «Методы нулевого форсирования для пространственного мультиплексирования нисходящей линии связи в многоканальных MIMO-каналах». IEEE Transactions on Signal Processing, том 52, № 2, февраль 2004 года, стр. 461-471. DOI.org (Crossref), doi:10.1109/TSP.2003.821107.

Расширенные возможности

.

См. также

Объекты

Представлен в R2020a