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

📄 stbc_decode44.asv

📁 stbc在2发2收
💻 ASV
📖 第 1 页 / 共 2 页
字号:
            for nnn = 1:16
                if mult_tempt(1,nnn) >= Max_add_value 
                    mult_tempt(1,nnn) = Max_add_value-1;
                    mult_flow_num = mult_flow_num+1;
                elseif mult_tempt(1,nnn) < -Max_add_value
                    mult_tempt(1,nnn) = -Max_add_value;
                    mult_flow_num = mult_flow_num+1;
                end
            end
            sum_tempt = fix((mult_tempt(1,1)+mult_tempt(1,2) +...
                mult_tempt(1,3)+mult_tempt(1,4)+...
                mult_tempt(1,5)+mult_tempt(1,6)+...
                mult_tempt(1,7)+mult_tempt(1,8)+...
                mult_tempt(1,9)+mult_tempt(1,10) +...
                mult_tempt(1,11)+mult_tempt(1,12)+...
                mult_tempt(1,13)+mult_tempt(1,14)+...
                mult_tempt(1,15)+mult_tempt(1,16))/st2/2^tempt_eff);
            decode_tempt_i(1,3) = decode_tempt_i(1,3)+sum_tempt;
           %***************************************************************************************
           %***************************************************************
           %***************
%             if r == Rx_num -1    % 因为是累加操作所以溢出一般是在最后一次加法操作中出现
%                 tempt_eff = scale_eff;
%                 for nnn = 1:3
%                     decode_tempt_r(1,nnn) = fix(decode_tempt_r(1,nnn)/2^tempt_eff);
%                     decode_tempt_i(1,nnn) = fix(decode_tempt_i(1,nnn)/2^tempt_eff);
%                 end
%             end
        end % r =  1:Rx_num 
        scale = 2^4;
        decode_tempt_r(1,1) = fix(decode_tempt_r(1,1)*max_rec_sig/Max_value)*scale;
        decode_tempt_r(1,2) = fix(decode_tempt_r(1,2)*max_rec_sig/Max_value)*scale;
        decode_tempt_r(1,3) = fix(decode_tempt_r(1,3)*max_rec_sig/Max_value)*scale;
        decode_tempt_i(1,1) = fix(decode_tempt_i(1,1)*max_rec_sig/Max_value)*scale;
        decode_tempt_i(1,2) = fix(decode_tempt_i(1,2)*max_rec_sig/Max_value)*scale;
        decode_tempt_i(1,3) = fix(decode_tempt_i(1,3)*max_rec_sig/Max_value)*scale;
        Max_value2 = 2^13;
        if decode_tempt_r(1,1) >= Max_value2 
            decode_tempt_r(1,1) = Max_value2-1;
            add_flow_num = add_flow_num+1;
        elseif decode_tempt_r(1,1) < -Max_value2
            decode_tempt_r(1,1) = -Max_value2;
            add_flow_num = add_flow_num+1;
        end
        if decode_tempt_i(1,1) >= Max_value2 
            decode_tempt_i(1,1) = Max_value2-1;
            add_flow_num = add_flow_num+1;
        elseif decode_tempt_i(1,1) < -Max_value2
            decode_tempt_i(1,1) = -Max_value2;
            add_flow_num = add_flow_num+1;
        end  
        if decode_tempt_i(1,2) >= Max_value2 
            decode_tempt_i(1,2) = Max_value2-1;
            add_flow_num = add_flow_num+1;
        elseif decode_tempt_i(1,2) < -Max_value2
            decode_tempt_i(1,2) = -Max_value2;
            add_flow_num = add_flow_num+1;
        end 
        if decode_tempt_r(1,2) >= Max_value2 
            decode_tempt_r(1,2) = Max_value2-1;
            add_flow_num = add_flow_num+1;
        elseif decode_tempt_r(1,2) < -Max_value2
            decode_tempt_r(1,2) = -Max_value2;
            add_flow_num = add_flow_num+1;
        end
        if decode_tempt_r(1,3) >= Max_value2 
            decode_tempt_r(1,3) = Max_value2-1;
            add_flow_num = add_flow_num+1;
        elseif decode_tempt_r(1,3) < -Max_value2
            decode_tempt_r(1,3) = -Max_value2;
            add_flow_num = add_flow_num+1;
        end  
        if decode_tempt_i(1,3) >= Max_value2 
            decode_tempt_i(1,3) = Max_value2-1;
            add_flow_num = add_flow_num+1;
        elseif decode_tempt_i(1,3) < -Max_value2
            decode_tempt_i(1,3) = -Max_value2;
            add_flow_num = add_flow_num+1;
        end  

        ch_sum = 0;
        for n1 = 1:Tx_num*Rx_num
            ch_sum = ch_sum + m(n1)*m(n1)';
        end
        ch_sum = fix(ch_sum*max_ch_est/2^(scale_eff-2)/Max_value);
        Max_value3 = 2^10;
        if ch_sum >= Max_value3
            ch_sum = Max_value3-1;
            add_flow_num = add_flow_num+1;
        elseif ch_sum < -Max_value3
            ch_sum = -Max_value3;
            add_flow_num = add_flow_num+1;
        end  
        scale = 3;
        if Mod_type == 6
            ratio = 127/138;   
        elseif Mod_type ==4
            ratio = 1;
        end
        decode_tempt_r(1,1) = fix(decode_tempt_r(1,1)/ch_sum*2^(Max_bit_num-scale)*ratio);
        decode_tempt_r(1,2) = fix(decode_tempt_r(1,2)/ch_sum*2^(Max_bit_num-scale)*ratio);
        decode_tempt_r(1,3) = fix(decode_tempt_r(1,3)/ch_sum*2^(Max_bit_num-scale)*ratio);
        decode_tempt_i(1,1) = fix(decode_tempt_i(1,1)/ch_sum*2^(Max_bit_num-scale)*ratio);
        decode_tempt_i(1,2) = fix(decode_tempt_i(1,2)/ch_sum*2^(Max_bit_num-scale)*ratio);
        decode_tempt_i(1,3) = fix(decode_tempt_i(1,3)/ch_sum*2^(Max_bit_num-scale)*ratio);
    
        %-------------------译码输出(8bits)---------------------------%
        if decode_tempt_r(1,1) >= Max_value 
            decode_tempt_r(1,1) = Max_value-1;
            add_flow_num = add_flow_num+1;
        elseif decode_tempt_r(1,1) < Min_value
            decode_tempt_r(1,1) = Min_value;
            add_flow_num = add_flow_num+1;
        end
        if decode_tempt_i(1,1) >= Max_value 
            decode_tempt_i(1,1) = Max_value-1;
            add_flow_num = add_flow_num+1;
        elseif decode_tempt_i(1,1) < Min_value
            decode_tempt_i(1,1) = Min_value;
            add_flow_num = add_flow_num+1;
        end  
        if decode_tempt_i(1,2) >= Max_value 
            decode_tempt_i(1,2) = Max_value-1;
            add_flow_num = add_flow_num+1;
        elseif decode_tempt_i(1,2) < Min_value
            decode_tempt_i(1,2) = Min_value;
            add_flow_num = add_flow_num+1;
        end 
        if decode_tempt_r(1,2) >= Max_value 
            decode_tempt_r(1,2) = Max_value-1;
            add_flow_num = add_flow_num+1;
        elseif decode_tempt_r(1,2) < Min_value
            decode_tempt_r(1,2) = Min_value;
            add_flow_num = add_flow_num+1;
        end
        if decode_tempt_r(1,3) >= Max_value 
            decode_tempt_r(1,3) = Max_value-1;
            add_flow_num = add_flow_num+1;
        elseif decode_tempt_r(1,3) < Min_value
            decode_tempt_r(1,3) = Min_value;
            add_flow_num = add_flow_num+1;
        end  
        if decode_tempt_i(1,3) >= Max_value 
            decode_tempt_i(1,3) = Max_value-1;
            add_flow_num = add_flow_num+1;
        elseif decode_tempt_i(1,3) < Min_value
            decode_tempt_i(1,3) = Min_value;
            add_flow_num = add_flow_num+1;
        end
                
        if Mod_type == 4
            star_index_length = 16;
            tempt_table = table16;
        elseif Mod_type == 6
            star_index_length = 64;
            tempt_table = table64;
        end
        for star_index = 1:star_index_length 
            star_r = fix(real(tempt_table(star_index)));
            star_i = fix(imag(tempt_table(star_index)));
            
            compare_tempt(1,1) = (decode_tempt_r(1,1)-star_r)^2+(decode_tempt_i(1,1)-star_i)^2;
            compare_tempt(2,1) = (decode_tempt_r(1,2)-star_r)^2+(decode_tempt_i(1,2)-star_i)^2;                
            compare_tempt(3,1) = (decode_tempt_r(1,3)-star_r)^2+(decode_tempt_i(1,3)-star_i)^2;

            if star_index==1
                compare_tempt(1,2) = compare_tempt(1,1);
                compare_tempt(2,2) = compare_tempt(2,1); 
                compare_tempt(3,2) = compare_tempt(3,1);
                result_index(1) = star_index;
                result_index(2) = star_index;
                result_index(3) = star_index;
            else
                if compare_tempt(1,1) < compare_tempt(1,2)
                    compare_tempt(1,2) = compare_tempt(1,1);
                    result_index(1) = star_index;
                end
                if compare_tempt(2,1) < compare_tempt(2,2)
                    compare_tempt(2,2) = compare_tempt(2,1);
                    result_index(2) = star_index;
                end
                if compare_tempt(3,1) < compare_tempt(3,2)
                    compare_tempt(3,2) = compare_tempt(3,1);
                    result_index(3) = star_index;
                end                       
            end % star_index==1
        end % star_index = 1:star_index_length
        decode_out(1,n) = tempt_table(result_index(1));
        decode_out(2,n) = tempt_table(result_index(2));
        decode_out(3,n) = tempt_table(result_index(3));
        demap_int(1,n) = result_index(1)-1;
        demap_int(2,n) = result_index(2)-1;
        demap_int(3,n) = result_index(3)-1;
    end  % n = 1:Ofdm_bits 

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -