1. 程式人生 > >OFDM大白話講解

OFDM大白話講解

注:本文首發在QQ空間(因為需要同行的熟人們指正)。因QQ的封閉性,這裡重貼一次。本文地址:http://blog.csdn.NET/madongchunqiu/article/details/18614233

  說明:以下文字,灰色為吹水文,黑色為正文,藍色為採用實際應用中的引數所作的說明

  起因是這樣的。時間回到07年底,4G方興之時,同桌隔壁的隔壁”小白”同學說看不太明白OFDMA的原理,讓我講解一下。我一向對自己的技術水平、邏輯思考能力和表達技巧還是蠻有自信的,因此輕笑一聲就答應了。半小時後,在嘗試了從時域、頻域以及物理意義等各方面講解,但均無法從“小白”的眼神中抹除那份迷茫之後,我豎起了白旗,讓“小白”自生自滅去了。

  對知識能力的掌握,我自己粗曠的分為兩層:一層是“會了,能應用”;二層是“懂了,能衍生”。而能講解出來,並讓人懂,大抵就是區分一層和二層的分水嶺。打一個屌絲男喜聞樂見的比方:第一層就是人界的修煉,即使是“會了”,也是有築基、金丹、元嬰等境界之分的,而高考研考就是天劫,不到大乘之境,終究要化為劫灰;第二層是天界,也自有天仙、金仙之分,而能修至道祖的大牛,終究只是寥寥。我一向覺得自己在專業上還算是個“小仙”,可惜就被“小白”打臉了。

  這事兒對我的負面影響挺大的,一是懷疑自己技術宅做久了,表達能力方面嚴重退化【比如我偶爾會在搜尋一個精準的動詞或者形容詞時,需要嘗試2-3次,甚至更多】;二是在涉及到OFDM方面的內容時,彷彿就會看到一張白紙上逡巡著一隻揮之不去的黑蒼蠅。

  時隔多年,近期又回顧了一下OFDM,不經意又記起這樁公案,猶豫再三,還是決定花時間寫下這篇文章,把這隻盤旋於腦中的“黑蒼蠅”拍死。因此雖然現在網路資源極大豐富,各種文章都可以搜到,其實我是沒必要專門寫這篇未必比別人寫得好的文章的。不過畢竟是自己遺留的缺失,需要自己來補上。

  下面試圖以圖示為主講解OFDM,以”易懂”為第一要義。”小白”,你準備好了嗎?

  注:下面的討論如果不做說明,均假設為理想通道。

章節一:時域上的OFDM

  OFDM的”O”代表著”正交”,那麼就先說說正交吧。

  首先說說最簡單的情況,sin(t)和sin(2t)是正交的【證明:sin(t)·sin(2t)在區間[0,2π]上的積分為0

】,而正弦函式又是波的最直觀描述,因此我們就以此作為介入點。既然本文說的是圖示,那麼我們就用圖形的方式來先理解一下正交性。【你如果能從向量空間的角度,高屋建瓴的看待這個問題的話,你也就不是”小白”了,R U?】

  在下面的圖示中,在[0,2π]的時長內,採用最易懂的幅度調製方式傳送訊號:sin(t)傳送訊號a,因此傳送a·sin(t),sin(2t)傳送訊號b,因此傳送b·sin(2t)。其中,sin(t)和sin(2t)的用處是用來承載訊號,是收發端預先規定好的資訊,在本文中一律稱為子載波;調製在子載波上的幅度訊號a和b,才是需要傳送的資訊。因此在通道中傳送的訊號為a·sin(t)+b·sin(2t)。在接收端,分別對接收到的訊號作關於sin(t)和sin(2t)的積分檢測,就可以得到a和b了。(以下圖形採用google繪製)


圖一:傳送a訊號的sin(t)


圖二:傳送b訊號的sin(2t)【注意:在區間[0,2π]內傳送了兩個完整波形】


圖三:傳送在無線空間的疊加訊號a·sin(t)+b·sin(2t)


圖四:接收訊號乘sin(t),積分解碼出a訊號。【如前文所述,傳送b訊號的sin(2t)項,在積分後為0】


圖五:接收訊號乘sin(2t),積分解碼出b訊號。【如前文所述,傳送a訊號的sin(t)項,在積分後為0】


