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