假设:
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
]
答案 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);