clear all close all addpath([getenv('OPENAIR1_DIR') '/PHY/LTE_REFSIG/']); addpath([getenv('OPENAIR1_DIR') '/PHY/LTE_TRANSPORT/']); primary_synch; %loads the primary sync signal sss_gen; %loads the secondary sync signal % grab a frame ch=1; rx_spec; % load frame %addpath([getenv('OPENAIR_TARGETS') '/SIMU/USER/']); %eNBtxsig1 %s = txs1; figure(1) plot(real(s)) pss_t = upsample(primary_synch0_time,4); [corr,lag] = xcorr(s(:,ch).',pss_t); figure(2); plot(lag,abs(corr)); [pss_amp, pss_pos0] = max(abs(corr)); pss_pos = lag(pss_pos0); %pss_pos = 8817; %sss_pos = pss_pos - 548; %FDD normal CP %sss_pos = pss_pos - 640; %FDD extended CP sss_pos = pss_pos - 1648; %TDD normal CP %sss_pos = pss_pos - 1920; %TDD extended CP psst = s([pss_pos:(pss_pos+511)],ch); pssf = fft(psst); ssst = s([sss_pos:(sss_pos+511)],ch); sssf = fft(ssst); pssf_ext = pssf([(512-30):512 2:32]); % extract innter 62 subcarriers sssf_ext = sssf([(512-30):512 2:32]); % extract innter 62 subcarriers %estimate channel from pss pss_ch = pssf_ext.*(primary_synch0(6:67)'); pss_ch = pss_ch./mean(abs(pss_ch)); %compensate sssf_ext with channel sssf_comp = sssf_ext.*conj(pss_ch); % frequency domain correlation (dot-wise product) of sssf_comp and d0 and d5 % account for phase offset Nid2=0; for Nid1=0:167 for phase=0; %-4:4 corr0(Nid1+1,phase+1) = d0(Nid2+Nid1*3+1,:)*conj(sssf_comp*exp(1j*pi*phase/8)); corr5(Nid1+1,phase+1) = d5(Nid2+Nid1*3+1,:)*conj(sssf_comp*exp(1j*pi*phase/8)); end end figure(3) plot(abs(corr0)) figure(4) plot(abs(corr5)) [m0,i0] = max(abs(corr0(:))); [m5,i5] = max(abs(corr5(:))); if (m0>m5) frame_start = pss_pos - 8816 phase = floor((i0-1)/168) %phase Nid1 = mod(i0-1,168) %Nid else frame_start = pss_pos - 47216 phase = floor((i5-1)/168) %phase Nid1 = mod(i5-1,168) %Nid end