function [rxSignal,SyncErr] = rxSyncSC(rxSignal,WaveformPara,myFrameLen) SyncErr = 0; N = WaveformPara.N_FFT; L = WaveformPara.CP_Len; delay = 6000; c1 = WaveformPara.c1; c2 = WaveformPara.c2; preamble = WaveformPara.preamble; timing = estSymTiming(rxSignal,N,L);%%%%%%%%% tshift = delay+L+1-timing; if timing > WaveformPara.CP_Len+delay SyncErr=1; timing = delay+1; end rRemoveSTO = rxSignal(timing:end);%%%%%%%%%%%%% phi = estFFO(rRemoveSTO,N,L);%%%%%%%%%%%% rRemoveFFO = rRemoveSTO.*exp(-sqrt(-1)*2*pi*(1:length(rRemoveSTO))'*phi/N); gEst = estIFO(rRemoveFFO,N,L,c1,c2);%%%%%%%%%%% rRemoveIFO = rRemoveFFO.*exp(-sqrt(-1)*2*pi*(1:length(rRemoveFFO))'*(2*gEst)/N); fshift = phi+2*gEst; startWindow = length(preamble)-L+1;%%%%%%%%%%%% % endWindow = startWindow+WaveformPara.FrameLen-1;% endWindow = startWindow+myFrameLen-1;% rxSignal = rRemoveIFO(startWindow:endWindow); end %% APPENDIX function [timing,Mavg] = estSymTiming(r,N,L) P = zeros(length(r)-2*N/2+1,1); R = zeros(length(r)-2*N/2+1,1); M = zeros(length(P),1); for d = 1:length(M) P(d) = (r(d:d+N/2-1))'*r(d+N/2:d+N-1); R(d) = (r(d+N/2:d+N-1))'*r(d+N/2:d+N-1); M(d) = (abs(P(d)))^2/(R(d))^2; end movavgWindow = dsp.MovingAverage(L-1); Mavg = movavgWindow(M); Mavg = Mavg(L/2:end); [Mmax,timing] = max(Mavg); timing=183; figure plot(M) hold on; plot(Mavg) end function gEst = estIFO(rRemoveFFO,N,L,c1,c2) X = 1:2:N-1; v = sqrt(2)*c2(X)./c1(X); x1 = fft(rRemoveFFO(1:N))/sqrt(N); x2 = fft(rRemoveFFO(1+N+L:2*N+L))/sqrt(N); D = 2*(sum((abs(x2(X))).^2))^2; gNum = N/2; X1 = zeros(N,gNum); X2 = zeros(N,gNum); X1(:,1) = x1; X2(:,1) = x2; for i = 2:gNum X1(:,i) = [X1(3:end,i-1);X1(1:2,i-1)]; X2(:,i) = [X2(3:end,i-1);X2(1:2,i-1)]; end B = zeros(gNum,1); for i = 1:gNum B(i) = (abs(sum(... conj(X1(X,i)).*conj(v).*X2(X,i)... )))^2/D; end [Bmax,g] = max(B); G = [0:N/4-1,-N/4:-1]; gEst = G(g); end function phi = estFFO(r,N,L) P = sum(conj(r(1:N/2)).*r(N/2+1:2*N/2)); phi = angle(P)/pi; end