function [y,y_test]=MQAM(x,fc,fs,rc,M,detafy)
% MQAM调制,可实现4QAM,16QAM,32QAM、64QAM,128QAM调制
% 参数说明:
% x 输入序列
% y 输出序列
% fc 载波频率
% fs 采样频率
% rc 码元速率
% M 调制模式,M=4、16、64、128
%-------星座图映射关系--------------
% 4QAM: 00 --> -1+i
% 01 --> -1-i
% 10 --> 1+i
% 11 --> 1-i
% 16QAM: x=[0:15]
% y=qammod(x,16)
% y中的元素与x中一一对应,即映射关系
% mQAM: x=[0:m-1]
% y=qammod(x,m)
%----------------------------------
N=length(x);
Ns=fs/fc;
switch M
case 4,
if mod(N,2)==1
N=N-1;
end
n=1:floor(N*Ns*fc/rc)-1;
t=n/(Ns*fc);
A=2*x(1:2:N)+x(2:2:N);
s=qammod(A,4)/sqrt(2);
s1=x(ceil(n*rc/(Ns*fc))).*ones(1,length(n));
case 16,
if mod(N,4)==1
N=N-1;
elseif mod(N,4)==2
N=N-2;
elseif mod(N,4)==3
N=N-3;
end
n=1:floor(N*Ns*fc/rc)-1;
t=n/(Ns*fc);
A=8*x(1:4:N)+4*x(2:4:N)+2*x(3:4:N)+x(4:4:N);
s=qammod(A,16)/sqrt(18);
s1=x(ceil(n*rc/(Ns*fc))).*ones(1,length(n));
case 32,
if mod(N,5)==1
N=N-1;
elseif mod(N,5)==2
N=N-2;
elseif mod(N,5)==3
N=N-3;
elseif mod(N,5)==4
N=N-4;
end
n=1:floor(N*Ns*fc/rc)-1;
t=n/(Ns*fc);
A=16*x(1:5:N)+8*x(2:5:N)+4*x(3:5:N)+2*x(4:5:N)+x(5:5:N);
s=qammod(A,32)/sqrt(50);
s1=x(ceil(n*rc/(Ns*fc))).*ones(1,length(n));
case 64,
if mod(N,6)==1
N=N-1;
elseif mod(N,6)==2
N=N-2;
elseif mod(N,6)==3
N=N-3;
elseif mod(N,6)==4
N=N-4;
elseif mod(N,6)==5
N=N-5;
end
n=1:floor(N*Ns*fc/rc)-1;
t=n/(Ns*fc);
A=32*x(1:6:N)+16*x(2:6:N)+8*x(3:6:N)+4*x(4:6:N)+2*x(5:6:N)+x(6:6:N);
s=qammod(A,64)/sqrt(98);
s1=x(ceil(n*rc/(Ns*fc))).*ones(1,length(n));
case 128,
if mod(N,7)==1
N=N-1;
elseif mod(N,7)==2
N=N-2;
elseif mod(N,7)==3
N=N-3;
elseif mod(N,7)==4
N=N-4;
elseif mod(N,7)==5
N=N-5;
elseif mod(N,7)==6
N=N-6;
end
n=1:floor(N*Ns*fc/rc)-1;
t=n/(Ns*fc);
A=64*x(1:7:N)+32*x(2:7:N)+16*x(3:7:N)+8*x(4:7:N)+4*x(5:7:N)+2*x(6:7:N)+x(7:7:N);
s=qammod(A,128)/sqrt(242);
s1=x(ceil(n*rc/(Ns*fc))).*ones(1,length(n));
end
mod_I=real(s);
mod_Q=imag(s);
mod_I=mod_I(ceil(n*rc/(log2(M)*Ns*fc)));
mod_Q=mod_Q(ceil(n*rc/(log2(M)*Ns*fc)));
y=mod_I.*cos(2*pi*fc*t+detafy)+mod_Q.*sin(2*pi*fc*t+detafy);
y_test=s1;
评论0