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

📄 sc_turbopic_mimo.m

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

%   Define the slot structure
Spread_factor = 8;                                                          % Spread factor
Subslot_number = 4;  % 8 or 4                                               % Number of subslots
Symbol_number_subslot = 29; % 13 or 29                                      % 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 = 1;  
RxAntenna_number = 1;                                                       % Number of receive antennas
Path_number = 4;                                                            % Number of paths  
Path_Gain = [0.8084 0.462 0.253 0.259];                                     % 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
org_sequence = [1 j 1 -1 1 1 -1 -j 1 -j 1 1 1 -1 -1 j];
%org_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];
% 32 Points pilot

for n_Tx=0:TxAntenna_number-1
    Pilot_sequence(n_Tx+1,:) = [org_sequence(Pilot_length-n_Tx*Path_number+1:Pilot_length) org_sequence(1:Pilot_length-n_Tx*Path_number)];
end

for m=0:Path_number-1
    Pilot_matrix(m*TxAntenna_number+(1:TxAntenna_number),:) = [Pilot_sequence(:,Pilot_length-m+1:Pilot_length) Pilot_sequence(:,1:Pilot_length-m)];
end

Pilot_Energy_Factor = 1;
Gaurd_Pilot = [Pilot_sequence(:,Pilot_length-Gaurd_length+1:Pilot_length) Pilot_sequence]*sqrt(Pilot_Energy_Factor);
Pilot_matrix = Pilot_matrix/sqrt(Pilot_Energy_Factor);

% turbo code
poly_g1 = 7;			                                                % 1 0 1
poly_g2 = 5;			                                                % 1 1 1
MemLen = 2;
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);


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

nIterDD = 6;                                                            % Iterate times for detection

%msg_L=Symbol_bitN*SlotData_length/OutputN*InputN*Slot_number-InputN*tblen;    % Number of message bits
Slot_number = 64;
Packet_Slot_number = 0.5;
Packet_number = Slot_number/Packet_Slot_number;
Packet_msg_L = TxAntenna_number*Symbol_bitN*InputN/OutputN*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;
[Det_intl_table] = interleave(SubslotData_length, floor(sqrt((SubslotData_length)/2)))+1;

Poly_degree = 2;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%                     Main Loop                                     %%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
SNR1 =6; SNR2 = 11;
All_SNR = SNR1:0.5:SNR2;
% Bit error rate
ber=zeros(nIterDD,length(All_SNR));
format long

Phase = 2*pi*rand(1,2);
Time_Begin = 0;

for index_SNR=1:length(All_SNR)
    errors = zeros(1,nIterDD);
    for k=1:200                        % k is the index of Frame    
        SNR = All_SNR(index_SNR)
        k
        %%%%%%%%%%%%%%%%%%%%%
        %%%   Transmiter  %%%
        %%%%%%%%%%%%%%%%%%%%%
        % Transmiter: Generate transmitted bit stream
        msg = randint(Packet_number,Packet_msg_L,2);                          % Random data
        % msg=[msg zeros(Packet_number,3)];
        
        % 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:TxAntenna_number*SubslotData_length)),SubslotData_length)]; 
                s = [s tmp];
                Index_x = Index_x+TxAntenna_number*SubslotData_length;
            end
            s = [s Gaurd_Pilot];
        end
        
        % Channel
        Signal_length = Slot_number*Slot_length+Path_number-1;                                 % Length of baseband signal 
        
        % Channel: The transmitted signal passes through multipath channel 
        for p=0:Path_number-1
            ss(TxAntenna_number*p+(1:TxAntenna_number),:) = [zeros(TxAntenna_number,p) s zeros(TxAntenna_number,Path_number-1-p)];    
        end
        
        CH_Data = MultiPathRayC(Fc,V,Tc,Signal_length,Time_Begin,reshape(repmat(Path_Gain,TxAntenna_number,RxAntenna_number),1,Path_number*TxAntenna_number*RxAntenna_number),Phase); 
        
        Time_Begin = Time_Begin+Signal_length; 
        for na=0:RxAntenna_number-1
            Sm(na+1,:) = sum(ss.*CH_Data(na*Path_number*TxAntenna_number+(1:Path_number*TxAntenna_number),:));
        end
        
        % Channel: Add Gauss noise
        Rm = awgn(Sm,SNR+10*log10(Slot_code_L*Code_Rate/Slot_length/TxAntenna_number)+10*log10(TxAntenna_number));%,'measured'); % SNR=Eb/N0
        
        SNR_Es_N0 = 10*log10(sum(sum(abs(Sm).^2))/sum(sum(abs(Rm-Sm).^2)))
        Noise_variance = sum(sum(abs(Rm-Sm).^2))/length(Sm)/RxAntenna_number
        
        
        %%%%%%%%%%%%%%%%%%%%%
        %%%    Receiver   %%%
        %%%%%%%%%%%%%%%%%%%%%
        
        for sn=0:Slot_number-1
            R = Rm(:,sn*Slot_length+(1:Slot_length));
            
            %   Receiver: Channel estimation 
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
            Index_R = Gaurd_length; Fades = zeros(RxAntenna_number,TxAntenna_number*Path_number*(Subslot_number+1)); Index_Fades = 0;
            for kk=1:Subslot_number+1
                Tmp_RP = R(:,Index_R+(1:Pilot_length));
                Tmp_Fades = Tmp_RP*Pilot_matrix'/Pilot_length;
                First_EstFades(:,Index_Fades+(1:TxAntenna_number*Path_number)) = Tmp_Fades;
                Index_R = Index_R+Subslot_length;
                Index_Fades = Index_Fades+TxAntenna_number*Path_number;
            end
            
            for p=1:TxAntenna_number*Path_number
                tmp_Fades = First_EstFades(:,p:TxAntenna_number*Path_number:end);
                for na=1:RxAntenna_number
                    [Coefficients,Structure] = polyfit(0:Subslot_number,tmp_Fades(na,:),Poly_degree);
%                     [tmp_FadesP(na,:),delta] = polyval(Coefficients,0:0.5:Subslot_number,Structure);

⌨️ 快捷键说明

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