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

📄 mimo_sim.m

📁 用Matlab仿真turbocode的算法
💻 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 + -