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

📄 sc_turbopic_mimo.m

📁 B3g_phase2_C语言_Matlab程序及说明
💻 M
📖 第 1 页 / 共 2 页
字号:
                    [tmp_FadesP(na,:),delta] = polyval(Coefficients,0:1/3:Subslot_number,Structure);
                end
                
%                 Fades(:,p:TxAntenna_number*Path_number:length(Fades)) = tmp_FadesP(:,1:2:end);
%                 FadesI(:,p:TxAntenna_number*Path_number:length(Fades)-TxAntenna_number*Path_number) = tmp_FadesP(:,2:2:end);
              
                Fades(:,p:TxAntenna_number*Path_number:length(Fades)) = tmp_FadesP(:,1:3:end);
                Former_FadesI(:,p:TxAntenna_number*Path_number:length(Fades)-TxAntenna_number*Path_number) = tmp_FadesP(:,2:3:end);
                Latter_FadesI(:,p:TxAntenna_number*Path_number:length(Fades)-TxAntenna_number*Path_number) = tmp_FadesP(:,3:3:end);
            end
            
            New_Noise_Est(sn+1) = sum(sum(abs((First_EstFades-Fades).*(First_EstFades-Fades))))/8/(Subslot_number-Poly_degree)*Pilot_Energy_Factor;  % New Estimate of noise variance
            
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
            
            %    Receiver: Space_time combination
            Index_R = Pilot_length; Index_Fades = 0;
            for kk=0:Subslot_number-1
                
                %   Full Subslot
%                 %   Perfect CSI 
%                  Tmp_RP  = mean(CH_Data(:,sn*Slot_length+kk*Subslot_length+(1:Subslot_length)),2).';
%                  Tmp_Fades  = vec2mat(Tmp_RP,TxAntenna_number*Path_number);
%                %   LS Channel Estimation
%                Tmp_Fades = FadesI(:,Index_Fades+(1:TxAntenna_number*Path_number));

                %   Half Subslot
%                 %   Perfect CSI 
%                  Tmp_RP1 = mean(CH_Data(:,sn*Slot_length+kk*Subslot_length+(1:Subslot_length/2)),2).';
%                  Tmp_RP2 = mean(CH_Data(:,sn*Slot_length+kk*Subslot_length+(Subslot_length/2+1:Subslot_length)),2).';
%                  Tmp_Fades1 = vec2mat(Tmp_RP1,TxAntenna_number*Path_number);
%                  Tmp_Fades2 = vec2mat(Tmp_RP2,TxAntenna_number*Path_number);
                %   LS Channel Estimation
                Tmp_Fades1 = Former_FadesI(:,Index_Fades+(1:TxAntenna_number*Path_number));
                Tmp_Fades2 = Latter_FadesI(:,Index_Fades+(1:TxAntenna_number*Path_number));

                RM  = R(:,Index_R+(1:Subslot_length+Path_number));

%                 %   Full Subslot
%                 RMC(:,(sn*Subslot_number+kk)*Subslot_length+(1:Subslot_length))=vec_cyc_cov(RM,Tmp_Fades,TxAntenna_number); 
%                 h_half(:,(sn*Subslot_number+kk)*TxAntenna_number*Path_number+(1:TxAntenna_number*Path_number))  = vec_self_cov(Tmp_Fades,TxAntenna_number);
                
                %   Half Subslot
                RMC(:,(sn*Subslot_number+kk)*Subslot_length+(1:Subslot_length)) = New_vec_cyc_cov(RM,Tmp_Fades1,Tmp_Fades2,TxAntenna_number,Subslot_length); 
                h_half1(:,(sn*Subslot_number+kk)*TxAntenna_number*Path_number+(1:TxAntenna_number*Path_number)) = vec_self_cov(Tmp_Fades1,TxAntenna_number);
                h_half2(:,(sn*Subslot_number+kk)*TxAntenna_number*Path_number+(1:TxAntenna_number*Path_number)) = vec_self_cov(Tmp_Fades2,TxAntenna_number);
                
                Index_Fades = Index_Fades+TxAntenna_number*Path_number;
                Index_R = Index_R+Subslot_length;
            end % end of kk
        end  % end of sn
        
        New_Est_Var = mean(New_Noise_Est)
        Est_err = New_Est_Var-Noise_variance
        Ratio = New_Est_Var/Noise_variance
        
        %    Receiver: Turbo Detection/Decoding
        for n=0:nIterDD-1            
            for sn=0:Slot_number-1 
                for kk=0:Subslot_number-1
                    
                    Tmp_RMC = RMC(:,(sn*Subslot_number+kk)*Subslot_length+(1:Subslot_length));
                    x_rake  = Tmp_RMC(:,Gaurd_length+(1:SubslotData_length));
                    
%                     %   Full Subslot
%                     Tmp_h_half  = h_half(:,(sn*Subslot_number+kk)*TxAntenna_number*Path_number+(1:TxAntenna_number*Path_number));
%                     [Rou,Mask]   = Rou_Mask(Tmp_h_half,TxAntenna_number);

                    %   Half Subslot
                    Tmp_h_half1 = h_half1(:,(sn*Subslot_number+kk)*TxAntenna_number*Path_number+(1:TxAntenna_number*Path_number));
                    Tmp_h_half2 = h_half2(:,(sn*Subslot_number+kk)*TxAntenna_number*Path_number+(1:TxAntenna_number*Path_number));
                    [Rou1,Mask1] = Rou_Mask(Tmp_h_half1,TxAntenna_number);
                    [Rou2,Mask2] = Rou_Mask(Tmp_h_half2,TxAntenna_number);
                                                                               
                    if n==0 % First Iteration
                         
                        x_mean = [Gaurd_Pilot(:,Pilot_length+(Gaurd_length-Path_number+2:Gaurd_length)) zeros(TxAntenna_number,SubslotData_length) Gaurd_Pilot(:,1:Pilot_length)];
                        x_variance = [zeros(TxAntenna_number,Path_number-1) ones(TxAntenna_number,SubslotData_length) zeros(TxAntenna_number,Pilot_length)];

