Matlab:添加'convolving'行和colum来制作每个元素组合的方阵?

A3.*_*.A3 2 arrays matlab matrix

假设:

    X = [3 1 -1 -3];
    Y = i.*X;
Run Code Online (Sandbox Code Playgroud)

从X和Y中获取矩阵QAM的最简单方法是什么:

QAM = [ 3+3i, 3+1i, 3-1i, 3-3i,
        1+3i, 1+1i, 1-1i, 1-3i,
       -1+3i,-1+1i,-1-1i,-1-3i,
       -3+3i,-3+1i,-3-1i,-3-3i
      ]
Run Code Online (Sandbox Code Playgroud)

Div*_*kar 7

使用bsxfun当然 -

bsxfun(@plus,X(:),1i*X(:).')
Run Code Online (Sandbox Code Playgroud)

样品运行 -

>> X
X =
     3     1    -1    -3
>> bsxfun(@plus,X(:),1i*X(:).')
ans =
   3.0000 + 3.0000i   3.0000 + 1.0000i   3.0000 - 1.0000i   3.0000 - 3.0000i
   1.0000 + 3.0000i   1.0000 + 1.0000i   1.0000 - 1.0000i   1.0000 - 3.0000i
  -1.0000 + 3.0000i  -1.0000 + 1.0000i  -1.0000 - 1.0000i  -1.0000 - 3.0000i
  -3.0000 + 3.0000i  -3.0000 + 1.0000i  -3.0000 - 1.0000i  -3.0000 - 3.0000i
Run Code Online (Sandbox Code Playgroud)


Lui*_*ndo 5

我会去Divakar的回答 ; 但另一种方法是使用ndgrid:

[ii, jj] = ndgrid(1:numel(X), 1:numel(Y));
QAM = X(ii)+Y(jj);
Run Code Online (Sandbox Code Playgroud)

这是一个更离奇的方法,利用列向量的矩阵乘积乘以行向量的事实生成所有组合:

QAM = log(exp(X(:))*exp(Y(:).'));
Run Code Online (Sandbox Code Playgroud)

最后,如果您有Communications Toolbox,您可以使用qammod:

QAM = qammod(flipud(reshape(0:15,4,4)).',16);
Run Code Online (Sandbox Code Playgroud)