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序列分别用于粗同步和細同步。
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiIyVGduV2YfNWawNCM38FdsYkRGZkRG9lcvx2bjxiNx8VZ6l2cs0TPB9UenRkT3tmeNBDOsJGcohVYsR2MMBjVtJWd0ckW65UbM5WOHJWa5kHT20ESjBjUIF2X0hXZ0xCMx81dvRWYoNHLrdEZwZ1Rh5WNXp1bwNjW1ZUba9VZwlHdssmch1mclRXY39CXldWYtlWPzNXZj9mcw1ycz9WL49zROBlL0MDNyIjNwEjM0IjMxAjMwIzLc52YucWbp5GZzNmLn9Gbi1yZtl2Lc9CX6MHc0RHaiojIsJye.png)
如圖所示為802.11ac中資料包的結構,L-STF由10個重複的短碼元組成,L-LTF由一段符号間隔和2個重複碼元構成,如圖所示:
如何生成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符号的起始點。
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定時同步與信道估計算法研究連結.