📄 rx_frequency_sync.asv
字号:
% 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 = sim_options.FreqError;
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 + -