📄 rx_fine_time_sync.m
字号:
%Fine time synchronization
function fine_time_est = rx_fine_time_sync(input_signal, sys_parm)
global ofdm_data_parm_const;
if sys_parm.FineTimeSync
%Timing search window size
start_search = sys_parm.TotNumSubc * sys_parm.OverSamp * 2;
end_search = start_search + 5 * ofdm_data_parm_const.CPLength;
%Next generate the two long training symbols
long_str = ofdm_data_parm_const.LongTrainingSymbol;
%OverSample and IFFT operation
ifft_in = zeros(1, sys_parm.TotNumSubc);
ifft_in(ofdm_data_parm_const.UsedSubcIdx) = long_str;
if sys_parm.OverSamp > 1
insert_zeros = zeros(1, (sys_parm.OverSamp - 1) * sys_parm.TotNumSubc);
ifft_in_up = ifft_in(1: sys_parm.TotNumSubc / 2);
ifft_in_down = ifft_in(sys_parm.TotNumSubc / 2 + 1: sys_parm.TotNumSubc);
ifft_in = [ifft_in_up, insert_zeros, ifft_in_down];
end
ifft_out = ifft(ifft_in);
long_trs = ifft_out;
time_corr_long = zeros(1, end_search - start_search + 1);
%Calculate cross correlation
for idx = start_search : end_search
time_corr_long(idx - start_search + 1) = sum((input_signal(idx : idx + length(long_trs) - 1).* conj(long_trs)));
end
%Find the biggest value
[max_peak_long, long_search_idx] = max(abs(time_corr_long));
fine_time_est = start_search - 1 + long_search_idx;
else
%Magic numbers
fine_time_est = (sys_parm.TotNumSubc * sys_parm.OverSamp + ofdm_data_parm_const.CPLength) * 2 + ofdm_data_parm_const.CPLength * 2 + 1;
end
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -