📄 sc_turbopic_mimo.m
字号:
[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 + -