rx_frequency_sync.m

来自「MATLAB Simulation of OFDM System」· M 代码 · 共 46 行

M
46
字号
% Frequency error estimation and correction
function [out_signal, freq_est] = rx_frequency_sync(rxsignal, sim_options)

global sim_consts;

[n_tx_antennas, n_rx_antennas] = get_n_antennas(sim_options);

if sim_options.FreqSync
   
   pkt_det_offset = 30;  %允许错误的分组检测,从检测到的分组开始后再推迟30个样值。
   
   % 取平均的长度,注意短训练符号长16×10=160。由46页的分析可知,可以估算的最大频率误差为625kHz。
   rlen = 128;
   
   %两个重复符合的相同取样之间的延时,这里即短训练符合的周期。
   D = 16;
   %46页(2.30)式。
   phase = rxsignal(:,pkt_det_offset:pkt_det_offset+rlen-D).* ...
      conj(rxsignal(:,pkt_det_offset+D:pkt_det_offset+rlen));
   
   phase = sum(phase, 2);
   
   % 若采用了发射分集
   phase = sum(phase, 1);
   %46页(2.34)式。
   freq_est = -angle(phase) / (2*D*pi/sim_consts.SampFreq);
   
   radians_per_sample = 2*pi*freq_est/sim_consts.SampFreq;
else
   freq_est = 0;
   radians_per_sample = 2*pi*freq_est/sim_consts.SampFreq;
   %freq_est = sim_options.FreqError;
  % radians_per_sample = 2*pi*freq_est/sim_consts.SampFreq;
end

% 产生能反向抵消频偏的信号
siglen=length(rxsignal(1,:));
time_base=0:siglen-1;
correction_signal=repmat(exp(-j*(radians_per_sample)*time_base),n_rx_antennas,1);

%最后应用上面产生的信号纠正接收信号
out_signal = rxsignal.*correction_signal;

%rat=freq_est/sim_consts.SampFreq;
%keyboard

⌨️ 快捷键说明

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