Files
openairinterface5g/targets/ARCH/EXMIMO/USERSPACE/OCTAVE/initial_sync.m
T
2013-06-25 09:05:02 +00:00

78 lines
1.8 KiB
Matlab

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
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(:,1),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)],1);
pssf = fft(psst);
ssst = s([sss_pos:(sss_pos+511)],1);
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