blkdiagbfweights

Канал MIMO блокирует diagonalized веса

Описание

пример

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

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

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

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

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

Предварительное кодирование и объединение весов diagonalize канал в независимые подканалы так, чтобы для k thuser, матричного 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 и затем вычислите beamforming веса wp и wc. Каждый канал соответствует пользователю. Примите, что каналы имеют 10 рассеивателей. Каждый канал имеет два подканала, заданные векторным ns.

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

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

Для канала 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')

Начните с базовой станции, состоящей из универсальной линейной матрицы (ULA) с 16 антеннами и двумя пользователями, имеющими получатель массивы ULA с 8 и 5 антеннами, соответственно. Покажите, как использовать 3D массивы матриц канала, чтобы обработать две поднесущие. Затем матрица канала для первого пользователя принимает форму 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];

Вычислите beamforming веса.

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

Покажите, что каналы являются diagonalized для первой поднесущей.

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's и +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')

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

свернуть все

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

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

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

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

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

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

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

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

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

свернуть все

Предварительное кодирование весов, возвращенных как N с комплексным знаком st-by-Nt матрица или L с комплексным знаком-by-Nst-by-Nt массив MATLAB.

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

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

Модули являются безразмерными.

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

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

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

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

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

Ссылки

[1] Пустошь, Роберт В., и др. “Обзор Методов Обработки сигналов для Волны Миллиметра Системы MIMO”. Журнал IEEE Выбранных Тем в Обработке сигналов, издании 10, № 3, апрель 2016, стр 436–53. DOI.org (Crossref), doi:10.1109/JSTSP.2016.2523924. Библиография

[2] Се, D. и П. Висванэт, основные принципы радиосвязей, Кембриджа: Издательство Кембриджского университета, 2005.

[3] Paulraj, A. Введение в пространственно-временные радиосвязи, Кембридж: Издательство Кембриджского университета, 2003.

[4] Спенсер, Q.H., и др. "Обеспечивающие нуль Методы для Нисходящего Пространственного Мультиплексирования в Многопользовательских Каналах MIMO". Транзакции IEEE на Обработке сигналов, Издании 52, № 2, февраль 2004, стр 461-471. DOI.org (Crossref), doi:10.1109/TSP.2003.821107.

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

Смотрите также

Функции

Объекты

Введенный в R2020a