📄 mimo_sim.m
字号:
function [BER_total,CIR]=mimo_sim(Iter,name)N_channel=3;SNR=[55:5:65];n=1000;blocks_min=1;blocks_max=1;BER_total=[];g_rsc1=[1 1 1;1 0 1];g_rsc2=[1 1 1;1 0 1];g_rsc3=[1 1 1;1 0 1];mem1=size(g_rsc1,2)-1;[st_t1_1,out_t1_1,ST1_1]=rsc_table(g_rsc1); [st_t1_2,out_t1_2,ST1_2]=rsc_table(g_rsc2); [st_t1_3,out_t1_3,ST1_3]=rsc_table(g_rsc3); m1=size(st_t1_1,1);g_isi_11=[1 1 0 0 0 0 0;0.0111 0.1353 0.6065 1.0000 0.6065 0.1353 0.0111];g_isi_12=[1 0 0 0 0 0 0;0.0056 0.0676 0.3030 0.4996 0.3030 0.0676 0.0056];%g_isi_12(2,:)=0.90*g_isi_12(2,:);g_isi_13=[1 0 0 0 0 0 0;0.0007 0.0084 0.0378 0.0623 0.0378 0.0084 0.0007];mem2=size(g_isi_11,2)-1;%g_isi_11=[1 1 0 0 0;0.509094 0.963756 0.717420 0.260177 0.045053];%g_isi_12=[1 0 0 0 0;0.254334 0.481505 0.358395 0.130001 0.022547];%g_isi_13=[1 0 0 0 0;0.031700 0.060067 0.044693 0.016196 0.002805];[st_t2_11,out_t2_11,ST2_11]=isi_table(g_isi_11);[st_t2_12,out_t2_12,ST2_12]=isi_table(g_isi_12);[st_t2_13,out_t2_13,ST2_13]=isi_table(g_isi_13); m2=size(st_t2_11,1);rep_11=ST2_11(2,:);power_11=sum((abs(g_isi_11(2,:))).^2);power_12=sum((abs(g_isi_12(2,:))).^2);power_13=sum((abs(g_isi_13(2,:))).^2);CIR=power_11/(power_12+power_13)ST2_11(2,:)=1:length(ST2_11); [interleaving,dummy]=make_interleaver(2*(n+mem1),'ttcmrandom');for ind=1:length(SNR) EbN0=SNR(ind); EsN0=EbN0+10*log10(1/2); errors_1=zeros(Iter+1,1); errors_2=zeros(Iter+1,1); errors_3=zeros(Iter+1,1); errors_total=zeros(Iter+1,1); again=0; while(again<blocks_min)|((min(errors_total)<10000)&(again<blocks_max)) again=again+1; info=round(rand(N_channel,n)); %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%outer encoding%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%output1_bin=zeros(N_channel,2*(n+mem1));[output1_bin(1,:),state1_int_1]=rsc_encoding(g_rsc1,st_t1_1,out_t1_1,info(1,:));[output1_bin(2,:),state1_int_2]=rsc_encoding(g_rsc2,st_t1_2,out_t1_2,info(2,:));[output1_bin(3,:),state1_int_3]=rsc_encoding(g_rsc3,st_t1_3,out_t1_3,info(3,:));%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%interleaving%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%output1_bin=output1_bin(:,interleaving);%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%inner encoding%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%[output2_int_11,dummy]=isi_encoding(g_isi_11,st_t2_11,out_t2_11,output1_bin(1,:));[output2_int_12,dummy]=isi_encoding(g_isi_12,st_t2_12,out_t2_12,output1_bin(2,:));[output2_int_13,dummy]=isi_encoding(g_isi_13,st_t2_13,out_t2_13,output1_bin(3,:));[output2_int_21,dummy]=isi_encoding(g_isi_12,st_t2_12,out_t2_12,output1_bin(1,:));[output2_int_22,dummy]=isi_encoding(g_isi_11,st_t2_11,out_t2_11,output1_bin(2,:));[output2_int_23,dummy]=isi_encoding(g_isi_12,st_t2_12,out_t2_12,output1_bin(3,:));[output2_int_31,dummy]=isi_encoding(g_isi_13,st_t2_13,out_t2_13,output1_bin(1,:));[output2_int_32,dummy]=isi_encoding(g_isi_12,st_t2_12,out_t2_12,output1_bin(2,:));[output2_int_33,dummy]=isi_encoding(g_isi_11,st_t2_11,out_t2_11,output1_bin(3,:));%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% to generate received signals %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% sigmaq=1/(2*10^(EsN0/10)); sigma=sqrt(sigmaq); Noise=sigma*randn(N_channel,size(output2_int_11,2)); signal_1=(output2_int_11+output2_int_12+output2_int_13)+Noise(1,:)*sqrt(power_11); signal_2=(output2_int_21+output2_int_22+output2_int_23)+Noise(2,:)*sqrt(power_11); signal_3=(output2_int_31+output2_int_32+output2_int_33)+Noise(3,:)*sqrt(power_11); signal_1_fb=zeros(size(signal_1)); signal_2_fb=signal_1_fb; signal_3_fb=signal_1_fb; L_transprob_1=zeros(length(rep_11),length(signal_1)); L_transprob_2=L_transprob_1; L_transprob_3=L_transprob_1; La_eq_1=-log(2)*ones(2,2*(n+mem1)+mem2);; La_eq_2=La_eq_1; La_eq_3=La_eq_1; ext_de_1=zeros(2,2*(n+mem1)); ext_de_2=ext_de_1; ext_de_3=ext_de_1; for i=0:Iter signal_11=signal_1-signal_1_fb; signal_22=signal_2-signal_2_fb; signal_33=signal_3-signal_3_fb; for symbol=1:length(rep_11) L_transprob_1(symbol,:)=-(1/(2*sigmaq))*(abs(signal_11-rep_11(symbol))).^2; L_transprob_2(symbol,:)=-(1/(2*sigmaq))*(abs(signal_22-rep_11(symbol))).^2; L_transprob_3(symbol,:)=-(1/(2*sigmaq))*(abs(signal_33-rep_11(symbol))).^2; end [hard_1,ext_de_1]=sccc_decoding(La_eq_1,L_transprob_1,n,mem1,mem2,ST1_1,ST2_11,interleaving); La_eq_1=[ext_de_1, -log(2)*ones(size(ext_de_1,1),mem2)]; [hard_2,ext_de_2]=sccc_decoding(La_eq_2,L_transprob_2,n,mem1,mem2,ST1_1,ST2_11,interleaving); La_eq_2=[ext_de_2, -log(2)*ones(size(ext_de_2,1),mem2)]; [hard_3,ext_de_3]=sccc_decoding(La_eq_3,L_transprob_3,n,mem1,mem2,ST1_1,ST2_11,interleaving); La_eq_3=[ext_de_3, -log(2)*ones(size(ext_de_3,1),mem2)]; errors_1(i+1)=errors_1(i+1)+length(find(hard_1~=info(1,:))); errors_2(i+1)=errors_2(i+1)+length(find(hard_2~=info(2,:))); errors_3(i+1)=errors_3(i+1)+length(find(hard_3~=info(3,:))); %errors_total=errors_1+errors_2+errors_3; %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %feedback %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% [output1_bin_fb1,dummy]=rsc_encoding(g_rsc1,st_t1_1,out_t1_1,hard_1); [output1_bin_fb2,dummy]=rsc_encoding(g_rsc2,st_t1_1,out_t1_1,hard_2); [output1_bin_fb3,dummy]=rsc_encoding(g_rsc3,st_t1_1,out_t1_1,hard_3); output1_bin_fb1=output1_bin_fb1(interleaving); output1_bin_fb2=output1_bin_fb2(interleaving); output1_bin_fb3=output1_bin_fb3(interleaving); [output2_int_fb12,dummy]=isi_encoding(g_isi_12,st_t2_12,out_t2_12,output1_bin_fb2); [output2_int_fb13,dummy]=isi_encoding(g_isi_13,st_t2_13,out_t2_13,output1_bin_fb3); [output2_int_fb21,dummy]=isi_encoding(g_isi_12,st_t2_12,out_t2_12,output1_bin_fb1); [output2_int_fb23,dummy]=isi_encoding(g_isi_12,st_t2_12,out_t2_12,output1_bin_fb3); [output2_int_fb31,dummy]=isi_encoding(g_isi_13,st_t2_13,out_t2_13,output1_bin_fb1); [output2_int_fb32,dummy]=isi_encoding(g_isi_12,st_t2_12,out_t2_12,output1_bin_fb2); signal_1_fb=(output2_int_fb12+output2_int_fb13); signal_2_fb=(output2_int_fb21+output2_int_fb23); signal_3_fb=(output2_int_fb31+output2_int_fb32); end %end of iterationserrors_total=errors_1+errors_2+errors_3; fprintf('Eb/N0: %f dB \t errors_total: %d \t block #: %d \t \n',... EbN0,errors_total(Iter+1),again);end%end of blocksBER_total=[BER_total,[EbN0;errors_total/(N_channel*n*again)]];save (name,'BER_total','CIR');end%end of SNRs
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -