sym_timing.m
资源名称:444.zip [点击查看]
上传用户:gzcxg999
上传日期:2021-07-15
资源大小:190k
文件大小:2k
源码类别:
matlab例程
开发平台:
CHM
- 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
English
