blkdiagbfweights

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

Описание

пример

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

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

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

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

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

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

пример

[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.

Входные параметры

свернуть все

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

  • Если на kth камера является матрицей, матрица имеет размер N t-by- N r (k). N t - количество элементов в передающем массиве, а N r (k) - количество элементов в kth приёмный массив.

  • Если на kth камера является массивом, массив имеет размер L -by- N t-by- N r (k). L - количество поднесущих. N t - количество элементов в передающем массиве, а N r (k) - количество элементов в kth приёмный массив.

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

Количество потоков данных в каждом приёмном массиве, заданное как N вектор-строка u-элемента с положительными целыми числами. N u - количество приёмных массивов.

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

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

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

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

свернуть все

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

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

  • Если chanmat содержит трехмерные массивы MATLAB, wp - комплексный L -by- N st-by- N t массив MATLAB, где N st - общее количество каналов данных (sum(ns)).

Модули безразмерны.

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

Объединение весов, возвращаемое как N массив ячеек u-элемента. Модули безразмерны.

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

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

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

Ссылки

[1] Heath, Robert W., et al. Обзор методов обработки сигналов для MIMO-систем с миллиметровой волной. Журнал IEEE по выбранным темам в обработке сигналов, том 10, № 3, апр. 2016, стр. 436-53. DOI.org (Crossref), doi:10.1109/JSTSP.2016.2523924. Библиография

[2] Tse, D. and P. Viswanath, Fundamentals of Wireless Communications, Cambridge: Cambridge University Press, 2005.

[3] Paulraj, A. Введение в Space-Time Wireless Communications, Cambridge: Cambridge University Press, 2003.

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

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

.

См. также

Объекты

Введенный в R2020a