freq_syn_timedomain.m

来自「OFDM的详细仿真代码」· M 代码 · 共 32 行

M
32
字号
function [synchronized, offset] = freq_syn_timedomain( recv_frame,WinStart, WinSize,Delay, T_sample, N_Rx_ant,TurnOn )

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%  利用时域延时相同的训练序列样点,进行载波频偏估计及补偿的算法

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

if TurnOn
    time_idx = [ 0:length(recv_frame)-1 ] ;
    
    for ant = 1:N_Rx_ant
        
        % 延时相关,取角度
        recv = recv_frame(1,WinStart : WinStart + WinSize - 1, ant);
        recv_delayed = recv_frame(1,WinStart + Delay : WinStart + WinSize + Delay - 1, ant);
        offset_metric = sum( recv .* conj( recv_delayed ) );
        offset(ant) = - angle(offset_metric)/(2*pi*Delay*T_sample);
        
        % 载波频偏粗估计纠正, 方法1, 在每条接收天线上进行纠正
        % synchronized(1,:,ant) = recv_frame(1,:,ant).*exp(-j*2*pi*offset(ant).*time_idx*T_sample);
        
    end
    
    % 载波频偏粗估计纠正, 方法2 , 合并一个频偏纠正值,在每条接收天线上进行纠正
    offset = sum(offset)/N_Rx_ant;
    time_idx = repmat(time_idx,[1,1,N_Rx_ant]);
    synchronized = recv_frame.*exp(-j*2*pi*offset.*time_idx*T_sample);  
    
else
    synchronized = recv_frame;
    offset = 0;
end

⌨️ 快捷键说明

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