📄 turbo_ic.m
字号:
function [x_intf,x_sigma,Add_x_mean, Add_x_var]=Turbo_IC(x_rake,Rou,Mask,Noise_variance,x_mean,x_variance,SubslotData_length,Path_number,Det_intl_table,nIter)
% Gray coded 16-QAM mapping vector
MapMatrix16QAM = [-1-j -1-3*j -1+j -1+3*j -3-j -3-3*j -3+j -3+3*j 1-j 1-3*j 1+j 1+3*j 3-j 3-3*j 3+j 3+3*j];
MapMatrix16QAM = MapMatrix16QAM/sqrt(10);
[M,N]=size(Mask); L=N/M;
Mask2=abs(Mask.^2);
variance=sum(vec2mat(sum(Mask2),M))+Rou*Noise_variance;
[Rou_sorted,Order]=sort((Rou.^2)./(variance+0.001));
Order=Order(end:-1:1);
% [Rou_sorted,Order]=sort(Rou);
% Order=Order(end:-1:1);
x_mean0=x_mean;
x_variance0=x_variance;
for t=1:nIter
for mm=1:M
m=Order(mm);
Mask_m=Mask(:,m:M:end);
Mask2_m=Mask2(:,m:M:end);
for n=1:SubslotData_length
% n=Det_intl_table(nn);
x_intf(m,n)=x_rake(m,n)-sum(sum(x_mean0(:,n+(0:L-1)).*Mask_m));
x_sigma(m,n)=abs(sum(sum(x_variance0(:,n+(0:L-1)).*Mask2_m))+Rou(m)*Noise_variance+0.001);
P =exp(-abs(x_intf(m,n)-Rou(m)*MapMatrix16QAM).^2/x_sigma(m,n))/abs(sum(exp(-abs(x_intf(m,n)-Rou(m)*MapMatrix16QAM).^2/x_sigma(m,n)))+0.001);
x_mean0(m,Path_number-1+n)=P*MapMatrix16QAM.';
x_variance0(m,Path_number-1+n)=P*abs(MapMatrix16QAM.^2)'-abs(x_mean0(m,Path_number-1+n))^2;
end
end
end
Add_x_mean = x_mean0(:,end-2*Path_number+3:end-Path_number+1);
Add_x_var = x_variance0(:,end-2*Path_number+3:end-Path_number+1);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -