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

📄 sc_turbodd_2txr.m

📁 B3g_phase2_C语言_Matlab程序及说明
💻 M
📖 第 1 页 / 共 2 页
字号:
clear

% Define the slot structure
Spread_factor=8;                                                          % Spread factor
Subslot_number=8;                                                         % Number of subslots
Symbol_number_subslot=13;                                                 % Symbol number in a subslot
Symbol_number_slot=Subslot_number*Symbol_number_subslot;                  % Symbol number in a slot
Pilot_length=16;                                                          % Length of pilot signal in chips
Gaurd_length=8;                                                           % Length of gaurd time in chips
GaurdPilot_length=Gaurd_length+Pilot_length;                              % Total length of gaurd time and pilot signal in chips
SubslotData_length=Symbol_number_subslot*Spread_factor;                   % Length of data in a subslot in chips
Subslot_length=SubslotData_length+GaurdPilot_length;                      % Length of a subslot in chips
SlotData_length=Subslot_number*SubslotData_length;                        % Length of data in a slot in chips
Slot_length=Subslot_number*Subslot_length+GaurdPilot_length;              % Length of a slot in chips 

%Define the channel
TxAntenna_number=2;  
RxAntenna_number=4;                                                       % Number of receive antennas
Path_number=8;                                                            % Number of paths  
% Path_Gain=[0.8084 0.462 0.253 0.259 0.0447 0.01 0 0];                     % Profile of channel model
% delay=[0 18 36  54 72  90]*2;                                           % Delays of paths

