介紹除了OFDM外,一個完整通信鏈路中所需的其他環(huán)節(jié),給出發(fā)射機(jī)鏈路和接收機(jī)鏈路的整體框圖,最后結(jié)合802.11a介紹相關(guān)技術(shù)指標(biāo)。
系統(tǒng)框圖調(diào)整
在上一篇中,框圖部分我們剛介紹了用IFFT/FFT來實現(xiàn)OFDM,通過加循環(huán)前綴(CP)來消除ISI和減少ICI。
在這一節(jié)中,我們要將整體的OFDM基帶實現(xiàn)模型給完整描繪出來,即:
其中,圖上省略了在輸入的二進(jìn)制數(shù)據(jù)之后,FEC編碼器之前的加擾的部分,作用是為了避免出現(xiàn)長串的1或0,影響接收機(jī)的定時.
前向糾錯 (英語: forward error correction ,縮寫 FEC )或 信道編碼 (英語: channel coding )是一種在單向通信系統(tǒng)中控制傳輸錯誤的技術(shù),通過連同數(shù)據(jù)發(fā)送額外的信息進(jìn)行錯誤恢復(fù),以降低比特誤碼率。
擾碼器
在數(shù)字通信中,如果出現(xiàn)?!?’或者?!?’序列都會影響接收機(jī)鏈路中同步的建立和保持。所以往往可以在發(fā)射機(jī)鏈路中加入擾碼器(scrambler)來將數(shù)字信號變換為具有近似白噪聲統(tǒng)計特性的數(shù)字序列.這樣同時能限制電路中存在不同程度的非線性特性對其他電路通信造成的串?dāng)_.
所謂加擾,即在不增加冗余而攪亂信號,改變其統(tǒng)計特性.這項技術(shù)的實現(xiàn)方式即耳熟能詳?shù)姆答佉莆?a href="http://www.brongaenegriffin.com/tags/寄存器/" target="_blank">寄存器序列(即偽隨機(jī)序列,m序列).
在硬件實現(xiàn)上,有兩種不同的實現(xiàn)方式,分別是輸入信號不經(jīng)過寄存器:
和輸入信號經(jīng)過寄存器:
其中,圖中的+號為模2加法,即可以使用異或?qū)崿F(xiàn).而在這里,802.11a中采用的是方式1,其中生成多項式為:
信道編碼
在加擾后,為了加強對信道的抗噪能力,我們需要引入額外的監(jiān)督碼元來對接收信號進(jìn)行檢錯糾錯即信道編碼過程.由于這一部分原理猶如天書,所以僅盡量寫得像是個人能讀懂的.
在802.11a中主要采用了:卷積編碼.在框圖中將稱之為FEC( forward error correction ,前向糾錯)編碼/譯碼器
卷積碼原理
卷積碼的由來,是因為輸入的原始消息數(shù)據(jù)會和編碼器(encoder)的沖激響應(yīng)(impulse response)做卷積運算。即:
編碼過程
一個(n,k,m)卷積編碼器由Nk個移位寄存器和n個模2加法器組成。編碼輸出的n比特不僅取決于正在移入的k比特,還與這之前輸入的m個k位有關(guān)。所以對一般框圖來說:
至此,我們可以得到1/2卷積編碼器的原理圖:
在此情況下,每輸入1比特就是輸出A和B兩個兩個比特,實現(xiàn)1/2碼率.
刪余
為了提高傳輸效率,在卷積編碼后一邊會進(jìn)行刪余(puncture),即周期性刪除一些相對不重要的數(shù)據(jù)比特.進(jìn)行刪余后的卷積編碼一般也稱作刪余卷積碼.而在譯碼前會對刪掉的比特位置進(jìn)行填充.
具體操作如下:
在ofdm系統(tǒng)中,針對不同的數(shù)據(jù)速率需要不同的編碼率,所以我們可以用1/2通過刪余得到2/3和3/4等編碼率.
所以在很容易可以得到多碼率卷積碼的硬件結(jié)構(gòu):
熱心的網(wǎng)友的問題:
那這個時候,就會有熱心的網(wǎng)友想問:
- 為什么不針對2/3,3/4單獨開一套卷積編碼,非得用1/2去改?在接收端填充不會影響結(jié)果的嗎?
- 你上面寫的那個有限狀態(tài)機(jī)是什么東西,有什么用?
那這個時候就要引入解調(diào)部分的原理了.
Viterbi算法
其基本原理為:將接收到的序列和所有可能的發(fā)送序列作比較,選擇其中漢明距離最小的序列當(dāng)作是現(xiàn)在的發(fā)送序列.這是一種利用最大似然估計進(jìn)行譯碼的算法.
里面有從最短路徑,動態(tài)規(guī)劃,概率估計等角度去解讀Viterbi算法的,大家都可以先去看看,而他們有一個共同的好處,就是圖多,也方便大家理解.
需要注意的是,這里利用Viterbi算法進(jìn)行卷積碼譯碼的前提和轉(zhuǎn)換思路是將編碼的實現(xiàn)即有限狀態(tài)的狀態(tài)機(jī),看成是一個**隱性馬爾可夫模型(HMM)**這樣子才能實現(xiàn)利用最大似然等概率的方式來反推電路的設(shè)計.
看完了上面的幾個連接,就可以理解到狀態(tài)編碼將直接影響到整個算法的復(fù)雜度,所以在譯碼過程中先將數(shù)據(jù)進(jìn)行增余,再進(jìn)行譯碼,即將刪余后的2/3或3/4碼率通過增余再變成1/2的話,Viterbi算法的實現(xiàn)復(fù)雜度將會大大降低.
交織/解交織
在信道編碼后的信息具有一定的檢糾錯能力,但是面對信道的突發(fā)錯誤使得誤碼區(qū)塊長度超過信道編碼的糾錯能力的上限時,信道編碼就顯得有點"失效"了.這個時候需要引入交織,將信道的突發(fā)錯誤平均到各個字段上,讓他變成隨機(jī)錯誤,再憑借信道編碼,就可以大大提高其糾錯能力了.
原理及作用
在上一節(jié)的信道編碼中,我們可知道信道編碼可以對一段字符中的某幾個字符進(jìn)行檢錯和糾錯,但如果接收端是這樣的:
直接有一個字段就全錯了,這個時候信道編碼是救不回來的,接下來看看交織是怎么做的(以分組交織為例,簡單):
通過將信息進(jìn)行重新整合,若信道出現(xiàn)突發(fā)錯誤,這樣在解交織時就會平攤到各個字段上,這樣子就可以通過信道編碼進(jìn)行糾錯了.
交織有兩種基本形式:分組交織和卷積交織.
還有利用兩個卷積編碼器進(jìn)行級聯(lián),實現(xiàn)一串由偽隨機(jī)性質(zhì)的編碼,即并行級聯(lián)卷積碼,又稱為Turbo碼.
其中,分組交織的原理在前面已經(jīng)講了,假設(shè)輸入為N,輸出為M,則稱交織深度為N*M.可見交織深度必將給系統(tǒng)帶來較大延時,故必然會受到約束.
然后就是卷積交織器,這是一個非常適用用于連續(xù)比特流通信系統(tǒng)的交織方式,其交織深度僅為分組交織的一半.圖解如下:
由于在OFDM中采用的是多載波調(diào)制,所以分組交織的延時也沒有這么嚴(yán)重,而在802.11中采用的是分組交織,故不過多討論卷積交織和Turbo碼,有興趣的同學(xué)可以看一下參考文獻(xiàn).
解交織
此時可以換一個角度考慮問題:將分組交織看成是一種矩陣的轉(zhuǎn)置
那么顯然解交織也只需要對這個矩陣再進(jìn)行一次轉(zhuǎn)置就可以了,所以跟加擾的解擾一樣,這里只要同樣做一個轉(zhuǎn)置的交織過程就可以了.
熱心網(wǎng)友的問題
那么這個時候就會有熱心的網(wǎng)友問:你說的這個加擾器,他不就是將基帶信號變成具有偽隨機(jī)信號性質(zhì)的東西了嗎,這個時候還整交織干嘛嘛?
那顯然這個網(wǎng)友是沒有好好看交織的原理的,他的目的是為了讓信道中出現(xiàn)的突發(fā)錯誤轉(zhuǎn)換成隨機(jī)錯誤,讓大伙們來"平攤"這個誤碼,而加擾的話主要目的是為了區(qū)別用戶(上行加擾)或者區(qū)分小區(qū)和信道(下行加擾)。
加擾是發(fā)送端用小區(qū)專用的加擾序列(偽隨機(jī)碼,根據(jù)小區(qū)ID生成)進(jìn)行加擾,接收端在進(jìn)行解擾,只有本小區(qū)內(nèi)的UE才能根據(jù)小區(qū)的ID進(jìn)行解擾,從而區(qū)分小區(qū),這么做的好處就是可以減少相鄰小區(qū)的干擾。
調(diào)制與解調(diào)
這部分為通信原理究極基礎(chǔ)部分,不詳述.
需要注意的是,由于在OFDM中為多載波調(diào)制,各子載波可以選擇不同的調(diào)制方式,而協(xié)議中對不同信息域的信息也會采用不同的調(diào)制方式,所以這個在后面具體實現(xiàn)時會再說.
同時,由于OFDM僅規(guī)定了子載波的頻率與帶寬,所以我們可以進(jìn)行
- 相位的調(diào)制如:BPSK,QPSK
- 相位幅度聯(lián)合調(diào)制:16QAM,64QAM
那這個時候就會引入星座圖,然后根據(jù)星座圖畫接收域,就可以實現(xiàn)解調(diào)了.
而! ,在前一節(jié)中介紹到OFDM系統(tǒng)具有峰均功率比(Peak-to-Average Power Ratio,OAPR)的問題,所以僅實現(xiàn)幅值上的調(diào)制是不是就有點虧啊.所以類似在第一節(jié)中的ASK-OFDM就不會太常見.
導(dǎo)頻插入與信道均衡
在802.11a或是其他協(xié)議中,在通信開始前都有訓(xùn)練序列以進(jìn)行信道均衡,但是在OFDM中對頻偏是很敏感的,因為他會破壞載波間的正交性,所以我們需要浪費一些子載波插入導(dǎo)頻,降低隨時間增長的對頻率估計的偏差.
多普勒頻移
除了多徑等對頻率的影響,還有一個重要的比較重要的影響因素就是多普勒頻移.他指的就是發(fā)送機(jī)位置的移動將對接收機(jī)的頻率估計進(jìn)行影響.圖解如下:
在維基上有對其他狀態(tài)的討論,可見于參考文獻(xiàn).
熱心網(wǎng)友的證明
僅針對 接收機(jī)不動,發(fā)送機(jī)移動的情況:
已知:
在一個波內(nèi),光源的速度變化乘以波的周期等于波長變化
高鐵上要怎么辦呢?
剛聽完鄭同學(xué)的講解啊,我想的就是 高鐵要咋辦呢?這么高速的情況下,應(yīng)該頻偏會很嚴(yán)重吧.
然后去查了一下,現(xiàn)在主要的方式就是結(jié)合MIMO配合Moose,S&C,CP等算法進(jìn)行進(jìn)行頻率的補償,這里不細(xì)說了,大家有興趣的話可以看一下參考文獻(xiàn)
高鐵場景下OFDM_MIMO系統(tǒng)多普勒頻偏估計算法研究^[5]^
網(wǎng)友的疑問
那你這個 導(dǎo)頻插入和信道均衡 在哪啊?
實際上這個導(dǎo)頻插入大家可以短淺理解為DDS,導(dǎo)頻產(chǎn)生可以回看我之前寫的DDS:
基于FPGA的兩路信號發(fā)生器-CSDN^[6]^
至于信道均衡的話,在這里具體包括四個方面的內(nèi)容:
- 長訓(xùn)練符號提取(LTS Picking)
- 能量計算(Energy Compute)
- 信道估算(Channel Estimating)
- 信道補償(Channel Compensating)
跟Viterbi算法一樣,理論很多,實現(xiàn)很難,還是等到具體實現(xiàn)的時候再慢慢談吧
IQ調(diào)制
在完成數(shù)字調(diào)制,即星座圖映射之后,現(xiàn)在必然存在實數(shù)I和復(fù)數(shù)Q域,在最后發(fā)送前,我們需要將這兩路信號合并,他的實現(xiàn)思路其實很簡單,就是要維持他們的正交性:
802.11a下的標(biāo)準(zhǔn)
這里主要就是 圖多.
主要參數(shù)設(shè)定
在802.11a中,可以根據(jù)應(yīng)用的情景不同選擇不同的調(diào)制方式實現(xiàn)不同的數(shù)據(jù)速率和不同的編碼效率,其中編碼效率的變換在上文的卷積碼中已經(jīng)提到了.
可見一個OFDM符號中有52個子載波,但其中4個為導(dǎo)頻信號,即只有48個子載波進(jìn)行數(shù)據(jù)傳輸.而一個OFDM符號位4us,而保護(hù)間隔位0.8us.即用于數(shù)據(jù)傳輸?shù)臅r間為3.2us.即子載波間隔為:
物理層協(xié)議單元(PPDU)幀結(jié)構(gòu)
在802.11a中,相關(guān)的幀結(jié)構(gòu)如下:
訓(xùn)練序列
其中,PLCP(Physical Layer Convergence Procedure),可見PLCP Preamble為前導(dǎo)碼,具體每位定義如下:
在前導(dǎo)碼中分為兩種訓(xùn)練序列:
- 短訓(xùn)練符號(Short Training Symbol,STS)在t1-t10上周期重復(fù).但不是所有子載波都需要這個,只要其中的{-24,-20,-16,-12,-8,-4,4,8,12,16,20,24}
- 長訓(xùn)練符號(Long Training Symbol,LTS)在T1-T2上周期重復(fù),其中圖上G12為兩周期保護(hù)間隔,T1和T2為完整ofdm信號周期,應(yīng)為3.2us,即圖示有錯.
具體符號內(nèi)容后續(xù)實現(xiàn)的時候再講,這里我們可以得到在發(fā)送時的訓(xùn)練序列為:
其中,按4個子載波隔開的是短訓(xùn)練序列,各個子載波都需要的是長訓(xùn)練序列,那4個長條的是導(dǎo)頻.
Signal域
接下來就到了Signal域,也就是PLCP Header部分.這一部分需要使用BPSK調(diào)制,而且碼率為1/2,即此時數(shù)據(jù)數(shù)據(jù)為6Mb/s,下面是signal域的結(jié)構(gòu)
其中,前四位為速率位,決定后續(xù)數(shù)據(jù)域的傳輸方式,對應(yīng)如下:
第五位為保留位,緊接著的是Length域,主要是MAC所需要發(fā)送的物理層服務(wù)數(shù)據(jù)單元(PSDU)的個數(shù).第17位為0-16位的偶校驗位.
18-23位全部置0,作用有2:
- 初始化卷積編碼器
- 終止Viterbi譯碼器的碼網(wǎng)絡(luò)(讓其走回開始狀態(tài))
需要注意: SIGNAL字段的內(nèi)容不加擾。
Data域
接著就到了數(shù)據(jù)域,其中包括服務(wù)域,PSDU,尾比特域和填充比特:
其中,Service的前7個比特設(shè)為了0,這里主要是為了初始化接收機(jī)的解擾碼器.其余的字段主要用于計算data域長度和維持時間,pad段為了填充數(shù)據(jù)幀為ofdm數(shù)據(jù)符號數(shù)整數(shù)倍.
其他細(xì)節(jié)可參看參考文獻(xiàn),這里主要介紹重要的協(xié)議標(biāo)準(zhǔn),其他細(xì)化的會在實現(xiàn)中說明.
與MAC交互過程
最后可以看看物理層與MAC層的交互,以發(fā)送過程為例:
評論