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

📄 mqam_snr_gsc_threetr.m

📁 MIMO系统
💻 M
字号:
%MQAM_SNR-GSC---Sfunction
function [sys,x0,str,ts]=MQAM_SNR_GSC_threeTR(t,x,u,flag,L,BitRate,sel_num)
j=sqrt(-1);
M=16;
d=1;
% 对应的星座图
mapping=[-3*d+j*3*d;
         -d+j*3*d;
         d+j*3*d;
         3*d+j*3*d;
         -3*d+j*d;
         -d+j*d;
         d+j*d;
         3*d+j*d;
         -3*d-j*d;
         -d-j*d;
         d-j*d;
         3*d-j*d;
         -3*d-j*3*d;
         -d-j*3*d;
         d-j*3*d;
         3*d-j*3*d];

switch flag,
    case 0
        [sys,x0,str,ts]=mdlInitializeSizes(L,BitRate);%初始化模块
    case 3
        sys=mdlOutputs(t,x,u,L,BitRate,M,mapping,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=2*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,mapping,sel_num)

%形成信道
delta=u(1:L*BitRate);%[(L*BitRate)*1]

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

%%%%%SNR-GSC rule%%%%%%%
%%%形成矩阵%%%
delta_matr1=reshape(delta,BitRate,L)';%(L*BitRate)
r1_matr2=reshape(r1,BitRate,L).';%(L*BitRate)

%根据SNR_GSC准则,选择对应分支的输出
[maxn num1]=sort(delta_matr1);%(L个支路的delta从小到大排列)
r1_select_matr=r1_matr2(num1+repmat(L*(0:BitRate-1),L,1));%对应分支按照delta的大小排列
delta_select_matr=delta_matr1(num1+repmat(L*(0:BitRate-1),L,1));%(L*BitRate)
%%%取后sel_num个求和%%%%%%
r1_select=sum(r1_select_matr((L-sel_num+1:L),:));%(1*BitRate)
delta_select=sum(delta_select_matr((L-sel_num+1:L),:));%(1*BitRate)
%%%判决
for i=1:M
    metrics(i,:)=(abs(r1_select-delta_select*mapping(i))).^2;%distance(1*BitRate)
end
[min_metrics num2]=min(metrics);%select the smallest

decei_symbol=mapping(num2);%(BitRate*1)
real_decei_symbol=real(decei_symbol);%实部
imag_decei_symbol=imag(decei_symbol);%虚部

sys=[real_decei_symbol;imag_decei_symbol];%((2*BitRate)*1)

⌨️ 快捷键说明

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