圖六:流程圖

  到了這裡,也許你會出現兩種狀態:

  一種是:啊,原來是這樣,我懂了。

  一種是:啊,怎麼會這樣,我完全無法想象。這裡要說的是,你根本用不著去想象(visualize)。數學中是如此定義正交的,數學證明了它們的正交性,那麼他們就是正交的,【他們就可以互不干擾的承載各自的資訊】。選取sin(t)和sin(2t)作為例子,正是因為它們是介於直觀和抽象的過渡地帶,趟過去吧。

  上面的圖示雖然簡單,但是卻是所有複雜的基礎。

  1.1 下一步,將sin(t)和sin(2t)擴充套件到更多的子載波序列{sin(2π·Δf·t),sin(2π·Δf·2t),sin(2π·Δf·3t),…,sin(2π·Δf·kt)} (例如k=16,256,1024等),應該是很好理解的事情。其中,2π是常量;Δf是事先選好的載頻間隔,也是常量。1t,2t,3t,…,kt保證了正弦波序列的正交性。

  1.2 再下一步,將cos(t)也引入。容易證明,cos(t)與sin(t)是正交的,也與整個sin(kt)的正交族相正交。同樣,cos(kt)也與整個sin(kt)的正交族相正交。因此發射序列擴充套件到{sin(2π·Δf·t),sin(2π·Δf·2t),sin(2π·Δf·3t),…,sin(2π·Δf·kt),cos(2π·Δf·t),cos(2π·Δf·2t),cos(2π·Δf·3t),…,cos(2π·Δf·kt)}也就順理成章了。

  1.3 經過前兩步的擴充,選好了2組正交序列sin(kt)和cos(kt),這只是傳輸的”介質”。真正要傳輸的資訊還需要調製在這些載波上,即sin(t),sin(2t),…,sin(kt)分別幅度調製a1,a2,…,ak訊號,cos(t),cos(2t),…,cos(kt)分別幅度調製b1,b2,…,bk訊號。這2n組互相正交的訊號同時傳送出去,在空間上會疊加出怎樣的波形呢?做簡單的加法如下:

f(t) = a1·sin(2π·Δf·t) + 
       a2·sin(2π·Δf·2t) + 
       a3·sin(2π·Δf·3t) + 
       …
       ak·sin(2π·Δf·kt) + 
       b1·cos(2π·Δf·t) + 
       b2·cos(2π·Δf·2t) + 
       b3·cos(2π·Δf·3t) + 
       …
       bk·cos(2π·Δf·kt) + 
     = ∑ak·sin(2π·Δf·kt) + ∑bk·cos(2π·Δf·kt)公式1-1:實數的表達

為了方便進行數學處理,上式有複數表達形式如下:
f(t) = ∑Fk·e(j·2π·Δf·kt)公式1-2:複數的表達,這編輯器找不到上角標…不過,你應該看得懂的】

  上面的公式可以這樣看:每個子載波序列都在傳送自己的訊號,互相交疊在空中,最終在接收端看到的訊號就是f(t)。接收端收到雜糅訊號f(t)後,再在每個子載波上分別作相乘後積分的操作,就可以取出每個子載波分別承載的訊號了。

  然後,多看看公式1-1和公式1-2!!!發現咯?這就是傅立葉級數嘛。如果將t離散化,那麼就是離散傅立葉變換。所以才有OFDM以FFT來實現的故事。將在下面的章節進行更多的描述。

  遵循古老的傳統,F表示頻域,f表示時域,所以可以從公式1-2中看出,每個子載波上面調製的幅度,就是頻域資訊。類似的說法是:OFDM傳輸的是頻域訊號。這種說法有些彆扭,但是很多教程或文章會使用這樣的說明方式,就看讀者如何理解了。如果純粹從公式或者子載波來看,這種說法其實也是很直接的闡述了。

  上面1.1-1.3的擴充套件,可如下圖所示:

