Schmidl Algorithm Code
Algorithm principle
Training sequence Structure T=[a A], where a is a representation of a complex pseudo random sequence PN, a sequence of symbols obtained by N/2 point Ifft transformation
\[m (d) =\frac{\left | P (d) \right |} {r^{2} (d)}^{2}\]
\[p (d) =\sum_{m=0}^{l-1}r^{*} (d+m) r (d+m+l) \]
\[r (d) =\sum_{m=0}^{l-1}\left | R (d+m+l) \right |^{2}\]
\[l=n/2\]
The obtained D corresponds to the starting position of the training sequence (which does not contain a loop prefix).
The ★SCHMIDL:SCHMIDL algorithm uses a preamble of the identical sequence on both ends of the time domain to synchronize the timing, but the synchronization effect is not good, and the synchronous metric function curve has a flat top, which makes the estimation of timing synchronization to be biased and uncertain.
references
schmidl T m,cox D c.robust frequency and timing synchronization for OFDM[J]. IEEE trans.commun.,1997,45:1613-1612.
%********************schmidl algorithm*******************%example:% If% X = rand (2,3,4); % then% d = Size (X) returns d = [2 3 4]% [M1,M2,M3,M4] = size (X) returns m1 = 2, m2 = 3, M3 = 4, m4 = 1% [M,n] = size (X) returns m = 2, n =% m2 = size (x,2) returns m2 = 3close all; Clear all; CLC % parameter definition n=256; %fft/ifft number of points or sub-carriers (nu=n) NG=N/8; The length of the% loop prefix (the length of the protection interval) ns=ng+n; % includes the symbol length of the cyclic prefix%************ using the table-checking method to generate complex random sequence ********************** qamtable=[7+7i,-7+7i,-7-7i,7-7i]; Buf=qamtable (Randi ([0,3],n/2,1) +1); % plus 1 is for subscript may be 0 illegal%************* in the position of an odd subcarrier insert 0 *********************zj: Is it an even number? X=zeros (n,1); index = 1; For n=1:2:n x (n) =buf (index); index=index+1; End %************** uses Ifft transform to generate Schmidl training symbols *************** sch = Ifft (x); %[a A] form%***************** add an empty symbol along with a suffix symbol ************* src = qamtable (Randi ([0,3],n,1) +1). sym = Ifft (src); Sig =[zeros (n,1) Sch sym]; %********************** Add loop prefix *****************Tx =[sig (N-ng +1:n,:); sig]; %*********************** through channel *************************** recv = Reshape (tx,1,size (tx,1) *size (tx,2)); %size 1 represents rows, 2 represents columns, number of backwards from%, and exceeds for 1%RECV1 = AWGN (recv,1, ' measured '); %recv2 = AWGN (recv,5, ' measured '); %recv3 = AWGN (recv,10, ' measured '); %***************** Calculating Symbol Timing ***************************** P=zeros (1,2*NS); R=zeros (1,2*ns); %p1=zeros (1,2*ns); %r1=zeros (1,2*ns); P2=zeros (1,2*ns); R2=zeros (1,2*ns); %p3=zeros (1,2*ns); %r3=zeros (1,2*ns); For d = Ns/2+1:1:2*ns for m=0:1:n/2-1 p (D-NS/2) = P (D-NS/2) + Conj (recv (d+m)) *recv (d+n/2+m); R (D-NS/2) = R (D-NS/2) + Power (ABS (recv (D+N/2+M)), 2); %P1 (D-NS/2) = P1 (D-NS/2) + Conj (RECV1 (d+m)) *recv1 (d+n/2+m); %R1 (D-NS/2) = R1 (D-NS/2) + Power (ABS (RECV1 (D+N/2+M)), 2); %P2 (D-NS/2) = P2 (D-NS/2) + Conj (Recv2 (d+m)) *recv2 (d+n/2+m); %R2 (D-NS/2) = R2 (D-NS/2) + Power (ABS (RECV2 (D+N/2+M)), 2); % P3 (D-NS/2) = P3 (D-NS/2) + Conj (Recv3 (d+m)) *recv3 (d+n/2+m); % R3 (D-NS/2) = R3(D-NS/2) + Power (ABS (RECV3 (D+N/2+M)), 2); End End M=power (ABS (P), 2)./power (ABS (R), 2); %m1=power (ABS (P1), 2)./power (ABS (R1), 2); %m2=power (ABS (P2), 2)./power (ABS (R2), 2); %m3=power (ABS (P3), 2)./power (ABS (R3), 2); %********************** Drawing ****************************** figure (' Color ', ' W '); d=1:1:400; Figure (1);p lot (D,m (d)); Grid on; Axis ([0,400,0,1.1]); Title (' Schmidl algorithm '); Xlabel (' Time (sample) '); Ylabel (' Timing Metric '); %legend (' No noise ', ' snr=1db ', ' snr=5db ', ' snr=10db ');
Schmidl algorithm of OFDM synchronization algorithm