天天看點

OFDM系統之利用L-STF和L-LTF序列進行同步OFDM系統之利用L-STF和L-LTF序列進行同步

OFDM系統之利用L-STF和L-LTF序列進行同步

什麼是同步?為什麼要進行同步?

同步,簡而言之就是在接收端找到OFDM符号的起始點,以對它進行FFT,進而恢複出原始信号。發送端不斷發送OFDM信号,而接收機接收到這些信号會有一定的延時,如果不進行同步而直接進行FFT運算,是無法恢複出原始信号的。

什麼是L-STF和L-LTF序列?

L-STF(短訓練序列)和L-LTF(長訓練序列)是IEEE 802.11ac協定中用于進行同步的序列。在此協定中,同步分為兩個步驟——粗同步(也稱資料包檢測)和細同步(符号同步)。其中,粗同步用于判斷資料包的到來,細同步用于将資料包的位置精确到bit位。L-STF和L-LTF序列分别用于粗同步和細同步。

OFDM系統之利用L-STF和L-LTF序列進行同步OFDM系統之利用L-STF和L-LTF序列進行同步

如圖所示為802.11ac中資料包的結構,L-STF由10個重複的短碼元組成,L-LTF由一段符号間隔和2個重複碼元構成,如圖所示:

OFDM系統之利用L-STF和L-LTF序列進行同步OFDM系統之利用L-STF和L-LTF序列進行同步

如何生成L-STF序列和L-LTF序列?

以下代碼利用matlab生成L-STF序列和L-LTF序列

首先定義這樣一個長64的序列L_STF

L_STF = [0,0,0,0,0,0,...     
         0,0,1+1i,0,0,0,-1-1i,0,0,0,1+1i,0,0,0,-1-1i,...    
         0,0,0,-1-1i,0,0,0,1+1i,0,0,0,0,0,0,0,-1-1i,...
         0,0,0,-1-1i,0,0,0,1+1i,0,0,0,1+1i,0,0,0,1+1i,...
         0,0,0,1+1i,0,0,...
         0,0,0,0,0];
           

對其進行IFFT運算,得到L_STF_time,L_STF_time為16個元素一重複的長64的序列,即包含4個重複序列

對這個序列進行拼接,得到含10個重複碼元的序列,即為最終的L-STF序列。

對L-LTF序列,也有類似操作

L_LTF = [0,0,0,0,0,0,...   
             1,1,-1,-1,1,1,-1,1,-1,1,1,1,1,1,1,-1,-1,1,1,-1 ... 
             1,-1,1,1,1,1,0,1,-1,-1,1,1,-1,1,-1,1,-1,-1,-1,-1 ...
             -1,1,1,-1,-1,1,-1,1,-1,1,1,1,1,...
             0,0,0,0,0];     
L_LTF_time = ifft(L_LTF,64);
L_LTF_time=[L_LTF_time(33:64),L_LTF_time,L_LTF_time];
           

其中,在最後拼接時,将原來的L_LTF_time序列中的尾端序列複制到首端,形成符号間隔GI,然後重複拼接,得到最終的L-LTF序列。

如何實作同步?

實作同步有多種方法——自相關算法,互相關算法,最大似然機制等等。這裡介紹利用自相關算法實作粗同步和利用互相關算法實作細同步。

粗同步

粗同步是對接收到的序列進行自相關。由于標頭内含有多個重複的S序列,可以想象,即使是失真後,序列之間的相似度仍然比一般序列要高,根據這一特點,我們取兩個長16的視窗,延序列滑動,對視窗内的資料進行自相關,如果得到的結果能在一段時間内維持在一個臨界值以上(該臨界值通過經驗得出),則可以認為找到了標頭,即确認了資料包的到來。但此時得到的位置可能是在序列中的任意位置,我們接下來要通過細同步來确定OFDM符号的起始點。

OFDM系統之利用L-STF和L-LTF序列進行同步OFDM系統之利用L-STF和L-LTF序列進行同步
function [index,peak,keep,p,energy]=Coarse_Syn(rcv_data_noise,L)
    for i=1:L-48
        for m=1:16
            c(m)=rcv_data_noise(i+m-1+16)*conj(rcv_data_noise(i+m-1+32));
    %       c(m)=noise_premble_data(i+m-1)*conj(noise_premble_data(i+m-1+16));
            d(m)=rcv_data_noise(i+m-1)*conj(rcv_data_noise(i+m-1+16));
        end
        p(i)=sum(c);
%         co(i)=sum(con);
%         absp(i)=abs(real(p(i)))+abs(imag(p(i)));
        absp(i)=real(p(i)).*real(p(i))+imag(p(i)).*imag(p(i));
        r(i)=sum(d);
%         absr(i)=abs(real(r(i)))+abs(imag(r(i)));
        absr(i)=real(r(i)).*real(r(i))+imag(r(i)).*imag(r(i));
        peak(i)=absp(i)-absr(i); 
        keep(i)=absr(i)/absp(i);
    end
           

細同步

細同步的思想跟粗同步類似,隻不過細同步是将接收到的序列與本地L-LTF序列進行互相關,找到互相關的結果最大的位置,顯然,隻有當視窗起點在L-LTF序列的起點時,得到的互相關的結果最大。由于L-LTF序列長度已知,就可以得到OFDM符号開始的位置。

Search_Window = 300;
Data_For_FineSyc = Tx_Continue_AddStfLtf(Coarse_Index_Est:Coarse_Index_Est+Search_Window+160);
for i= 1:Search_Window
    for j=1:160
        Xcor(j)=Data_For_FineSyc(j+i)*conj(L_LTF_time(j));
    end
    Sum_Xocr(i)=abs(sum(Xcor));
end
fine_index=find(Sum_Xocr==max(Sum_Xocr));
figure(1)
plot(Sum_Xocr);
title('Find Syc Peak');
Data_Start=Coarse_Index_Est+fine_index+160
           

由此,我們就實作了同步。

以上是我自己的了解,如有不對,敬請指正。

參考資料:IEEE802.11ac定時同步與信道估計算法研究連結.