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

📄 soft_demap_siso_20.m

📁 A SISO 20M OFDM system based on IEEE802.11n standard, using Matlab.
💻 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 + -