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