📄 mqam_bllr_gsc_threetr.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 + -