?? 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 + -