📄 soft_demap_siso_20.m
字号:
function dout = soft_demap_siso_20(din, Mode)
switch Mode
case 1
CBPS = 104;
case 2
CBPS = 104;
case 3
CBPS = 208;
case 4
CBPS = 208;
case 6
CBPS = 312;
case 7
CBPS = 312;
end
dout = zeros(1,CBPS);
re_din = real(din);
im_din = imag(din);
if Mode == 1 || Mode == 2
J=1;
for I=1:52
temp_leng0 = (re_din(I) + 0.707)^2;
temp_leng1 = (re_din(I) - 0.707)^2;
dout(J) = temp_leng0 - temp_leng1;
temp_leng0 = (im_din(I) + 0.707)^2;
temp_leng1 = (im_din(I) - 0.707)^2;
dout(J+1) = temp_leng0 - temp_leng1;
J = J+2;
end
elseif Mode == 3 || Mode == 4
J=1;
for I=1:52
J=1;
for I=1:52
if re_din(I) < -0.6325
i_const0 = [-0.949, -0.949];
i_const1 = [0.316, -0.316];
elseif -0.6325 <= re_din(I) && re_din(I) < 0
i_const0 = [-0.316, -0.949];
i_const1 = [0.316, -0.316];
elseif 0 <= re_din(I) && re_din(I) < 0.6325
i_const0 = [-0.316, 0.949];
i_const1 = [0.316, 0.316];
elseif 0.6325 <= re_din(I)
i_const0 = [-0.316, 0.949];
i_const1 = [0.949, 0.316];
end
if im_din(I) < -0.6325
q_const0 = [-0.949, -0.949];
q_const1 = [0.316, -0.316];
elseif -0.6325 <= im_din(I) && im_din(I) < 0
q_const0 = [-0.316, -0.949];
q_const1 = [0.316, -0.316];
elseif 0 <= im_din(I) && im_din(I) < 0.6325
q_const0 = [-0.316, 0.949];
q_const1 = [0.316, 0.316];
elseif 0.6325 <= im_din(I)
q_const0 = [-0.316, 0.949];
q_const1 = [0.949, 0.316];
end
dout((I-1)*4+1:(I-1)*4+2) = (re_din(I) - i_const0).^2 - (re_din(I) - i_const1).^2;
dout((I-1)*4+3:(I-1)*4+4) = (im_din(I) - q_const0).^2 - (im_din(I) - q_const1).^2;
end
end
elseif Mode == 6 || Mode == 7
for I=1:52
if re_din(I) < -0.925
i_const0 = [-1.078, -1.078, -1.078];
i_const1 = [0.154, -0.463, -0.772];
elseif -0.925 <= re_din(I) && re_din(I) < -0.6175
i_const0 = [-0.772, -0.772, -1.078];
i_const1 = [0.154, -0.463, -0.772];
elseif -0.6175 <= re_din(I) && re_din(I) < -0.3085
i_const0 = [-0.463, -0.772, -0.154];
i_const1 = [0.154, -0.463, -0.463];
elseif -0.3085 <= re_din(I) && re_din(I) < 0
i_const0 = [-0.154, -0.772, -0.154];
i_const1 = [0.154, -0.154, -0.463];
elseif 0 <= re_din(I) && re_din(I) < 0.3085
i_const0 = [-0.154, 0.772, 0.154];
i_const1 = [0.154, 0.154, 0.463];
elseif 0.3085 <= re_din(I) && re_din(I) < 0.6175
i_const0 = [-0.154, 0.772, 0.154];
i_const1 = [0.463, 0.463, 0.463];
elseif 0.6175 <= re_din(I) && re_din(I) < 0.925
i_const0 = [-0.154, 0.772, 1.078];
i_const1 = [0.772, 0.463, 0.772];
elseif 0.925 <= re_din(I)
i_const0 = [-0.154, 1.078, 1.078];
i_const1 = [1.078, 0.463, 0.772];
end
if im_din(I) < -0.925
q_const0 = [-1.078, -1.078, -1.078];
q_const1 = [0.154, -0.463, -0.772];
elseif -0.925 <= im_din(I) && im_din(I) < -0.6175
q_const0 = [-0.772, -0.772, -1.078];
q_const1 = [0.154, -0.463, -0.772];
elseif -0.6175 <= im_din(I) && im_din(I) < -0.3085
q_const0 = [-0.463, -0.772, -0.154];
q_const1 = [0.154, -0.463, -0.463];
elseif -0.3085 <= im_din(I) && im_din(I) < 0
q_const0 = [-0.154, -0.772, -0.154];
q_const1 = [0.154, -0.154, -0.463];
elseif 0 <= im_din(I) && im_din(I) < 0.3085
q_const0 = [-0.154, 0.772, 0.154];
q_const1 = [0.154, 0.154, 0.463];
elseif 0.3085 <= im_din(I) && im_din(I) < 0.6175
q_const0 = [-0.154, 0.772, 0.154];
q_const1 = [0.463, 0.463, 0.463];
elseif 0.6175 <= im_din(I) && im_din(I) < 0.925
q_const0 = [-0.154, 0.772, 1.078];
q_const1 = [0.772, 0.463, 0.772];
elseif 0.925 <= im_din(I)
q_const0 = [-0.154, 1.078, 1.078];
q_const1 = [1.078, 0.463, 0.772];
end
dout((I-1)*6+1:(I-1)*6+3) = (re_din(I) - i_const0).^2 - (re_din(I) - i_const1).^2;
dout((I-1)*6+4:(I-1)*6+6) = (im_din(I) - q_const0).^2 - (im_din(I) - q_const1).^2;
end
end
for I=1:CBPS
if abs(dout(I)) >= 0 && abs(dout(I)) < 0.2382
dout(I) = dout(I)/4;
elseif abs(dout(I)) >= 0.2382 && abs(dout(I)) < 0.6193
dout(I) = dout(I)/16;
elseif abs(dout(I)) >= 0.6193 && abs(dout(I)) < 1.1909
dout(I) = dout(I)/36;
elseif abs(dout(I)) >= 1.1909
dout(I) = dout(I)/64;
end
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -