rx_phase_tracker.m

来自「ofdm系统仿真」· M 代码 · 共 31 行

M
31
字号
%Phase tracker, returns phase error corrected symbols
function corrected_syms = rx_phase_tracker(freq_data_syms, freq_pilot_syms, channel_est, sys_parm)

    global ofdm_data_parm_var;
    
    ofdm_data_parm_var.Index = 0;
    
    if sys_parm.PilotPhaseTracking    
        
        correction_phases = zeros(size(freq_data_syms));
        
        %Estimate the phase change using the pilots
        for n = 1 : sys_parm.NumOFDMSymbols
            update_ofdm_data_parm_var;
            
            if ofdm_data_parm_var.HavePilot
                correction_phases(n, :) = angle(sum(freq_pilot_syms(n, ofdm_data_parm_var.PilotSubcIdx) ./ channel_est(ofdm_data_parm_var.PilotSubcIdx) ...
                    ./ ofdm_data_parm_var.PilotSymbol));
            else
                if n > 1
                    correction_phases(n, :) = correction_phases(n - 1, :);
                end
            end
        end
        
        %Correct symbol using the phase estimate of this one OFDM symbol
        corrected_syms = exp(- j * correction_phases) .* freq_data_syms;        
    else
        corrected_syms = freq_data_syms;
    end
end

⌨️ 快捷键说明

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