%                         %   Full Subslot
%                         [Tmp_R_EQ, x_sigma] = Turbo_IC(x_rake,Rou',Mask,Noise_variance,x_mean,x_variance,SubslotData_length,Path_number,Det_intl_table,6);
%                         for nTx=1:TxAntenna_number
%                             LLR_D((nTx-1)*SubslotData_length*4+(1:SubslotData_length*4)) = Soft_Demod(Tmp_R_EQ(nTx,:),Rou(nTx),x_sigma(nTx,:),zeros(4,SubslotData_length), SubslotData_length);
%                         end
                        
                        %   Half Subslot
                        [Tmp_R_EQ, x_sigma] = New_Turbo_IC(x_rake,Rou1',Mask1,Rou2',Mask2,Noise_variance,x_mean,x_variance,SubslotData_length,Path_number,Det_intl_table,3);
                        Tmp_R_EQ1 = Tmp_R_EQ(:,1:SubslotData_length/2);
                        Tmp_R_EQ2 = Tmp_R_EQ(:,SubslotData_length/2+1:SubslotData_length);
                        x_sigma1 = x_sigma(:,1:SubslotData_length/2);
                        x_sigma2 = x_sigma(:,SubslotData_length/2+1:SubslotData_length);
                        
                        LLR_D = [];
                        for nTx=1:TxAntenna_number
                            temp = Soft_Demod(Tmp_R_EQ1(nTx,:),Rou1(nTx),x_sigma1(nTx,:),zeros(4,SubslotData_length/2), SubslotData_length/2);
                            LLR_D = [LLR_D temp];
                            temp = Soft_Demod(Tmp_R_EQ2(nTx,:),Rou2(nTx),x_sigma2(nTx,:),zeros(4,SubslotData_length/2), SubslotData_length/2);
                            LLR_D = [LLR_D temp];
                        end
                        
                    else
                        LLR_P = reshape(LLR_DI((sn*Subslot_number+kk)*SubslotData_length*4*TxAntenna_number+(1:SubslotData_length*4*TxAntenna_number)),4,TxAntenna_number*SubslotData_length); 
                        
                        for nTx=1:TxAntenna_number
                            [x_mean0(nTx,:), x_variance0(nTx,:)] = Mean_Var(LLR_P(:,(nTx-1)*SubslotData_length+(1:SubslotData_length)));
                        end
                        x_mean = [Gaurd_Pilot(:,Pilot_length+(Gaurd_length-Path_number+2:Gaurd_length)) x_mean0 Gaurd_Pilot(:,1:Pilot_length)];
                        x_variance = [zeros(TxAntenna_number,Path_number-1) x_variance0 zeros(TxAntenna_number,Pilot_length)];
                        
%                         %   Full Subslot
%                         [Tmp_R_EQ, x_sigma] = Turbo_ICC(x_rake,Rou,Mask,Noise_variance,x_mean,x_variance,SubslotData_length,Path_number);
%                         for nTx=1:TxAntenna_number
%                             LLR_D((nTx-1)*SubslotData_length*4+(1:SubslotData_length*4)) = Soft_Demod(Tmp_R_EQ(nTx,:),Rou(nTx),x_sigma(nTx,:),LLR_P(:,(nTx-1)*SubslotData_length+(1:SubslotData_length)), SubslotData_length);
%                         end
                        
                        %  Half Subslot
                        [Tmp_R_EQ, x_sigma] = New_Turbo_ICC(x_rake,Rou1,Mask1,Rou2,Mask2,Noise_variance,x_mean,x_variance,SubslotData_length,Path_number);
                        Tmp_R_EQ1 = Tmp_R_EQ(:,1:SubslotData_length/2);
                        Tmp_R_EQ2 = Tmp_R_EQ(:,SubslotData_length/2+1:SubslotData_length);
                        x_sigma1 = x_sigma(:,1:SubslotData_length);
                        x_sigma2 = x_sigma(:,SubslotData_length/2+1:SubslotData_length);
                        
                        LLR_D = [];
                        for nTx=1:TxAntenna_number
                            temp = Soft_Demod(Tmp_R_EQ1(nTx,:),Rou1(nTx),x_sigma1(nTx,:),LLR_P(:,(nTx-1)*SubslotData_length+(1:SubslotData_length/2)), SubslotData_length/2);
                            LLR_D = [LLR_D temp];
                            temp = Soft_Demod(Tmp_R_EQ2(nTx,:),Rou2(nTx),x_sigma2(nTx,:),LLR_P(:,(nTx-1)*SubslotData_length+(SubslotData_length/2+1:SubslotData_length)), SubslotData_length/2);
                            LLR_D = [LLR_D temp];
                        end
                        
                    end %   End of if
                    
                   [Dem_signal((sn*Subslot_number+kk)*SubslotData_length*4*TxAntenna_number+(1:SubslotData_length*4*TxAntenna_number))] = LLR_D;

                end
            end
            
            Dem_signal(Outer_intl_table) = Dem_signal;
            Dem_signal_p = vec2mat(Dem_signal,Packet_number)';
            
            for np=1:Packet_number
                [decoded, LLR_all(np,:)] = TuDecLogMapNew(Dem_signal_p(np,:), puncture, nIter, Inner_intl_table, 1, 1, poly_g1, poly_g2);
                errors(n+1) = errors(n+1)+sum(abs(decoded(1:Packet_msg_L)-msg(np,1:Packet_msg_L)));
            end
            
            LLR_DI = reshape(LLR_all,1,Packet_code_L*Packet_number);
            LLR_DI = LLR_DI(Outer_intl_table);
        end 
        
        errors
        ber(:,index_SNR) = errors'/k/Packet_msg_L/Packet_number
        
        if (errors(nIterDD)>300 & k>=2) 
            break;
        end
    end
    
    if ber(nIterDD,index_SNR)<1.0*10^(-6)
        break;
    end
    
end 

% save ber_16QAM200v_1 ber
% semilogy(All_SNR,ber(:,1:length(All_SNR))')
% grid
% xlabel('SNR of Received Signal(in dB)')
% ylabel('Bit Error Rate')
% pause(0.2)
% save ber_16QAM200v_1 ber

⌨️ 快捷键说明

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