function y=QAM_Demodulator(r,a,m)
%***************************************************
%***********通用调制解调模块*************************
%***************************************************
% 函数名:function [] = QAM_Demodulator()
% 函数功能:QAM调制
%***************************************************
% 输入参数
% 参数名 数据结构 参数含义
% r [R*1] 输入的待调制信息比特
% m [1*1] 调制阶数:1-BPSK,2-QPSK,3-8QAM,4-16QAM,6-64QAM,8-256QAM,10-1024QAM,12-4096QAM
%***************************************************
% 输出参数
% 参数名 数据结构 参数含义
% y [Y*1] 解调后软信息
%***************************************************
% 修改日期 版本号 修改人 修改内容
% 2012.8.18 V1.0 鲁莎莎 首次创建
% 版权所有 螺光科技IC设计部
channel = 1;
r = r./a;
N=size(r,1)*m;
switch (m)
case 1
y=r;
case 2
y=zeros(2*size(r,1),1);
y(1:2:end,1) = real(r);
y(2:2:end,1) = imag(r);
case 3
ro = 1/sqrt(5+1.29^2);
LLR1 = real(r);
LLR0 = abs(LLR1)-2*ro*channel;
LLR2 = imag(r);
y_temp = [LLR0 LLR1 LLR2];
y=reshape(y_temp',N,1);
case 4
ro = 1/sqrt(10);
LLR1 = real(r);
LLR0 = abs(LLR1)-2*ro*channel;
LLR3 = imag(r);
LLR2 = abs(LLR3)-2*ro*channel;
y_temp = [LLR0 LLR1 LLR2 LLR3];
y=reshape(y_temp',N,1);
case 6
ro = 1/sqrt(42);
LLR2 = real(r);
LLR1 = abs(LLR2)-4*ro*channel;
LLR0 = -1*(abs(LLR1)-2*ro*channel);
LLR5 = imag(r);
LLR4 = abs(LLR5)-4*ro*channel;
LLR3= -1*(abs(LLR4)-2*ro*channel);
y_temp = [LLR0 LLR1 LLR2 LLR3 LLR4 LLR5];
y=reshape(y_temp',N,1);
case 8
ro = 1/sqrt(170);
LLR3 = real(r);
LLR2 = abs(LLR3)-8*ro*channel;
LLR1= -1*(abs(LLR2)-4*ro*channel);
LLR0 = -1*(abs(LLR1)-2*ro*channel);
LLR7 = imag(r);
LLR6 =(abs(LLR7)-8*ro*channel);
LLR5 = -1*(abs(LLR6)-4*ro*channel);
LLR4 = -1*(abs(LLR5)-2*ro*channel);
y_temp = [LLR0 LLR1 LLR2 LLR3 LLR4 LLR5 LLR6 LLR7];
y=reshape(y_temp',N,1);
case 10
ro = 1/sqrt(682);
LLR4 = real(r);
LLR3 = abs(LLR4)-16*ro*channel;
LLR2 = -1*(abs(LLR3)-8*ro*channel);
LLR1 = -1*(abs(LLR2)-4*ro*channel);
LLR0 = -1*(abs(LLR1)-2*ro*channel);
LLR9 = imag(r);
LLR8 = abs(LLR9)-16*ro*channel;
LLR7 = -1*(abs(LLR8)-8*ro*channel);
LLR6 = -1*(abs(LLR7)-4*ro*channel);
LLR5 = -1*(abs(LLR6)-2*ro*channel);
y_temp = [LLR0 LLR1 LLR2 LLR3 LLR4 LLR5 LLR6 LLR7 LLR8 LLR9];
y=reshape(y_temp',N,1);
case 12
ro = 1/sqrt(2730);
LLR5 = real(r);
LLR4 = abs(LLR5)-32*ro*channel;
LLR3 = -1*(abs(LLR4)-16*ro*channel);
LLR2 = -1*(abs(LLR3)-8*ro*channel);
LLR1 = -1*(abs(LLR2)-4*ro*channel);
LLR0 = -1*(abs(LLR1)-2*ro*channel);
LLR11 = imag(r);
LLR10 = abs(LLR11)-32*ro*channel;
LLR9 = -1*(abs(LLR10)-16*ro*channel);
LLR8 = -1*(abs(LLR9)-8*ro*channel);
LLR7 = -1*(abs(LLR8)-4*ro*channel);
LLR6 = -1*(abs(LLR7)-2*ro*channel);
y_temp = [LLR0 LLR1 LLR2 LLR3 LLR4 LLR5 LLR6 LLR7 LLR8 LLR9 LLR10 LLR11];
y=reshape(y_temp',N,1);
otherwise
error('Not supported Demodulation Mode!');
end
评论13