% Delay_spread=10;                                                           % in us
Path_Gain=exp(-(0:1/(Path_number-1):1)*3*log(10));
Path_Gain=Path_Gain/sqrt(Path_Gain*Path_Gain');
% delay=round((0:1/(Path_number-1):1)*Delay_spread*1.28);

Fc = 3.2e9;                                                               % Carrier frequency 
V =100;                                                                   % moving speed in km/h
Tc = 1/1.28e6;                                                            % Chip width 

% Define pilot signal
Pilot_sequence1=[1 j 1 -1 1 1 -1 -j 1 -j 1 1 1 -1 -1 j];
Pilot_sequence2=[1 -j 1 1 1 -1 -1 j 1 j 1 -1 1 1 -1 -j ];

%Pilot_sequence=[ 1  1  1 1  (1-j)/sqrt(2) -1  (1+j)/sqrt(2) -j...
%                 j -1 -j 1  (1+j)/sqrt(2)  1  (1-j)/sqrt(2) -j...
%                -1  1 -1 1 (-1+j)/sqrt(2) -1 (-1-j)/sqrt(2) -j...
%                -j -1  j 1 (-1-j)/sqrt(2)  1 (-1+j)/sqrt(2) -j];

for m=1:Path_number
    Pilot_matrix1(m,:)=[Pilot_sequence1(Pilot_length-m+2:Pilot_length) Pilot_sequence1(1:Pilot_length-m+1)];
    Pilot_matrix2(m,:)=[Pilot_sequence2(Pilot_length-m+2:Pilot_length) Pilot_sequence2(1:Pilot_length-m+1)];
end
Pilot_matrix=[Pilot_matrix1;Pilot_matrix2];

Gaurd_Pilot1=[Pilot_sequence1(Pilot_length-Gaurd_length+1:Pilot_length) Pilot_sequence1];
Gaurd_Pilot2=[Pilot_sequence2(Pilot_length-Gaurd_length+1:Pilot_length) Pilot_sequence2];
Gaurd_Pilot=[Gaurd_Pilot1;Gaurd_Pilot2];

% turbo code
poly_g1 = 11;			                                                % 1 0 1 1
poly_g2 = 13;			                                                % 1 1 0 1
MemLen = 3;
puncture = 0;		                                                	% puncture = 0,rate=1/2;puncture = 1,no puncture rate =1/3
nIter = 7;
CodeRate = 1/(2+puncture);

%trel=poly2trellis(9,[561 753]); 
%tblen=40;

InputN=1; OutputN=2;
Code_Rate=InputN/OutputN;
Symbol_bitN=4;                                                           % 2 for QPSK and 4 for 16QAM

nIterDD=4;

%msg_L=Symbol_bitN*SlotData_length/OutputN*InputN*Slot_number-InputN*tblen;    % Number of message bits
Slot_number=64;
Packet_Slot_number=4;
Packet_number=Slot_number/Packet_Slot_number;
Packet_msg_L=TxAntenna_number*Symbol_bitN*Code_Rate*SlotData_length*Packet_Slot_number-MemLen;               
Packet_code_L=TxAntenna_number*Symbol_bitN*SlotData_length*Packet_Slot_number;
Slot_code_L=TxAntenna_number*Symbol_bitN*SlotData_length;

[Inner_intl_table] = interleave(Packet_msg_L+MemLen, floor(sqrt((Packet_msg_L+MemLen)/2)));
[Outer_intl_table] = interleave(Packet_code_L*Packet_number,floor(sqrt((Packet_code_L*Packet_number)/2)))+1;

% Initialize the scrambler 
PN_RegStateI = [zeros(1,14) 1];  
PN_RegStateQ = [zeros(1,14) 1];  
PN_PolynI = [0 1 0 0 0 1 1 1 0 1 0 0 0 0 1];  
PN_PolynQ = [0 0 1 1 1 0 0 0 1 1 1 1 0 0 1];
  
[PN,PN_RegStateI,PN_RegStateQ]=Complex_PNGen(PN_PolynI,PN_PolynQ,PN_RegStateI,PN_RegStateQ,SlotData_length);
  
% Bit error rate
ber=zeros(nIterDD,5);
format long

% Main loop

for RxAntenna_number=2.^(1:1);                                                    % Number of receive antennas
    
    SNR1=10; SNR2=20;
    %     Phase1 = 2*pi*randn(RxAntenna_number,2);                                  % Initializing the phase
    %     Phase2 = 2*pi*randn(RxAntenna_number,2);                                  % Initializing the phase
    %     Time_Begin1=round(10000*randn(1,RxAntenna_number));
    %     Time_Begin2=round(10000*randn(1,RxAntenna_number));        
    Phase=2*pi*rand(1,2);
    Time_Begin=0;
    
    for SNR=SNR1:SNR2
        
        errors=zeros(1,nIterDD);
        
        for k=1:2000      
            SNR
            k
            % Transmiter
            % Transmiter: Generate transmitted bit stream
            msg=randint(Packet_number,Packet_msg_L,2);                          % Random data
            
            % Transmiter:Turbo encode and interleave
            
            for np=1:Packet_number 
                code_p(np,:) = TuEnc(msg(np,:), puncture, Inner_intl_table, poly_g1, poly_g2);
            end
            code=reshape(code_p,1,Packet_code_L*Packet_number);
            code=code(Outer_intl_table);
            
            % Transmiter:Generate single-carrier baseband signals 
            
            s=[]; 
            for sn=0:Slot_number-1
                
                [x] = Modulation(code(sn*Slot_code_L+(1:Slot_code_L)), 4);
                Index_x=0;                                                                               
                for kk=1:Subslot_number
                    tmp=[Gaurd_Pilot vec2mat(x(Index_x+(1:2*SubslotData_length)),SubslotData_length)]; 
                    s=[s tmp];
                    Index_x=Index_x+2*SubslotData_length;
                end
                s=[s Gaurd_Pilot];
            end
            
            % Channel
            Signal_length=Slot_number*Slot_length;                                 % Length of baseband signal 
            
            % Channel: The transmitted signal passes through multipath channel 
            for p=0:Path_number-1
                s1(p+1,:)=[zeros(1,p) s(1,1:Signal_length-p)];    
                s2(p+1,:)=[zeros(1,p) s(2,1:Signal_length-p)];    
            end
            
            CH_Data = MultiPathRayC(Fc,V,Tc,Signal_length,Time_Begin,repmat(Path_Gain,1,RxAntenna_number*2),Phase); 
            Time_Begin = Time_Begin+Signal_length; 
            for na=0:RxAntenna_number-1
                Sm(na+1,:)=sum([s1;s2].*CH_Data(na*Path_number*2+(1:Path_number*2),:));
            end
            
%             for na=1:RxAntenna_number
%                 %                 CH_Data1 = MultiCHannel(Path_Gain,Fc,V,Tc,Signal_length,Time_Begin,Phase1(na,:));
%                 %                 CH_Data2 = MultiCHannel(Path_Gain,Fc,V,Tc,Signal_length,Time_Begin,Phase2(na,:));
%               
%                 CH_Data2 = MultiPathRayC(Fc,V,Tc,Signal_length,Time_Begin2(na),Path_Gain,Phase2(na,:));
%                 Sm(na,:)=sum(s1.*CH_Data1)+sum(s2.*CH_Data2);                                         
%             end 
%                Time_Begin1 = Time_Begin1+Signal_length; 
%                Time_Begin2 = Time_Begin2+Signal_length; 
           
            % Channel: Add Gauss noise
            Rm=awgn(Sm,SNR+10*log10(Slot_code_L*Code_Rate/Slot_length/TxAntenna_number));%+3,'measured'); % SNR=Eb/N0

⌨️ 快捷键说明

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