圖七:時域上的OFDM系統圖


  1.4 還有這一步嗎?其實是有的。”小白”你可以先想想,想不到的話先往下看,因為這需要在頻域中考量,所以我寫在後面了。【也可參考[1]】

  將上述的時域分析配上LTE的實現,有如下情況:
  【注1:本段描述需要有LTE物理層的基本知識,如果看不明白,請暫時跳過,看完整篇文章後再回看】
  【注2:LTE並非時域的實現,下面僅僅是套用LTE的引數,做一個參考分析】

  子載波的間隔Δf=15kHz,一個OFDM symbol的傳送時間是66.7us,可以發現,15kHz*66.67us=1,即基帶上一個OFDM symbol的傳送時間正好傳送一個一次諧波的完整波形。對於10M的LTE系統,採用的是1024個子載波,但是隻有中間600個(不含最中間的直流)子載波被用於傳送資料。在一個OFDM symbol的時間內(即66.67us),靠近中間的兩個一次諧波傳輸一個完整波形,再靠外一點的兩個二次諧波傳輸兩個完整波形,以此類推至最外面的兩個300次諧波傳輸了300個完整的波形。在這66.67us內,600個子載波互相正交,其上分別承載了600個複數訊號。

  上面的說法有點囉嗦,不如圖示來得直觀。本來準備再畫一圖的,不過一來上面已經有了類似的圖,實是大同小異;二來,600個子載波,也太多了點。。。


  OK,說到這裡,從時域上面來看OFDM,其實是相當簡潔明快討人喜歡的。不過,一個系統若要從時域上來實現OFDM,難度太大,時延和頻偏都會嚴重破壞子載波的正交性,從而影響系統性能。這點在各種教材文章中都會有提及,我就不贅述了。

  下面將轉入頻域來描述OFDM,由於頻域不甚直觀,的確會稍稍讓人費解。不過只要時刻想著時域子載波間的疊加,一切都會好起來。

章節二:頻域上的OFDM

  第一章節時域上的討論開始於OFDM中的”O”;本章節頻域上我們從”FDM”開始。
  先圖例一個常規FDM的系統圖:


圖11:常規FDM,兩路訊號頻譜之間有間隔,互相不干擾

  為了更好的利用系統頻寬,子載波的間距可以儘量靠近些。


圖12:靠得很近的FDM,實際中考慮到硬體實現,解調第一路訊號時,已經很難完全去除第二路訊號的影響了(電路的實現畢竟不能像剪刀裁紙一樣利落),兩路訊號互相之間可能已經產生干擾了

  還能再近些嗎?可以的。這就是OFDM的來歷啊,近到完全等同於奈奎斯特頻寬(後面有詳述),使頻帶的利用率達到了理論上的最大值。


圖13:繼續靠近,間隔頻率互相正交,因此頻譜雖然有重疊,但是仍然是沒有互相干擾的。神奇的OFDM

  上面三個圖的確有點小兒科,不知道”小白”是不是已經在心裡吶喊:這誰不知道呀!不過我在這裡花時間畫了三張圖,總還是有所考量的:
a. 作為上一個章節和本章節之間的補充和連線,說明一下OFDM在頻域上面的表現,亦即OFDM的本源來歷。
b. 引導思考:訊號的頻寬是多少?
c. 引導思考:OFDM正交頻譜疊加部分到底有多寬呢?結合1.4,先想想,再往下看,會更好。

  再次回到正軌,請回看第一節中的圖一至圖六等時域波形圖,圖示了在時域上,波形的調製,疊加接收,以及最終的解碼。讓我們看看圖一至圖三中的每個步驟在頻域上是如何表現的。

  首先來看sin(t)。”小白”呀”小白”,你且說說sin(t)的頻譜是啥呀?”小白”弱弱的說:是一個衝激。是的,sin(t)是個單一的正弦波,代表著單一的頻率,所以其頻譜自然是一個衝激。不過其實圖一中所示的sin(t)並不是真正的sin(t),而只是限定在[0,2π]之內的一小段。無限長度的訊號被限制在一小截時間之內,【就好比從一個完整的人身上逮下一根頭髮,然後把整個人都丟掉,以發代人】其頻譜也不再是一個衝激了。

  對限制在[0,2π]內的sin(t)訊號,相當於無限長的sin(t)訊號乘以一個[0,2π]上的門訊號(矩形脈衝),其頻譜為兩者頻譜的卷積。sin(t)的頻譜為衝激,門訊號的頻譜為sinc訊號(即sin(x)/x訊號)。衝激訊號卷積sinc訊號,相當於對sinc訊號的搬移。所以分析到這裡,可以得出圖一的時域波形其對應的頻譜如下:


圖21:限定在[0,2π]內的a·sin(t)訊號的頻譜,即以sin(t)為載波的調製訊號的頻譜

  sin(2t)的頻譜分析基本相同。需要注意的是,由於正交區間為[0,2π],因此sin(2t)在相同的時間內傳送了兩個完整波形。相同的門函式保證了兩個函式的頻譜形狀相同,只是頻譜被搬移的位置變了


圖22:限定在[0,2π]內的b·sin(2t)訊號的頻譜,即以sin(2t)為載波的調製訊號的頻譜

  將sin(t)和sin(2t)所傳訊號的頻譜疊加在一起,如下:


圖23:a·sin(t)+b·sin(2t)訊號的頻譜


  圖23和圖13,均是頻域上兩個正交子載波的頻譜圖。比一下,發現了嗎?不太一樣!

  是的,想必你已經想起來了,這是因為基帶訊號在傳輸前,一般會通過脈衝成型濾波器的結果。比如使用”升餘弦滾降濾波器”後,圖23所示的訊號就會被修理成圖13所示的訊號了。這樣可以有效的限制頻寬外部的訊號,在保證本路訊號沒有碼間串擾的情況下,既能最大限度的利用頻寬,又能減少子載波間的各路訊號的相互干擾。這也是1.4中沒有提及的,更多的可參考[1]

  貼士:脈衝成型濾波器作用於頻域,可以”看作”時域中的每個碼元都是以類似sinc訊號發出的。沒必要糾結於傳送端碼元的時域波形,只需要知道在接收端通過合適的取樣就可以無失真的恢復訊號就OK咯。

  這裡用到的是奈奎斯特第一準則,在下面的框框內會稍作描述:

奈奎斯特第一準則請自行google,這裡說說其推論:碼元速率為1/T(即每個碼元的傳輸時長為T),進行無碼間串擾傳輸時,所需的最小頻寬稱為奈奎斯特頻寬。
  對於理想低通通道,奈奎斯特頻寬W = 1/(2T)
  對於理想帶通通道,奈奎斯特頻寬W = 1/T

  在下面的圖31中,可以看出訊號的實際頻寬B是要大於奈奎斯特頻寬W(低通的1/(2T)或者帶通的1/T)的,這就是理想和現實的距離。
  補充說明:本文提到的”頻寬”,也即約定俗成的頻寬理解方式,指的是訊號頻譜中>=0的部分。在從低通帶通的搬移過程中,因為將原訊號負頻率部分也移出來了(也可理解為同乘e(j2πfct) + e(-j2πfct)的結果,見參考[2])【注:沒有上角標和下角標的編輯器,真不爽。不過,你應該看得懂的】,所以頻寬翻倍了。如下圖所示:

圖31:內涵豐富的圖,請參看上面和下面的說明文字

  上面專門用框框列出奈奎斯特第一準則,還有一個重要目的就是說明下頻帶利用率的問題。頻帶利用率是碼元速率1/T和頻寬B(或者W)的比值

  理想情況下,低通通道頻帶利用率為2Baud/Hz;帶通通道頻帶利用率在傳輸實數訊號時為1Baud/Hz,傳送複數訊號時為2Baud/Hz(負頻率和正頻率都獨立攜帶訊號)。由於討論低通訊道時往往考慮的是實數訊號,而討論帶通訊道時通常考慮的是複數訊號,因此可以簡單認為:理想情況下,通道的頻帶利用率為2Baud/Hz

  實際情況下,因為實際頻寬B要大於奈奎斯特頻寬W,所以實際FDM系統的頻帶利用率會低於理想情況。

  【說到這裡,終於可以圖窮匕見了】而OFDM的子載波間隔最低能達到奈奎斯特頻寬,也就是說(在不考慮最旁邊的兩個子載波情況下),OFDM達到了理想通道的頻帶利用率

圖32:OFDM正交子載波,載頻間距為奈奎斯特頻寬,保證了最大的頻帶利用率


  將上述的頻域分析配上LTE的實現,有如下情況:
  【注:本段描述需要有LTE物理層的基本知識】

  子載波的間隔Δf=15kHz,一個OFDM symbol的傳送時間是66.7us。在10MHz通道上,1ms的子幀共傳輸14個OFDM symbol【不是15個,留空給CP了】,每一個OFDM symbol攜帶600個複數資訊,因此:
  1. 從整個系統來看,波特率為600*14*2/1ms = 16.8MBaud,佔據頻寬10MHz,因此頻寬利用率為16.8MBaud/10MHz = 1.68Baud/Hz,接近2Baud/Hz的理想情況。【注:一是CP佔用了每個OFDM Symbol約1/15的資源,二是10MHz的頻帶並不是滿打滿算的用於傳輸資料,其邊界頻帶需要留空以減少與鄰近通道的干擾】
  2. 單從OFDM一個symbol來看,波特率為600*2/66.7us = 18MBaud,佔據頻寬600*15kHz=9MHz【不考慮邊界子載波帶外問題】,因此其頻寬利用率為18MBaud/9MHz=2Baud/Hz,符合上面的討論。
  附:5M頻寬的WCDMA的chip rate = 3.84M/s,即位元速率為3.84M*2 = 7.68MBaud,頻寬5M,所以頻寬利用率為7.68MBaud/5MHz = 1.536Baud/Hz,略遜於LTE的1.68Baud/Hz【注:WCDMA的脈衝成型採用滾降係數為0.22的升餘弦濾波器,奈奎斯特頻寬為3.84M】

章節三:用IFFT實現OFDM

  其實前兩章,我已經將自己的理解盡數表達了:第一節是從時域上來說子載波正交的原理;第二節是從頻域上來解釋子載波正交後,達到理想頻帶利用率的特性。想來,雖然前兩章寫得較長【沒預料到會寫這麼長的…太長了沒人看…】,但是應該還是很簡單、清晰、易懂的。
  不過”小白”的卡殼,似乎並不在於最基本的正交原理和頻帶利用率上,反而是IFFT變換中,充斥的各種時域頻域角色變換讓其眼花繚亂。

  個人覺得要理解IFFT實現OFDM,最好的辦法還是看公式。比如第一章節中的公式1-1和公式1-2,配上時域波形圖的疊加,不要太好理解喲。當然,這裡的IFFT需要將時域離散化,因此公式IFFT ≈ IDFT –> 

fn = 1/N·∑Fk·e(j·2π·k·n/N)公式3-1,n為時域離散後的序號,N為總的IFFT個數,n∈[1,N]】

  關於公式3-1的理解方法,可以是這樣的。其中一種理解方式是聯絡第一章節的公式1-2:可以發現公式3-1等號右側所表達的物理意義和公式1-2是相同的,均代表了不同子載波e(j·2π·k·n/N)傳送各自的訊號Fk,然後在時域上的疊加形成fn,只不過現在疊加出來的時域不是連續波形,而是離散的時序抽樣點。

  另一種更容易,更可愛的理解方式是:在一個OFDM symbol的時長T內,用N個子載波各自發送一個訊號F(k)(k∈[1,N]),等效於直接在時域上連續傳送fn(n∈[1,N])N個訊號,每個訊號傳送T/N的時長。

  在IFFT實現OFDM中,傳送端添加了IFFT模組、接收端添加了FFT模組。IFFT模組的功能相當於說:別麻煩傳送N個子載波訊號了,我直接算出你們在空中會疊加成啥樣子吧FFT模組的功能相當於說:別用老式的積分方法來去除其餘的正交子載波了,我幫你一次把N個攜帶訊號全算出來吧。就是這樣,IFFT實現OFDM的系統用”數學的方法“,在傳送端計算訊號的疊加波形,在接收端去除正交子載波,從而大大簡化了系統的複雜度。

圖八:用IFFT實現OFDM。請自行對比圖七


  最後說一句:”小白”乃”白富美”之”白”,非”一窮二白”之”白”也。
  好吧,該結束了。再寫得長了更沒人看了。


補充章節:從頻譜上來看正交性

  本文最開始發表時是沒有這一段的,因為原文已然十分自恰,已將OFDM的原理說的非常清楚到位了。然而,這一段的內容卻是別的文章中講解OFDM時經常出現的橋段,因此覺得還是有必要補充陳述一下自己的觀點。   【注:本小節為補充章節,與本文邏輯沒有必然聯絡,可直接略過。】   從正文章節中,可以發現作者的思路:從時域角度講解子載波的正交性;從頻域角度講解OFDM的頻帶利用率。作者覺得這是最容易理解OFDM原理的方式。但是教材中、網路上,還有一種非常主流的講解方式:從頻域上“直觀的”看待子載波的正交性。比如下面這個圖:
圖51:從OFDM頻譜看待正交性(本圖來自網路,比我畫的圖好些,還有文字說明)   這種觀點的說法是:在每個子載波的抽樣點上,其它的子載波訊號抽樣值均為0(即上圖中的subcarrier Nulls對應某個子載波的Subcarrier Peak)。這種說法在圖示上有非常醒目的直觀效果,所以是各教材講義中的常客,但是至少從作者的角度來看,這種說法在涉及到後面的解調訊號時,將變得非常難以理解和說明。所以本文最開始的版本中是沒打算寫本小節的。   如果你看到這裡,覺得這種說法正中下懷,那麼恭喜你。   如果你看到這裡,覺得這種說法已經讓你的腦袋成了漿糊,那麼可以回顧第一章節:時域上的正交性,然後繼續閱讀下面部分以解毒。   時域上的正交性和頻域上的正交性之間的關係該如何聯絡起來呢?回顧前面提到sin(t)和sin(2t)是正交的【證明:sin(t)·sin(2t)在區間[0,2π]上的積分為0】,推廣到更一般的情況是:{sin(2π·Δf·t),sin(2π·Δf·2t),sin(2π·Δf·3t),…,sin(2π·Δf·kt)}在區間[0, 1/Δf]上正交(注:教材上一般寫為u(t)在[-T/2,T/2]區間上怎麼怎麼著,本文就用不著那麼學術了)。可以看出,這裡有一個關鍵的引數Δf:它既是頻域上子載波的間距,又確定了時域上的訊號傳輸時間。回顧時域頻域轉換圖:
圖52:同前面的圖21,時域波形和頻域的轉換   聯絡上圖的時頻轉換,可以發現Δf既確定了子載波本身(即上圖中第一排的兩個圖),又確定了待發訊號的傳輸時間(即上圖中第二排的兩個圖中訊號的寬度),從而決定了訊號頻譜的主瓣寬度以及旁瓣為0的位置。這也意味著,OFDM系統中一旦選定了子載波間隔,時域上的正交性以及頻域上的正交性也就順理成章的聯絡起來了。如下圖:
圖53:同前面的圖23,兩路訊號的間隔Δf,保證了時域上的正交性、確定了頻域上的旁瓣0點位置   其實對本作者而言,從頻譜上來看待OFDM的正交性有點顛倒因果的嫌疑。按我的理解:OFDM選用的正交子載波是因,頻譜中出現“其餘子載波攜帶訊號的旁瓣0點處於當前子載波攜帶訊號主瓣峰值處”的現象是果。以果推因,謬矣。

繼續說明:關於物理層的訊號

回覆留言時一直出錯,幸好儲存了,就直接寫在這裡了。
要弄清楚訊號的含義,可以將整個物理層訊號傳輸的過程給分解開來,可以看到,不同的步驟對訊號的處理是不同的。
信源編碼著重於對訊號的容量進行壓縮,提高傳輸效率(位元流);
通道編碼針對多變的通道插入冗餘資訊,增加傳輸的穩定性(位元流);
訊號調製則是將位元流轉成了特定的波形進行傳輸,根據調製方式的不同,即可能是一個位元對應一個波形,也有可能是數個位元對應一個波形(高階調製)。所以有個問題說不知道0對應什麼波形,1對應什麼波形,是因為沒弄清調製過程。在採用比如QAM64調製後,出來的symbol就是複數了,這也是複數訊號的來歷。一般的文章會將一個symbol看作一個輸入來看待和討論下面的步驟,而我這篇文章因為是從sin和cos入手來討論正交性的,因此我這篇文章中將一個symbol看成了兩個實數,故而在討論通道利用率時和主流“結論”有點出入,但其實是各自的假設不同而已。
在實際的系統中,QAM symbol 進行了針對天線陣列的precoding和資源分配的mapping後,就會進入OFDM調製了(就是上面圖八的一站式IFFT計算)

繼續補充:關於負頻率


參考[1]: Wireless Communications, Andrea Goldsmith - 12.2 Multicarrier Modulation with Overlapping Subchannels

參考[2]: Principles of Digital Communication - Gallager - 6.4.1 Double-sideband amplitude modulation