📄 sc_turbodd_pic.m
字号:
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
Antenna_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
Time_Begin = 0; % Initializing the time
% Phase = 2*pi*rand(1,2); % Initializing the phase
% Define pilot signal
Pilot_sequence=[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_matrix(m,:)=[Pilot_sequence(Pilot_length-m+2:Pilot_length) Pilot_sequence(1:Pilot_length-m+1)];
end
Gaurd_Pilot=[Pilot_sequence(Pilot_length-Gaurd_length+1:Pilot_length) Pilot_sequence];
Gaurd_Pilot1=[zeros(1,Gaurd_length) Pilot_sequence];
% 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=8;
Packet_number=Slot_number/Packet_Slot_number;
Packet_msg_L=Symbol_bitN*Code_Rate*SlotData_length*Packet_Slot_number-MemLen;
Packet_code_L=Symbol_bitN*SlotData_length*Packet_Slot_number;
Slot_code_L=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 Antenna_number=2.^(1:1); % Number of receive antennas
SNR1=7; SNR2=20;
Phase = 2*pi*rand(Antenna_number,2); % Initializing the phase
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).*PN;
Index_x=0;
for kk=1:Subslot_number
tmp=x(Index_x+(1:SubslotData_length));
tmp=[Gaurd_Pilot tmp];
s=[s tmp];
Index_x=Index_x+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
ss(p+1,:)=[zeros(1,p) s(1:Signal_length-p)];
end
for na=1:Antenna_number
CH_Data = MultiCHannel(Path_Gain,Fc,V,Tc,Signal_length,Time_Begin,Phase(na,:));
Sm(na,:)=sum(ss.*CH_Data);
end
Time_Begin = Time_Begin+Signal_length;
% Channel: Add Gauss noise
Rm=awgn(Sm,SNR);%,'measured');
Noise_variance=sum(sum(abs(Rm-Sm).^2))/length(Sm)/Antenna_number;
% Receiver
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -