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

📄 bicustm.m

📁 一种比特交织编码调制
💻 M
字号:
clear;clc;tic;datestr(now)
%% Initialization
SNRindB_Min=14;SNRindB_Max=14;SNRindB=SNRindB_Min:2:SNRindB_Max;
T=2;M=1;N=2;R=3/2;L=2^(T*R);
rate=2/3;state=[0 0];g=[1 1 1;1 0 1];K=length(g)-1;
%Frame=12;Iterative=4;LN=Frame*Iterative;%Iterative
Frame=1e3;Iterative=1;LN=Frame*Iterative;%Iterative
Iteration=1;
% Constellation
[S_c,Fai]=Cons_Gen_T2L8(T,M,R);

%% Main
for n=1:length(SNRindB)
    en(n)=10^(SNRindB(n)/10);
    sgma(n)=1/sqrt(2*rate*en(n));
    for iter=1:Iterative
        Source_Bits=randint(1,Frame-2);% Source Bits Generating
        %Source_Bits=[1 0 1 0 1 0 0 1 1 1];
        [temp1,alpha1]=sort(rand(1,Frame/2));% for Interleaving
        [temp2,alpha2]=sort(rand(1,Frame/2));
        [temp3,alpha3]=sort(rand(1,Frame/2));
        %alpha1=[6     3     5     1     2     4];
        %alpha2=[5     1     2     3     4     6];
        %alpha3=[4     5     2     3     6     1];
        %*****************Encoding*****************%
        % Coding
        for i_c=1:Frame-2
            [Check_bit(i_c),state]=BICUSTM_rsc(g,Source_Bits(i_c),state);            
        end;% i_c
        % Tail Bitting
        for i_c=Frame-1:Frame
            Source_Bits(i_c)=rem(sum(state),2);
            [Check_bit(i_c),state]=BICUSTM_rsc(g,Source_Bits(i_c),state);
        end;% i_c
        % Puncturing
        for i_p=1:Frame/2
            Source_Bits1(i_p)=Source_Bits((i_p-1)*2+1);
            Source_Bits2(i_p)=Source_Bits((i_p-1)*2+2);
            Check_bit_in_Signal(i_p)=Check_bit((i_p-1)*2+1);
        end;%i_p
        % Interleaving and Combination
        for i_i=1:Frame/2
            Bit1_inted(i_i)=Source_Bits1(alpha1(i_i));
            Bit2_inted(i_i)=Source_Bits2(alpha2(i_i));
            Bit3_inted(i_i)=Check_bit_in_Signal(alpha3(i_i));
            Bit_to_be_Modulated((i_i-1)*3+1)=Bit1_inted(i_i);
            Bit_to_be_Modulated((i_i-1)*3+2)=Bit2_inted(i_i);
            Bit_to_be_Modulated((i_i-1)*3+3)=Bit3_inted(i_i);
        end;% i_i
        % Unitary Space-Time Modulation
        for i_m=1:Frame/2
            Idx_Signal(i_m)=Bin_to_Dec(Bit_to_be_Modulated((i_m-1)*3+1:(i_m-1)*3+3));
            Signal_Tr(:,:,i_m)=S_c(:,:,Idx_Signal(i_m)+1);
        end;% i_m
        % Transmition and Receiving
        for i_r=1:Frame/2
            % Fading Channel Parameters
            H=Rayleigh_channel(M,N);
            W=sqrt(1/2)*(randn(T,N)+j*randn(T,N));
            % Receiving
            X(:,:,i_r)=sqrt(1/M)*1/sgma(n)*Signal_Tr(:,:,i_r)*H+W;
        end;%i_r
        
        % Bit Metric Calculation
        %Lamda(1,1,1)=abs();
        for i_l=1:Frame/2
            for l=1:L
                F_norm(l)=real(trace(X(:,:,i_l)'*Fai(:,:,l)*Fai(:,:,l)'*X(:,:,i_l)));
            end;%l
            %Lamda(1,i_l)=max([real(y(i_l)*x(5)'),real(y(i_l)*x(6)'),real(y(i_l)*x(7)'),real(y(i_l)*x(8)')])-max([real(y(i_l)*x(1)'),real(y(i_l)*x(2)'),real(y(i_l)*x(3)'),real(y(i_l)*x(4)')]);
            Lamda(1,i_l)=max([F_norm(5),F_norm(6),F_norm(7),F_norm(8)])-max([F_norm(1),F_norm(2),F_norm(3),F_norm(4)]);
            %Lamda(2,i_l)=max([real(y(i_l)*x(3)'),real(y(i_l)*x(4)'),real(y(i_l)*x(7)'),real(y(i_l)*x(8)')])-max([real(y(i_l)*x(1)'),real(y(i_l)*x(2)'),real(y(i_l)*x(5)'),real(y(i_l)*x(6)')]);
            Lamda(2,i_l)=max([F_norm(3),F_norm(4),F_norm(7),F_norm(8)])-max([F_norm(1),F_norm(2),F_norm(5),F_norm(6)]);
            %Lamda(3,i_l)=max([real(y(i_l)*x(2)'),real(y(i_l)*x(4)'),real(y(i_l)*x(6)'),real(y(i_l)*x(8)')])-max([real(y(i_l)*x(1)'),real(y(i_l)*x(3)'),real(y(i_l)*x(5)'),real(y(i_l)*x(7)')]);
            Lamda(3,i_l)=max([F_norm(2),F_norm(4),F_norm(6),F_norm(8)])-max([F_norm(1),F_norm(3),F_norm(5),F_norm(7)]);
        end;% i_l
        % Deinterleaving
        for i_din=1:Frame/2
            Ld_din(1,alpha1(i_din))=Lamda(1,i_din);
            Ld_din(2,alpha2(i_din))=Lamda(2,i_din);
            Ld_din(3,alpha3(i_din))=Lamda(3,i_din);
        end;% i_din
        % Depuncturing
        for i_dpc=1:Frame/2
            L_s((i_dpc-1)*2+1)=Ld_din(1,i_dpc);
            L_s((i_dpc-1)*2+2)=Ld_din(2,i_dpc);
            L_p((i_dpc-1)*2+1)=Ld_din(3,i_dpc);
            L_p((i_dpc-1)*2+2)=0;
            LL((i_dpc-1)*4+1)=Ld_din(1,i_dpc);LL((i_dpc-1)*4+2)=Ld_din(3,i_dpc);LL((i_dpc-1)*4+3)=Ld_din(2,i_dpc);LL((i_dpc-1)*4+4)=0;
        end;%i_dpc
        % Decoding
        L_a=zeros(1,Frame);
        %Lamda_all=Turbo75Rate13_MAP(L_s,L_p,L_a,1);
        bits_ded=BICUSTM_VB_SP(LL,g,L_a);
        [bits_ded,est_p]=BICUSTM_VB_SandP(LL,g,L_a) ;
        
        bit_err(iter)=sum(bitxor(Source_Bits(1:Frame),bits_ded));% Errors in every frame
    end;% iter
    errsum(n)=sum(bit_err);
    pb(n)=errsum(n)/LN;
end;% n

%% Plotting
semilogy(SNRindB,pb,'o-');
xlabel('SNR(dB)','FontWeight', 'bold');ylabel('BER','FontWeight', 'bold');
grid on;
legend('BICUSTM,It01');
axis([0 30 10^-6 10^0]);

toc;

⌨️ 快捷键说明

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