如何在不使用信号处理/通信工具箱的情况下在MATLAB中生成64或128 QAM信号。是否有任何创建高阶qams的通用方法?
答案 0 :(得分:0)
假设您要为M=2^b
生成QAM。然后你需要星座点,M_I = 2^b_I
到M_Q = 2^b_Q
点,M = M_I*M_Q
,因此b_I+b_Q==b
形成b_I = floor(b/2);
点阵。分布均匀,我们得到b_Q = ceil(b/2);
和b = 6;
M = 2^b; % b = 6: 64-QAM, b = 7: 128-QAM, etc.
b_I = floor(b/2);
M_I = 2^b_I;
b_Q = ceil(b/2);
M_Q = 2^b_Q;
x_I = -(M_I-1)/2:(M_I-1)/2;
x_Q = -(M_Q-1)/2:(M_Q-1)/2;
x_IQ = repmat(x_I,[M_Q,1]) + 1i*repmat(x_Q.',[1,M_I]);
x_IQ = x_IQ / sqrt((M_I^2+M_Q^2-2)/12);
。
这已建立,您通过为实部和虚部形成1-D网格来建立晶格,然后将它们连接到2-D晶格。像这样:
x_IQ = x_I + 1i*x_Q.';
请注意,在R2016b中,倒数第二行可以简化为b
此外,最后一行确保您的星座每个符号的平均能量为1(注意:偶数sqrt((M-1)/6)
,规范化可以简化为x_IQ
)。
现在,s = x_IQ(randi(M,NSymbols,1));
是一个包含所有可能的星座点的数组。
要绘制随机符号,请使用b
注意,对于奇数b
,此脚本生成矩形QAM(例如,对于128-QAM,它是16x8星座)。通过使星座点更加对称,还有其他方法可以做到这一点。没有独特的方法可以做到这一点,如果你需要一个,你必须指定哪一个。虽然在实践中通常使用QAM甚至jsbin.com/vuyuwaduba/edit?html,output
。
答案 1 :(得分:0)
我找到了答案!如果它是64,256或任何数字的平方,那么它可以很容易地生成如下。
% matlab code to generate 64 qam
m = 0; n = 0;
for k = -7:2:7
m = m+1;
for l = -7:2:7
n = n+1;
x(m,n) = k+j*l;
end
n = 0;
end