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

📄 rx_frequency_sync.m

📁 MATLAB Simulation of OFDM System
💻 M
字号:
% 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 + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -