📄 sym_timing.m
字号:
function [timed_sym , err_sym_timing] = sym_timing( coarse_freq_out ,N_subc,PrefixRatio,N_sym,N_tran_sym,known_training,...
Window2 ,TimingAhead, N_Rx_ant,TurnOn )
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 和已知的序列求相关, 得到符号定时位置
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
if TurnOn
% 得到已知的训练序列的时域样点值
len_ofdm_sym = (N_subc + N_subc*PrefixRatio);
syn_frame = sqrt(N_subc) * ifft( fftshift( known_training , 1 ) );
cp = syn_frame(N_subc - N_subc*PrefixRatio + 1:N_subc ,:,:);
training_frame = [cp;syn_frame];
% 只是单发送天线情况,多发送天线使用什么序列??
training_frame = reshape(training_frame,[1, len_ofdm_sym*N_tran_sym ]);
for ant = 1: N_Rx_ant
recv_tmp = coarse_freq_out(:,:,ant);
training_timing = training_frame( 1, len_ofdm_sym + 1:len_ofdm_sym + Window2 );
% 和已知的序列求相关,得到符号定时位置的估计
% 搜索第二个OFDM符号, 开始搜索的位置是len_ofdm_sym*3/4, 结束搜索的位置len_ofdm_sym*5/4
cnt = 1;
start_sample = len_ofdm_sym*3/4;
end_sample = len_ofdm_sym*5/4;
for start_idx = start_sample:end_sample
correlation(cnt) = sum( (recv_tmp(start_idx : start_idx + Window2 - 1).*conj(training_timing)) );
cnt = cnt + 1;
end
[max_value max_idx] = max(correlation);
timing_idx = max_idx + start_sample - 1; % 最佳定时值: len_ofdm_sym + 1
idx_cnt(ant) = timing_idx - TimingAhead;
end
% 计算得到多条天线的加权定时位置
idx = sum(idx_cnt)/N_Rx_ant;
% 定时截取
timed_sym = coarse_freq_out( 1, idx :idx + (N_sym + N_tran_sym - 1)*len_ofdm_sym - 1 , :);
% 计算定时误差的样点数
err_sym_timing = ( len_ofdm_sym + 1) - idx ;
else
timed_sym = coarse_freq_out( 1, N_subc*(1+PrefixRatio) + 1:N_subc*(1+PrefixRatio)*(N_sym + N_tran_sym), :);
err_sym_timing = 0;
end
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -