⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 mqam_bllr_gsc_threetr.m

📁 MIMO系统
💻 M
字号:
%MQAM_BLLR-GSC---Sfunction(简化公式)
function [sys,x0,str,ts]=MQAM_BLLR_GSC_threeTR(t,x,u,flag,L,BitRate,sgma,sel_num)
M=16;
d=1;


switch flag,
    case 0
        [sys,x0,str,ts]=mdlInitializeSizes(L,BitRate);%初始化模块
    case 3
        sys=mdlOutputs(t,x,u,L,BitRate,M,sgma,d,sel_num);%计算输出
    case {1,2,4,9}
        sys=[];%无用的标志
    otherwise
        error(['Unhandled flag =',num2str(flag)]);%错误处理
end
%模块结束
%%%%%%%初始化状态、采样周期、Size结构%%%%%%%%%
function [sys,x0,str,ts]=mdlInitializeSizes(L,BitRate)
%调用simsizes创建sizes结构
sizes=simsizes;
%填写sizes结构
sizes.NumContStates=0;
sizes.NumDiscStates=0;
sizes.NumOutputs=4*BitRate;
sizes.NumInputs=3*L*BitRate;
sizes.DirFeedthrough=1;
sizes.NumSampleTimes=1;
sys=simsizes(sizes);
x0=[];%没有连续状态
str=[];%没有状态次序
ts=[0 0];%继承性的采样周期

%%%%%模块输出%%%%%%%%%%
function sys=mdlOutputs(t,x,u,L,BitRate,M,sgma,d,sel_num)
j=sqrt(-1);

%形成信道
delta=u(1:L*BitRate);%[(L*BitRate)*1]
No=(2*sgma^2*delta)';%[1*(L*BitRate)](No')

%还原输出矩阵信号
y=u(L*BitRate+1:2*L*BitRate)+j*u(2*L*BitRate+1:3*L*BitRate);%[(L*BitRate)*1]
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%5

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
S1_0=[-3*d+j*3*d;-d+j*3*d;-3*d+j*d;-d+j*d;-3*d-j*d;-d-j*d;-3*d-j*3*d;-d-j*3*d];%S1^(0)
S1_1=[d+j*3*d;3*d+j*3*d;d+j*d;3*d+j*d;d-j*d;3*d-j*d;d-j*3*d;3*d-j*3*d];%S1^(1)
S2_0=[-3*d+j*3*d;-3*d+j*d;-3*d-j*d;-3*d-j*3*d;3*d+j*3*d;3*d+j*d;3*d-j*d;3*d-j*3*d];%S2^(0)
S2_1=[-d+j*3*d;-d+j*d;-d-j*d;-d-j*3*d;d+j*3*d;d+j*d;d-j*d;d-j*3*d];%S2^(1)
S3_0=[-3*d+j*3*d;-3*d+j*d;-d+j*3*d;-d+j*d;d+j*3*d;d+j*d;3*d+j*3*d;3*d+j*d];%S3^(0)
S3_1=[-3*d-j*d;-3*d-j*3*d;-d-j*d;-d-j*3*d;d-j*d;d-j*3*d;3*d-j*d;3*d-j*3*d];%S3^(1)
S4_0=[-3*d+j*3*d;-d+j*3*d;d+j*3*d;3*d+j*3*d;-3*d-j*3*d;-d-j*3*d;d-j*3*d;3*d-j*3*d];%S4^(0)
S4_1=[-3*d+j*d;-3*d-j*d;-d+j*d;-d-j*d;d+j*d;d-j*d;3*d+j*d;3*d-j*d];%S4^(1)

c=[1:sel_num];%选择的支路(初始状态)
k=1;
while (c(1)<=L-sel_num+1)
  for i=1:(M/2)
     metrics1_0(i,:)=(((abs(y-delta*S1_0(i))).^2)')./No;
     metrics2_0(i,:)=(((abs(y-delta*S2_0(i))).^2)')./No;
     metrics3_0(i,:)=(((abs(y-delta*S3_0(i))).^2)')./No;
     metrics4_0(i,:)=(((abs(y-delta*S4_0(i))).^2)')./No;
 %%%%%%%%//y-delta*beta//^2/No'%%%%%%(1*(BitRate*L))
     metrics1_1(i,:)=(((abs(y-delta*S1_1(i))).^2)')./No;
     metrics2_1(i,:)=(((abs(y-delta*S2_1(i))).^2)')./No;
     metrics3_1(i,:)=(((abs(y-delta*S3_1(i))).^2)')./No;
     metrics4_1(i,:)=(((abs(y-delta*S4_1(i))).^2)')./No;
 %%%%%%%%//y-delta*alpha//^2/No'%%%%%%(1*(BitRate*L))
   end
 %%%%%%%%%选择selnum个分支%%%%%%%%%%
 a1_0=reshape(metrics1_0,M/2*BitRate,L);
 metrics1_0_sel=a1_0(:,c);%((M/2*BitRate)*selnum)
 sum_metrics1_0_sel=sum((metrics1_0_sel)');%(1*(M/2*BitRate))
 
 a2_0=reshape(metrics2_0,M/2*BitRate,L);
 metrics2_0_sel=a2_0(:,c);%((M/2*BitRate)*selnum)
 sum_metrics2_0_sel=sum((metrics2_0_sel)');%(1*(M/2*BitRate))
 
 a3_0=reshape(metrics3_0,M/2*BitRate,L);
 metrics3_0_sel=a3_0(:,c);%((M/2*BitRate)*selnum)
 sum_metrics3_0_sel=sum((metrics3_0_sel)');%(1*(M/2*BitRate))
 
 a4_0=reshape(metrics4_0,M/2*BitRate,L);
 metrics4_0_sel=a4_0(:,c);%((M/2*BitRate)*selnum)
 sum_metrics4_0_sel=sum((metrics4_0_sel)');%(1*(M/2*BitRate))
 
 a1_1=reshape(metrics1_1,M/2*BitRate,L);
 metrics1_1_sel=a1_1(:,c);%((M/2*BitRate)*selnum)
 sum_metrics1_1_sel=sum((metrics1_1_sel)');%(1*(M/2*BitRate))
 
 a2_1=reshape(metrics2_1,M/2*BitRate,L);
 metrics2_1_sel=a2_1(:,c);%((M/2*BitRate)*selnum)
 sum_metrics2_1_sel=sum((metrics2_1_sel)');%(1*(M/2*BitRate))
 
 a3_1=reshape(metrics3_1,M/2*BitRate,L);
 metrics3_1_sel=a3_1(:,c);%((M/2*BitRate)*selnum)
 sum_metrics3_1_sel=sum((metrics3_1_sel)');%(1*(M/2*BitRate))
 
 a4_1=reshape(metrics4_1,M/2*BitRate,L);
 metrics4_1_sel=a4_1(:,c);%((M/2*BitRate)*selnum)
 sum_metrics4_1_sel=sum((metrics4_1_sel)');%(1*(M/2*BitRate))
 %%%%%%%%%
 b1_0=reshape(sum_metrics1_0_sel,M/2,BitRate);
 b1_1=reshape(sum_metrics1_1_sel,M/2,BitRate);
 b2_0=reshape(sum_metrics2_0_sel,M/2,BitRate);
 b2_1=reshape(sum_metrics2_1_sel,M/2,BitRate);
 b3_0=reshape(sum_metrics3_0_sel,M/2,BitRate);
 b3_1=reshape(sum_metrics3_1_sel,M/2,BitRate);
 b4_0=reshape(sum_metrics4_0_sel,M/2,BitRate);
 b4_1=reshape(sum_metrics4_1_sel,M/2,BitRate);
 LLR_r1_vector=min(b1_0)-min(b1_1);%(1*BitRate)
 LLR_r2_vector=min(b2_0)-min(b2_1);%(1*BitRate)
 LLR_r3_vector=min(b3_0)-min(b3_1);%(1*BitRate)
 LLR_r4_vector=min(b4_0)-min(b4_1);%(1*BitRate)
 
 LLR_r1_matr(k,:)=LLR_r1_vector;
 LLR_r2_matr(k,:)=LLR_r2_vector;
 LLR_r3_matr(k,:)=LLR_r3_vector;
 LLR_r4_matr(k,:)=LLR_r4_vector;
 
 k=k+1;
 %%采用组合生成的方法选择支路
d=zeros(1,sel_num);
for n=1:sel_num
    if c(n)<L-sel_num+n
        d(n)=n;
    end
end
m=max(d);
if m==0
    break;
else
c(m)=c(m)+1;
for n=m+1:sel_num
    c(n)=c(n-1)+1;
end
end

end%循环结束
%%总共有nchoosek(L,sel_num)种情况,取/LLR(r)/的最大%%%%%
[maxc1 num1]=max(abs(LLR_r1_matr));
[maxc2 num2]=max(abs(LLR_r2_matr));
[maxc3 num3]=max(abs(LLR_r3_matr));
[maxc4 num4]=max(abs(LLR_r4_matr));
LLR_r1=LLR_r1_matr(num1+nchoosek(L,sel_num)*(0:BitRate-1));%(1*BitRate)
LLR_r2=LLR_r2_matr(num2+nchoosek(L,sel_num)*(0:BitRate-1));%(1*BitRate)
LLR_r3=LLR_r3_matr(num3+nchoosek(L,sel_num)*(0:BitRate-1));%(1*BitRate)
LLR_r4=LLR_r4_matr(num4+nchoosek(L,sel_num)*(0:BitRate-1));%(1*BitRate)

%%%%%%%%%%判决(LLR_r>=0--1,LLR_r<0--0)%%%%%%%%%
sys_1=[LLR_r1;LLR_r2;LLR_r3;LLR_r4];%%(4*BitRate)

sys=-reshape(sys_1,4*BitRate,1);%((4*BitRate)*1)

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -