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

时间:2015-04-10 21:39:42

标签: arrays matlab matrix

假设:

    X = [3 1 -1 -3];
    Y = i.*X;

从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
      ]

2 个答案:

答案 0 :(得分:7)

当然使用bsxfun -

bsxfun(@plus,X(:),1i*X(:).')

示例运行 -

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

答案 1 :(得分:5)

我会选择Divakar's answer;但另一种方法是使用ndgrid

[ii, jj] = ndgrid(1:numel(X), 1:numel(Y));
QAM = X(ii)+Y(jj);

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

QAM = log(exp(X(:))*exp(Y(:).'));

最后,如果您有通讯工具箱,则可以使用qammod

QAM = qammod(flipud(reshape(0:15,4,4)).',16);