16QAM - 星形和矩形星座图调制解调MATLAB代码

2026/4/26 10:53:04

down_Q=downsample([0 rc_Q],f/fs); down_I=downsample(rc_I,f/fs); low_Q_rcos=conv(down_Q,flt); low_I_rcos=conv(down_I,flt);

base_rx=low_Q_rcos(1:length(low_I_rcos))+j*low_I_rcos;

%两次根升余弦滤波延迟,定位初始信号位置 Tlay+1:end-delay-1 R=fs/fd;

delay=3*R*2;

rc_Q_seq=(downsample(low_Q_rcos(delay+1:end-delay-1),R));

rc_I_seq=(downsample(low_I_rcos(delay+1:end-delay-1),R));

data_rx=rc_Q_seq+j*rc_I_seq;

%-------------------------------------------------------------------------- %% 载波调制

function transmit=CarrierMod(fc,f,base)

%载波调制

t=0:length(base)-1;

high_freq_Q=real(base) .* sin(2*pi*fc*t/f); high_freq_I=imag(base) .* cos(2*pi*fc*t/f);

transmit=high_freq_Q+high_freq_I;

%------------------------------------------------------------------------------ %

% QAM解调程序,将MQAM码元还原为二进制数据 % 入口参数:data_QAM:QAM码元数据 % M_QAM:MQAM中M的大小 % 出口参数:二进制数据比特流

%------------------------------------------------------------------------ function data_out=QamDemod(data_QAM,M_QAM)

k=log2(M_QAM);%每个M进制码元的bit数 data_len=length(data_QAM);%码元长度

%------------------------------------------------------------------- %QAM信号放缩至与发送端相同比例

data_temp=data_QAM(find(real(data_QAM>0))); aver=mean(real(data_temp));

data_Qam_temp=data_QAM/aver*(2^(k/2-1));

%------------------------------------------------------------------------

%类型转换

%平移到第一象限

data_Qam_temp2=(data_Qam_temp+(2^(k/2)-1)*(1+j))/2; %---------------------------------------------------------------------- %将实部虚部分别映射为二进制数据 %实部

data_real=round(real(data_Qam_temp2));%实部判决

data_real(find(data_real>(2^(k/2)-1)))=2^(k/2)-1;%大于2^(k/2)-1的数据判定为2^(k/2)-1 data_real(find(data_real<0))=0;%小于0的数据判为0 bit_real=abs(dec2bin(data_real))-'0'; %虚部

data_imag=round(imag(data_Qam_temp2));%虚部判决

data_imag(find(data_imag>(2^(k/2)-1)))=2^(k/2)-1;%大于2^(k/2)-1的数据判定为2^(k/2)-1 data_imag(find(data_imag<0))=0;%小于0的数据判为0 bit_imag=abs(dec2bin(data_imag))-'0';

%------------------------------------------------------------------------ %还原为二进制比特流 bit_rec=[bit_real,bit_imag]';

data_out=reshape(bit_rec,1,data_len*k);

%------------------------------------------------------------------------------------------------------------- %

% QAM调制程序,实现二进制到MQam调制 % 入口参数:binary:二进制数据

% M_QAM:MQAM中M的大小 % 返回参数:MQAM码元

%------------------------------------------------------------------------ function data_M = QamMod(binary,M_QAM)

k=log2(M_QAM);%每个M进制码元的bit数

data_len=length(binary);%比特长度

binary_rec=reshape(binary,k,data_len/k)';%转化为data_len/k行,k列,的矩阵,以便转化为16进制M进制 %计算实部

data_str1=num2str(binary_rec(:,1:k/2)); data_m_real=bin2dec(data_str1); %计算虚部

data_str2=num2str(binary_rec(:,k/2+1:k)); data_m_imag=bin2dec(data_str2); %实部虚部映射到MQam

data_M=((data_m_real*2-2^(k/2)+1)+j*(data_m_imag*2-2^(k/2)+1)).';

%---------------------------------------------------------------------------------

%% 星形16QAM映射

function data_m16 = SrarQamMod(binary) %binary=randint(1,100);%产生随机序列 data_len=length(binary);%比特长度

binary_rec=reshape(binary,4,data_len/4)';%转化为data_len/4行,4列,的矩阵,以便转化为16进制

data_str=num2str(binary_rec); data_dec=bin2dec(data_str);

data_mm16=(floor(data_dec/8)+1).*exp(j*45/180*pi*mod(data_dec,8)); data_m16=reshape(data_mm16,1,data_len/4);

%------------------------------------------------------------------------------ %% 星形16QAM解调

function data_bit = StarQamDemod(qam_rev) %qam_rev=xing_qam16_noise(1:10); am=abs(qam_rev);%幅度判定

am(find(am>2))=2;%幅度大于2的判定为2 am(find(am<1.5))=1;%幅度大于2的判定为2

%相位判定

ang=angle(qam_rev)/pi*180;%将-180度到0度变为180度到360度 ang(find(ang<0))=ang(find(ang<0))+360; ang_n=round(ang/45); ang_n(find(ang_n>7))=0;

data_dec=8*(round(am)-1)+ang_n;

úta_dec(find(data_dec>15))=15;%大于15的判定为15 úta_dec(find(data_dec<0))=0;%小于0的判定为0 data_bit_rec=dec2bin(data_dec);

data_bit=reshape(data_bit_rec',1,length(qam_rev)*4)-'0';


16QAM - 星形和矩形星座图调制解调MATLAB代码.doc 将本文的Word文档下载到电脑
搜索更多关于: 16QAM - 星形和矩形星座图调制解调MATLAB代码 的文档
相关推荐
相关阅读
× 游客快捷下载通道(下载后可以自由复制和排版)

下载本文档需要支付 10

支付方式:

开通VIP包月会员 特价:29元/月

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信:xuecool-com QQ:370150219