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

📄 rx_frequency_sync.m

📁 频率同步算法的时域方法。利用两个连续重复的符号计算频率误差估算。
💻 M
字号:
% Frequency error estimation and correction
function [out_signal, freq_est] = rx_frequency_sync(rxsignal, sim_options)

global sim_consts;%在set_sim_consts中定义的全局变量

[n_tx_antennas, n_rx_antennas] = get_n_antennas(sim_options);%获取天线分集参数

% Estimate the frequency error
if sim_options.FreqSync   %如果选中频率同步选项,执行语句
   
   % allows for error in packet detection
   pkt_det_offset = 30;  %在分组检测中允许的错误
   
   % averaging length
   rlen = 128;   %计算的窗口长度L
   
   % short training symbol periodicity
   D = 16;    %短训练符号的周期
      
   phase = rxsignal(:,pkt_det_offset:pkt_det_offset+rlen-D).* ...
      conj(rxsignal(:,pkt_det_offset+D:pkt_det_offset+rlen));%计算rn乘以(rn+D)*,
   
   % add all estimates 
   phase = sum(phase, 2);   %实现窗口长度内的累加

   % with rx diversity combine antennas
   phase = sum(phase, 1);   %考虑到接收分集情况
   
   freq_est = -angle(phase) / (2*D*pi/sim_consts.SampFreq);%根据z与f的关系计算频率误差f,1/sim_consts.SampFreq即为采样时间Ts
   
   radians_per_sample = 2*pi*freq_est/sim_consts.SampFreq;%计算每个符号产生的频偏
else   %如果没有选中频率同步,则赋予默认值
   % Magic number
   freq_est = -sim_options.FreqError;%根据输入决定默认值
   radians_per_sample = 2*pi*freq_est/sim_consts.SampFreq;
end

% Now create a signal that has the frequency offset in the other direction
siglen=length(rxsignal(1,:));%接收信号的长度
time_base=0:siglen-1;%序列n
correction_signal=repmat(exp(-j*(radians_per_sample)*time_base),n_rx_antennas,1);%获取频偏校正矩阵

% And finally apply correction on the signal
out_signal = rxsignal.*correction_signal;%根据频偏计算正确接收符号

⌨️ 快捷键说明

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