[轉載]MIMO技術雜談(四):OFDM那些事(未完待續)
OFDM那些事
在動筆之前,筆者百度了一下OFDM的定義。在百度百科中,找到了如下描述:
“OFDM(Orthogonal Frequency Division Multiplexing)即正交頻分複用技術,其主要思想是:將通道分成若干正交子通道,將高速資料訊號轉換成並行的低速子資料流,調製到在每個子通道上進行傳輸。正交訊號可以通過在接收端採用相關技術來分開,這樣可以減少子通道之間的相互干擾 ICI 。每個子通道上的訊號頻寬小於通道的相關頻寬,因此每個子通道上的可以看成平坦性衰落,從而可以消除符號間干擾。而且由於每個子通道的頻寬僅僅是原通道頻寬的一小部分,通道均衡變得相對容易。”
嗯,這個定義寫的很全面,這麼好的材料,不放到畢設論文的背景介紹中,實在是太可惜了。其實OFDM
哎喲,哪裡丟來的臭雞蛋?還有板磚!*&%……%¥#@@!…
呵呵,跟大家開個玩笑。其實讀了上面的描述後,我們一定還有很多的疑問:什麼叫“正交子通道”?怎麼做才能“把高速資料訊號轉換成並行的低速子資料流”?為什麼“子通道上的訊號頻寬小於通道的相關頻寬時,可以消除符號間干擾”?而“相關頻寬”、“符號間干擾”又是什麼呢?
在接下來的幾篇文章中,我們就來一起探究這些問題。今天,我們先做個“熱身”。既然OFDM可以消除符號間干擾(ISI,Inter-Symbol Interference),我們就來看看什麼是符號間干擾。
想象下面的場景:一個男孩和一個女孩隔山相望。男孩要向女孩表白,喊出那攝人心魄的三個字。在他們遠處,有另一座大山,能夠將他們的喊話形成回聲。就是說,男孩喊出的話,會經過兩條路徑傳到女孩的耳朵裡,一個原聲,一個回聲。當女孩聽到男孩喊出的“我”字的時候,“我”字的迴音還在路上。然而下一時刻,當“愛”字的原音到達女孩那裡時,“我”字的迴音恰好也到了。兩個聲音同時到達,混在了一起。我們假設“我”和“愛”兩個音混在一起會形成“討”字的音(這個假設實在是太壞了)。所以這一時刻,女孩聽到的是“討”字。同樣,再下一時刻,女孩會聽到“你”字的原音和“愛”字的迴音混疊在一起的聲音,假設這次她聽到的是“厭”字。最後,女孩聽到 了“你”字的迴音,轉身就走了。
圖1 “迴音”的例子
好好的一句“我愛你”卻因為回聲的存在,被活活“翻譯”成了“我討厭你”,讓相愛變成了分手。在現實無線通訊中,“符號間干擾”就扮演著“回聲”的角色。在傳送端和接收端之間,常常存在著不止一處的反射物,發出的訊號經過這些物體的反射、折射,會經過不同的路徑到達接收端,也就是我們常說的“多徑傳播”。路徑不同,傳播的距離自然不同,訊號到達接收端的時間也就不盡相同。如果這一時刻發出的符號因為多徑,延遲到了下一時刻才到達,就會與下一時刻的符號發生混疊,造成符號無法正確解出,這就是“符號間干擾”,也叫“碼間串擾”。
通過上面簡單的例子,我們已經感性的瞭解了“回聲”干擾“原聲”的成因。而且也能直觀的感覺到,要想避免兩個聲音的干擾,男孩只要放慢喊話的速度就好了,等一個字的所有回聲都傳遞到了女孩耳朵裡,再喊出第二個。這樣一來,女孩聽到的就是“我,我…,愛,愛…,你,你…”,無非是多聽了幾個重複的字而已,不會因為出現字和字之間的干擾而造成誤會。但是,我們回看百科中OFDM
不要忘了頻寬的單位是赫茲(Hz),而赫茲代表的數學含義是秒分之一(1/s),就是一秒鐘發生的次數。所以當我們說一個訊號的頻寬是10Hz,從離散域來看,可以理解為每秒有10個取樣點,換句話說,每隔0.1秒,就會到來一個取樣符號。現在我們把頻寬的意義轉換到時間域,再來解釋碼間串擾發生的條件,就好理解許多。既然每隔0.1秒就會到來一個符號,那麼如果多徑造成的最大時延小於這0.1秒,自然不會對下一個符號形成干擾;但如果多徑時延大於了0.1秒,就會引起碼間串擾。碼間串擾發生的條件,就和多徑時延對應上了。而這0.1秒,就是碼間串擾發生的臨界條件。
圖2 “碼間串擾”的形成條件
我們不妨假設時延恰好在符號發出0.1秒後到達,這樣,時延發生的頻率,也是10Hz,而“時延的頻率(準確的說是最大時延的頻率)”就是“相關頻寬”。顯而易見,當“相關頻寬”等於“訊號頻寬”時,恰好會發生碼間串擾。如果時延很短,比如0.01秒後就到達,對應的“相關頻寬”是100Hz,大於“訊號頻寬”,碼間串擾就不會發生;如果時延很長,在符號發出後0.2秒才到達,“相關頻寬”是5Hz,小於“訊號頻寬”,碼間串擾將不可避免。
圖3 具有多徑時延的傳播環境
有了這些基本概念,我們重新考慮一下之前找到的從時域上規避碼間串擾的方法。依然假設訊號的頻寬是10Hz,這次假設有兩個反射體,分別將訊號延時0.1秒和0.2秒。我們可以設計這樣的傳送策略,即每隔0.2秒才發出一個新符號,這樣,前一個符號就不會對下一個符號造成干擾了。而且,每發出一個符號,我們可以在之後的0.1秒和0.2秒分別收到該符號的兩個副本,這不就相當於利用多徑做了一次“純天然”的分集麼?在“猶抱琵琶半遮面--MIMO通道中隱藏的祕密”中,我們提到過,如何充分利用各種資源,實現“變廢為寶”,實乃一大學問。在這裡,原本討厭的多徑又一次幫了我們的忙,“免費的”對傳送符號進行了分集處理(注,多徑帶來的分集,從本質上講,是一種“頻率分集”)。但是別忘了,天下沒有白吃的午餐,我們來仔細盤算一下享受免費“多徑分集”的背後,付出的代價是什麼。
圖4 頻率分集
為了躲避碼間串擾,並且獲得多徑分集,我們每隔0.2秒(即每0.3秒)才發出一個符號,這不就相當於把原訊號的頻寬從10Hz降到了約3.33Hz(1/0.3)麼。而相關頻寬是5Hz(1/0.2),哦,原來這種傳送策略的實質是人為的讓訊號頻寬小於相關頻寬,來避免碼間串擾的發生啊。這麼做雖然能獲得一些分集增益,但原來每秒能傳10個符號,現在只能傳不到4個,犧牲了太多的系統速率,實在有些不划算。
圖5 躲避“碼間串擾”的代價
看來,要想在充分利用資源的條件下,還獲得分集增益,碼間串擾是想躲也躲不掉了。我們只有一條路可以走,那就是“幹掉”碼間串擾!下一回,我們就來看OFDM是怎麼消除碼間串擾的。
書接上回。上一篇我們說到了“碼間串擾”,還留下了一個問題,那就是如何在不降低訊號頻寬的情況下,克服碼間串擾的影響,順便再獲得點“頻率分集”增益呢?今天我們就來聊聊這些話題。
圖1多徑傳播環境
來看圖1描述的傳播環境,假設從傳送方到接收方一共有三條傳播路徑,通道增益分別為h1,h2和h3。其中路徑2和3分別會對訊號延時1個和2個時刻。即,在第一時刻,接收方會收到經過直視徑到達的訊號X1(不考慮噪聲) :
Y1 = h1 × X1;
第二時刻,接收方收到來自直視徑的X2和經反射徑1延時到達的X1:
Y2 = h1 × X2 + h2 × X1;
可以看到,碼間串擾已經發生。同理,在第三時刻,接收方收到的訊號是
Y3 = h1 × X3 + h2 × X2 + h3 ×X1;
以此類推。熟悉“訊號系統”的朋友一眼就看出來了,這其實就是輸入序列X=[X1,X2,X3…]與通道響應h=【h1 h2 h3 】做了一個卷積,Y = h * X。所以卷積是描述多徑傳播最漂亮的數學表達。但是卷積的表示式仍然太繁瑣,我們不妨來做一個轉換。
我們把上面描述的傳播環境想象成一個3發1收的MISO系統,那麼,上述3條多徑通道響應【h1 h2 h3 】就可以看成從3根傳送天線分別到接收天線間的直視通道響應,如圖2所示。我們設計以下的傳送策略:第一時刻,從天線1傳送符號X1,這時,接收端收到的就是:
Y1 = h1 × X1;
第二時刻,從天線2傳送X1,從天線1傳送X2,接收訊號是:
Y2 = h1 × X2 + h2 × X1;
第三時刻,從天線3傳送X1,天線2傳送X2,天線1傳送X3,我們有:
Y3 = h1 × X3 + h2 × X2 + h3 ×X1;
以此類推。很明顯,這與卷積的表示式一模一樣。現在我們把具有碼間串擾的多徑傳播環境轉換成了熟悉的多天線MISO系統,形式上比較好理解,更重要的是,我們可以使用多天線的技術來處理碼間串擾了。
圖2將多徑傳播轉換成MISO系統
在著手“幹掉”碼間串擾之前,我們先來看一個有趣的例子,幫助我們直觀的理解消除碼間串擾時,所採用的思想。
正月十五,筆者和爸爸媽媽去看燈展。這次燈展,有三盞最漂亮的大花燈並排放在最顯眼的展臺上。筆者很想去展臺上和三盞燈合影,但參觀的人實在是太多了,管理員不得不做出以下規定:所有人排成一排,按順序從入口上展臺,每盞燈前面只能站一人,照完相後,從出口依次離開,每出去一人,就進來一人。
於是,筆者就去排隊了,爸爸媽媽在臺下給筆者照相。當某一時刻,筆者走上展臺,站在第一盞燈前的時候,其他燈前的遊客還沒有離開,筆者和三盞燈的合影就有了別人在旁邊“搶鏡”。同樣,在後面兩個時刻,有人出就有人進,筆者始終無法單獨和三盞燈來一次完美的合影,甚是鬱悶。
圖3 筆者受到其他人干擾,無法和三盞燈合影
當然,這點小事難不倒筆者,我想,既然沒有辦法單獨和三盞燈合影,那麼與其身邊站著其他人,不如和自己人一起照。於是筆者把相機交給好心人,拉著爸爸媽媽一起去排隊了。這一次,雖然剛上展臺的時候,有遊客干擾,但是總有一個時刻,展臺上只有筆者和爸爸媽媽三人,我們開開心心的來了一張合影。
此時筆者玩心大發,一張合影還不滿足,筆者想分別站在三盞燈下,和爸爸媽媽來三張合影。於是筆者拉著爸爸媽媽又一次去排隊了。這次,當筆者站在第3盞燈下和爸爸媽媽完成第一張合影後,迅速從出口跑出,繞回入口,緊跟著媽媽再次登上展臺(可愛的管理員也不忍心阻止筆者的行動),這樣,筆者就在第一盞燈下,又來了一張合影;緊接著,筆者的爸爸也迅速繞回入口,跟在筆者後面再次上了展臺,就這樣,我們完成了分別在三盞燈下合影三次的願望。
圖4 筆者和父母完成了合影的願望
看完上面的例子,大家是不是已經被筆者“繞”暈了?呵呵,沒關係,我們只要知道筆者是如何“擠”掉其他人,讓臺上只有我們三人,並且如何通過“迴圈”入場,獲得三次合影機會的,就可以了。因為無線通訊中,“幹掉”碼間串擾,用的也是這兩招:
(1)把連續多個符號看成一組,一起進行處理,“擠”開碼間串擾。這樣碼間串擾就只會發生在開頭和最後的幾個符號上,中間的都是“自己人”,不受影響。
(2)通過在這一組符號的開頭或最後設定“迴圈字首”,幹掉碼間串擾。
我們把這兩招用數學語言,重新進行描述。仍然考慮開篇的傳播環境,這次我們把X1,X2,X3看成一組,並在前面加上“迴圈字首”X2,X3,形成【X2,X3,X1,X2,X3 】。然後與通道響應【h1 h2 h3】進行卷積,過程如下:
圖5 卷積過程和“燈盞”例子的類比
圖6 卷積過程的矩陣表達
我們一共能得到7個時刻的方程,但最後兩個說的是本組符號對下一組符號造成的干擾,那就留給下一組符號去解決吧。我們只看前5個時刻。很明顯,碼間串擾發生在前兩個時刻Y1,Y2(通道矩陣中0元素的位置就是干擾符號出現的位置,因為我們沒有把干擾符號寫進方程,所以該位置是0)。沒關係,受到干擾的符號我們刪掉,不要了。剩下三個時刻的方程,我們仔細一看,這不就是一個3發3收的MIMO傳輸方程麼?我們曾經把多徑傳播環境轉換成了MISO系統,現在又轉換成了MIMO系統!
圖7 得到3x3 MIMO系統的過程
說到MIMO系統,我們太熟悉了,至少,我們也花了三大篇文章詳細的解釋過了。還記得“知己知彼,百戰不殆--通道資訊的獲取和應用”中我們介紹的內容麼?MIMO系統的最佳傳輸矩陣是什麼?沒錯,是對角陣。怎樣才能獲得對角陣呢?對通道矩陣H進行SVD分解,得到H=U·S·V,其中S就是對角矩陣;接下來,就是用V的共軛轉置V*對傳送訊號進行“預編碼”,接收端在收到資料後,同樣乘以U*,這樣一來,傳送的符號就像進入了獨立平行的正交子通道,互不干擾。(對這部分內容不熟悉的朋友可以在本論壇內找到“知己知彼,百戰不殆--通道資訊的獲取和應用”。)
圖8 MIMO雜談三中提到的預編碼過程
現在我們拿到了一個等效的3x3 MIMO傳輸系統,當然也可以按照上述過程來處理它。於是,我們對通道矩陣H進行SVD分解----此時此刻,本文最大的懸念就要揭曉了----注意矩陣H的特殊結構,因為我們對傳送資料添加了迴圈字首,所以H的每一行就有一個“迴圈位移”,擁有這種“迴圈位移”結構的矩陣叫做“迴圈矩陣(Circulant Matrix)”。迴圈矩陣的一個重要特性就是:對它進行SVD分解後,得到的左酉陣U是“逆傅立葉變換矩陣”(我們用W-1來表示,即U = W-1);而右酉陣V是“傅立葉變換矩陣”(V = W,注:一組資料乘以“傅立葉變換矩陣”,就相當於對該組資料進行了傅立葉變換,並且有W-1W= WW-1=I)!
圖9 迴圈矩陣的SVD分解
這就是說,如果我們對一組資料先進行 “逆傅立葉變換”,新增“迴圈字首”,再送入多徑通道;接收端刪除掉受干擾的“迴圈字首”後,做一個“傅立葉變換”,得到的資料就好像經過了獨立平行的正交子通道,彼此之間不受任何干擾。而整個這一套處理流程,不正是“OFDM”麼?呵呵,我們一整篇文章好像都在說MIMO,直到最後時刻才讓OFDM出場,OFDM同學一定等急了吧?
我們來梳理一下OFDM的處理流程:首先,對一組傳送符號進行“逆傅立葉變換”--相當於MIMO系統中的“預編碼”;然後,新增“迴圈字首”--為的是讓傳輸矩陣H變成“迴圈矩陣”,最後送入多徑通道;接收端捨棄受到干擾的“迴圈字首”--碼間串擾就這樣被幹掉了;再做一個“傅立葉變換”--相當於MIMO中對接收訊號乘以U*;得到的符號就像經過了互不干擾的正交子通道。
圖10 OFDM和MIMO的對比
通過這樣的類比,我們猛然發現,“原來OFDM其實也是MIMO啊”。兩者的區別在於:MIMO中,對通道H進行SVD分解,需要知道H具體內容;而在OFDM中,預編碼矩陣(即“逆傅立葉變換矩陣”)不依賴於
OFDM那些事
在動筆之前,筆者百度了一下OFDM的定義。在百度百科中,找到了如下描述:
“OFDM(Orthogonal Frequency Division Multiplexing)即正交頻分複用技術,其主要思想是:將通道分成若干正交子通道,將高速資料訊號轉換成
Rust的型別系統藉助其結構化型別和特徵從功能世界中借鑑了很多。 型別系統非常強大:型別不會在引擎蓋下發生變化,當某些東西需要型別X時,你需要給它型別X.此外,型別系統是靜態的; 幾乎所有的型別檢查都是在執行時完成的。 這些功能為您提供了非常強大的程式,在執行時
1、簡介
對於資料訪問層,無論是SQL還是NOSQL,SpringBoot預設採用整合SpringData(SpringData是Spring 的一個子專案。用於簡化資料庫訪問,支援NoSQL 和 關係資料儲存。其主要目標是使資料庫的訪問變得方便快捷)的方式進行 async def cee outer keyboard 補充 調用 enter err 本文根據Python 3.6.5的官文Built-in Exceptions編寫,不會很詳細,僅對Python的內置異常進行簡單(重難點)介紹——很多異常都可以從名稱判斷出其意義,羅列 摘要: 本篇部落格僅作為筆記,如有侵權,請聯絡,立即刪除(網上找部落格學習,然後手記筆記,因紙質筆記不便儲存,所以儲存到網路筆記)
一維陣列:
(1)靜態
int array[100]; //定義了陣列array,並未對陣列進行初始化
int array[100] = {1,2}; //定義並 摘要: 本篇部落格僅作為筆記,如有侵權,請聯絡,立即刪除(網上找部落格學習,然後手記筆記,因紙質筆記不便儲存,所以儲存到網路筆記)。
兩種刻畫溫度的不同體系:攝氏度(C)、華氏度(F)。
問題分析:直接將溫度值進行轉換。
--劃分邊界(IPO):
(1)輸入(I):帶華氏度或攝氏度 tex ora 相對 設置 erl 思路 實現 多列 寬度 一、HTML與XHTML的不同:1)XHTML元素必須被正確地嵌套
2)元素必須被關閉 如:<h1>……&l 提升 isp pla blog sso 相關 學習機 you mage 在學習機器學習的過程中,我陸陸續續收集了些免費的教程資料,希望能和您共享。
如果您有好的網站希望分享就評論吧,我也會整理到文章中。
1 機器學習基礎篇
(1)課程資源
吳恩達《機器學習》cou 表示 部分 round sub 常用 內部 換行 jquery 頁面 一、HTML編輯工具:Sublime Text
二、HTML實體字符:1、( 空格): ; 2、(<) <; 3、(>)>; 4、(&)& math 變換 $1 教材 com 考試 b- lambda rda 本文收集了從 2009 年至今復旦大學數學學院高等代數歷屆期中考試精選的大題, 其中有的大題由習題課老師或任課老師自編而來, 有的大題由其他大學的教材或學習指導書中的題目或考研試題改編而來, 也有相當部分 地址 關於 們的 type ++ ole 進行 ray nbsp 我們知道,Array.prototype上有一個slice()方法,可以對數組進行克隆,但是這個方法並不完美。如果一個數組是一維數組,使用slice()方法沒有任何問題,但如果是一個多維數組,那麽這個方法就不 += windows ble 之前 返回值 nbsp 最小值 標準 logs 輸入一些整數,求出它們的最小值、最大值和平均值(保留3位小數)。 輸入保證這些數都是不超過1000的整數。
樣例輸入:
2 8 3 5 1 7 3 6
樣例輸出:
1 8 4.375
#incl 樣本 源碼解析 單元 最小 size 傳遞 strong 統一 news caffe源碼閱讀雜記
準備
一些參考網頁
Neural Networks and Deep Learning
TUTORIAL ON DEEP LEARNING FOR VISION
Deep may num eth front exit import dea org island
1 #-*- coding: UTF-8 -*-
2 from sys import exit
3 #作出判斷選擇進森林還是出海冒險
4 def start():
onload light ++ com targe foo sharp () jquer
<script src="~/js/jquery.min.js"></script>
<script>
蘊含 必須 asc 工具 過程 更多 關系圖 本地服務 spa 這些天在項目之余的時間學習了webpack打包項目的東西,非常榮幸的找到一些大神的文章來學習,死勁嚼了幾天,終於略知一二。在以後的工作上還需繼續學習,下面我將分享我這幾天學到的一點東西,希望能讓我一個還不算 小結 body 補充 代碼 寫作 體積 性能優化 logs 一點 這裏是我從網上的一篇文章看過來的,這裏先做一點小結,之後再補充。
1.CSS渲染規則
今天在微博的一篇文章上看到的,之前我都以為渲染是從左往右渲染。發現我的想法是錯的。之所以采用從右往左的渲染規則,是因為這樣 bin image alt job 模塊 加強 ont .sh 問題 Exp2 後門原理與實踐
實驗環境
攻擊機
kali 4.14(64位) (IP: 10.0.2.6/24)
靶機
ubuntu 16.04(32位) (IP: 10.0.2.4/24)
windo foo ons enter ++ har HA CI return include 1.
#include <iostream>
const int CONVER_FACTOR = 12;
int main(int argc, char* argv[]){ in blog get baby 很好 shell 知識 nbsp mysql .cn C:
C++:
Python:
可變對象與不可變對象:http://www.cnblogs.com/xybaby/p/7208496.html
Shell:
MySQL:
相關推薦
[轉載]MIMO技術雜談(四):OFDM那些事(未完待續)
Mastering_Rust(譯):型別(第四章)(未完待續)
SpringBoot(四):SpringBoot與資料訪問(未完待續)
Python基礎:內置異常(未完待續)
<C++學習十四>陣列(未完待續)
<Python基礎學習三>例項1:“溫度轉換”問題分析(未完待續)
web前端開發面試題(未完待續)
(未完待續)機器學習教程視頻資料匯總
HTML基礎知識(未完待續)
復旦大學數學學院高等代數歷屆期中考試大題精選(未完待續)
關於數組的深度克隆(未完待續)
輸入輸出框架(未完待續)
讀caffe源碼(未完待續)
ex36 自己編的一個冒險小遊戲(未完待續)
關於閉包(未完待續)
0基礎手把手教你搭建webpack運行打包項目(未完待續)
CSS寫作建議和性能優化總結(未完待續)
Exp2 後門原理與實踐(未完待續)
C++ Primer Plus第六版編程練習---第3章 處理數據(未完待續)
常用卻易忘的知識——講解的很好的博客索引整理(未完待續...)