如何在matlab中生成64或128qam

如何在matlab中生成64或128qam,matlab,Matlab,如何在不使用信号处理/通信工具箱的情况下,在MATLAB中生成64或128 QAM信号。是否有创建高阶QAM的一般方法 假设您想要为M=2^b生成QAM。然后你需要星座点,这些点通过M=M\u*M\u Q点形成一个M\u I=2^b\u I晶格,其中M=M\u*M\u Q,因此b\u I+b\u Q==b。均匀分布,得到b_I=floor(b/2)和b_Q=ceil(b/2) 这样,您可以通过为实部和虚部形成一维网格来设置晶格,然后将它们连接到二维晶格。像这样: b = 6; M = 2^b;

如何在不使用信号处理/通信工具箱的情况下,在MATLAB中生成64或128 QAM信号。是否有创建高阶QAM的一般方法

假设您想要为
M=2^b
生成QAM。然后你需要星座点,这些点通过
M=M\u*M\u Q
点形成一个
M\u I=2^b\u I
晶格,其中
M=M\u*M\u Q
,因此
b\u I+b\u 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);
注意,在R2016b中,倒数第二行可以简化为
x_IQ=x_I+1i*x_Q'此外,最后一行确保您的星座每个符号的平均能量为1(注意:对于偶数
b
,标准化可以简化为
sqrt((M-1)/6)

现在,
x_IQ
是一个包含所有可能星座点的数组。 要绘制随机符号,请使用
s=x_IQ(randi(M,n符号,1))


请注意,对于奇数
b
,此脚本生成一个矩形QAM(例如,对于128-QAM,它是一个16x8星座)。还有其他方法可以通过使星座点更加对称来实现。虽然没有唯一的方法可以做到这一点,但是如果您需要,您必须指定哪种方法。虽然在实践中,人们通常使用QAM,甚至连
b

都使用,但我找到了答案!如果它是64256或任意数字的平方,则可以按如下方式轻松生成

% 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

好吧,看来你不喜欢我的解决方案。也许它看起来太复杂了。当然,你自己找到答案是件好事,这是最好的学习方式!请注意:本质上,我的解决方案与您的解决方案相同,但它可以处理2的任何幂,而且由于它没有循环,所以速度要快一点。当然,速度可能不是一个大问题。请注意,你的星座并没有标准化为单位能量,你可能想这样做(我在回答中已经说明了如何)。