碼分多址(CMDA)的本質-正交之美
本文轉載自 : 碼分多址(CMDA)的本質-正交之美
引子:
CDMA是個很重要的通信概念,很多的大學教科書上都會提到它,甚至我們今天可能都在使用它。然而提到cdma,很少有資料提到它的思想是多么的有創意,教科書上關於cdma的章節都過於復雜,過於數學化,雖然也有一些簡便的描述方式,但是卻幾乎沒有資料揭示cdma是多么的簡單,實際上它比其他很多的概念都要更簡單。
如果僅僅希望理解諸如cdma的概念而不得不去學習一大堆數學是很悲哀的事情!如果最終你費了九牛二虎之力把數學推理過程搞明白了,你對數學本身的理解將超過你對cdma的理解,本來數學僅僅是為了幫忙理解cdma,可是最終卻反客為主了。我認為理解一個概念最好不要從數學開始,數學化的東西只是一個總結,一種表述方式罷了,正如音樂的實質不在五線譜原理和簡譜助記法而在旋律本身一樣,我敢肯定任何科學理論的提出都不是從數學開始的,但是卻總是歸於數學,正如任何偉大的音樂作品只從音樂本身開始,偉大的美術作品的作者不需要事先研究配色原理一樣。記住,數學只是工具!
一.開始吧,從吉普賽紙牌開始
小的時候,我們都玩過吉普賽紙牌,用來算自己某天會不會有“桃花運”,這種紙牌算出來的桃花運像魔咒一樣,使靦腆的你對你喜歡的小女孩說“我喜歡你”(我就這么玩過,結果很尷尬...),不知道為什么這種游戲現在沒有人玩了。表面上每張牌上寫滿了亂七八糟的文字,如下圖:
然而當你用一張挖有小洞的紙牌罩在寫滿字的紙牌上的時候,你會發現上面寫着一句話,如下所示:
這種游戲也許和我們現在玩的《憤怒的小鳥》之類的相比有點傻,然而它確實是一個古老的游戲,本文的目的不是為了揭示游戲原理,而是它有助於我們理解cdma。
我們把寫滿文件的紙牌看做是“僅有一個有效信號,其它對於接收者來講全是噪音”的疊加信號,而挖有小洞的紙牌就是分配給每一個人的“碼”,每一個“碼”都不同,因此當用這些碼罩到疊加信號上時,能顯示出的只是我們感興趣的信息,比如“你有桃花運”。就這么簡單,所有的信號盡管發過來好了,我不怕干擾,因為我用我的“碼”可以解出發給我的信息。
顯然,如果一張牌上能寫100個字,每句有意義的話有5個字,那么我們就可以設計出20張挖有小洞的紙牌作為“碼”,每張紙牌上有5個洞,能通透5個字。如果沒有“碼”,100個字看起來就是亂碼,因此這種方式還起到了一定的信息加密的作用。20個碼分給20個人,就可以通信了,在和對方交換信息前,先用對方的碼把信息填到相應的位置,對方收到后就自己的碼往紙牌上一罩,結果就出來。
所謂的碼分多址最終就歸於一副吉普賽紙牌上。很簡單吧
三.該我們自己設計了
大自然已經設計了我們的大腦這種高度復雜的“碼分多址設備”,我們當然使用這個設備也能造出一個克隆體,如果我們就是上帝,那么我們希望造出和我們一樣的東西,因此碼分多址技術是必然要出現的,如果你不承認它是一種創意,起碼它也是我們自身的印照!
通過吉普賽紙牌,我們發現,碼分多址的要點在於諸多的“碼”本身是不能互相干擾的“掩碼”,它有兩個特點:
- 一是碼之間兩兩不能互相干擾(因為不能在紙牌的一個位置寫下兩個不同的字);
- 二就是它們是掩碼,所謂的掩碼就是將不需要的信息“掩去”。
這就是要點,我們只要能設計出類似的編碼規則就可以了,這難道很難嗎?
理解了上述的“碼”的兩個基本特征之后,接下來再考慮數學實現也不遲,我當然還是試圖不使用數學,期望在全文中不提什么“沃爾什函數”,“正交”,“卷積”之類的概念,可是我覺得還是有必要闡述一下,因為第一,正交的概念真是太美了,一下子就把上述兩個特征都實現了;第二,不使用那些復雜的推導過程也能理解上述的數學概念,沒有學過微積分和矩陣原理也沒有問題。
四.為什么需要數學
任何領域幾乎都需要數學,數學確實是一個好東西,它不僅僅是一種工具,它還是一種大腦訓練操。因為它足夠抽象 ,能夠很方便的建模,使各領域的設計師將精力集中在該領域本身,純邏輯和純理論抽象的部分交給數學來解決,由於現代數學是建立在一整套很嚴密的邏輯的基礎上的,因此它的結論一般不容置疑(當然不要考慮哥德爾考慮的問題,那是數學家和邏輯學家的工作),而且在數學推理過程中,可以排除特定領域的概念干擾,比如在基於牛頓第二定律計算運動物體速度時,可以排除接觸面粗糙程序,阻尼等物理概念。數學完全符合高內聚低耦合的特征, 因此雖然數學看起來很令人討厭,然而當你熟悉了它之后,它真的很有趣!能使我一心一意工作的誘惑有兩個,一個是加薪,另一個就是數學,真的是這樣(雖然平時不怎么使用數學,然而數學帶來的不是知識本身,不是會背幾個公式知道幾個名詞,值得享受的是思考的過程和從中總結出的“道”)。
然而切記,只有兩種情況下使用數學,一種是你在體驗數學本身,二是你使用它描述或者解決問題,並且此時你已經徹底理解了問題的本質。(有些頂級草根黑客認為代碼需要想到及寫出,然后慢慢修改調試,正如畫油畫一樣,而大部分公司的經理卻厭惡這種論調,他們總希望你在編碼之前先提交一堆文檔,然后等到最后再用最短的時間編碼,這也許就是藝術和技術的區別吧?)
五.先從最簡單的情況看起
如果問一個初中生,力是如何合成的,如何分解的,他會馬上說出矢量,正交,坐標系,cos,sin等概念,既然初中生都明白力是怎么合成的,那么咱們作為一群大學都畢了業好幾年的家伙,怎能不知呢?你如果否定,那既然你知道力是如何合成和分解的,怎么就不能理解碼分多址呢?
考慮最簡單的只有兩個碼的碼分多址中,疊加的信號就是一個兩個個力的合力矢量,而特定用戶解出的屬於自己的信息就是該合力在一個坐標軸上的分力,他們使用的“碼”就是坐標軸上的單位矢量,且坐標軸是正交的(相互垂直的笛卡爾坐標系)。如下圖:
很簡單吧,實際上也真是這么簡單。回憶吉普賽紙牌,是不是很一致呢,我們可以設紙牌上可以寫20個字,一個作為碼的紙牌上可以挖10個洞,只要兩張挖洞紙牌上的洞的位置不重合,那么可以認為這兩張挖洞紙牌就是正交的。第二個特征是掩碼,實際上可以通過正交推理出來,因為正交概念本身就是井水不犯河水的關系,順着笛卡爾坐標系的x軸向原點望去,你只能看到y軸,而看不到x軸,反過來沿着y軸向原點看,你也只能看到x軸,是不是掩碼的意思呢?一個正交的概念解決了兩個問題。如下圖:
以合力解釋這個疊加信息的編碼是很容易理解的,合力僅僅是實際力的合成,是實際力-垂直力和水平力的承載體,以力的效果來說明它們互相不干擾就是:水平力不會造成物理在垂直方向有位移,垂直力也不會造成物體在水平方向有位移,應用在信息上,用戶A使用碼X編碼的信息i1和用戶B使用碼Y編碼的信息i2最終疊加成了I,也就是合力,然而某一用戶如果使用碼X將信息I分解,它得到的將是i1,對i2絲毫沒有影響,為什么呢?因為碼X和碼Y是正交的,正如上述的X軸和Y軸正交一樣。
六.稍微擴展一點正交,沒想到,就這樣結束了
歸納能力是人類特有的能力,有趣的是,人們歸納曾經發生的過事的目的恰恰是為了預測未來的事。 笛卡爾坐標系是歐幾里得空間的正交系,它可以解決和解釋大量的問題,然而直到17世紀,數學仍然沒有作為一個獨立的學科發揮巨大的作用,原因正是到那時為止,數學太形象化了,直到微積分和希爾伯特空間被提出來,數學才從具體的學科中被抽出來,專門向更抽象和邏輯性更強的方向發展。 這種發展最終反過來影響着具體的學科,受其影響最大的學科就是物理學和信息學了。
如果大家理解了上述的枝枝蔓蔓,此時就可以一頭扎進數學了,但是注意,千萬不要戀戰,點到為止,再次重申,數學只是工具,除非你想專門研究它!
既然二維的笛卡爾正交系可以抽出兩個正交量從而形成兩個所謂的“碼”,那么如果有一個正交系有N個正交量,那么不就是說有N個“碼”了嗎 ?是的,確實正確!並且這樣的正交系是存在的,數學作為工具在此發揮了作用。
要講述正交的概念,很多教科書本着先導出概念的原則先講述了向量,然后講述了內積之類的概念,最終告訴你內積為0的兩個向量是正交的,當你得到這個答案的時候,你可能已經被內積以及之前的概念搞糊塗了,或者已經厭煩了,已經忘記了當初為何需要知道什么是正交,以及需要正交的哪些性質,因此這種教育方式對於喜歡科學探索的家伙來講無疑是毒葯!什么是正交呢?簡單點說兩個正交量肯定是相交的,也就是有聯系的,但是這種聯系很“正”, 也就是除了在交點發生關系之外,其它哪里都不發生關系,只要滿足這兩點都是正交的量,對於二維空間,直角坐標系的x軸和y軸在原點相交,它們又彼此垂直,彼此在對方沒有任何分量,因此它們正交。對於超過3個的多個量,只要滿足“相關聯”,“關系很正”這兩個性質都屬於正交量,因此理解了這一步,我們看看數學語言是如何描述它的,對於連續量,使用積分來描述,對於離散量來講,就更簡單了,如果我們設空間有M個分量,那么一個向量將表示為:
這就是多維空間的正交向量,就這么簡單。如果我們把這樣的向量作為“碼”分給每一個用戶,那么用戶用這個向量碼和自己的標量信息做一個算術乘法,作為結果Rn,Rn顯然也是一個多維向量,然后所有的用戶的這些Rn加在一起:R1+R2+...Rm,最終形成一個M維空間的向量,這就相當於一個合力,信息到達接收端后,用戶只需要將“合力”分解到自己的“碼”上就可以了,注意,為了使運算簡單,最好使用單位向量作為碼。
六.構造多維正交向量
原理就是這么簡單,可是我們怎么去構造這么一組向量滿足式子(1)然后從而分配給用戶呢?如果你獨自思考問題到了這個地步,接下來你要干什么你自己就很明了了,如果你覺得你是個天才,你就去自己去想個辦法,如果你覺得你只是想弄明白cdma的原理或者在搞一個新的編碼或者別的,那么你肯定去閱讀相關的數學資料了。看到了嗎?我們第二次使用數學,前一次搞明白了希爾伯特空間向量,這次我們需要搞到一個簡單的,且能得到多個正交的向量的方法,是什么呢?哎,最終還是要提到沃爾什函數,Ahha!
和大多數教科書一樣,我將“1”換成了“+”,將“-1”換成了“-”,沃爾什矩陣中只有“1”和“-1”。
不管怎樣,先不管它的原理,看看任意兩行或者任意兩列,顯然是正交的,完全符合需求,然后,和那個力的合成和分解一樣,就算就可以了,超級簡單,在理解原理前,我們先看看如何進行cdma的核心編碼,當我們發現其簡單性之后,再來考慮原理,最終我們會為這一切配合的如此完美而嘆為觀止!
七.沃爾什編碼的簡單性使得CDMA大有前途
沃爾什矩陣如何編碼數據呢?我們知道數據都是0和1組成的,這就更好辦了。首先為每一個用戶分配一個N階沃爾什矩陣中的一行或者一列(要么全是行要么全是列),將數據的0,1序列和向量相乘,這是純粹是標量和向量的乘法,乘以分量即可,...(當然事實上沒有這么簡單,編碼問題什么時候都是很復雜的,然而本文主要幫助大家理解cdma的本質,而不是研究如何編碼)。我以一個實例結束核心討論:
- 用戶1的碼:a1=(-1 -1 -1 -1 1 1 1 1)--第2行
- 用戶2的碼:a2=(-1 1 -1 1 1 -1 1 -1)--第7行
- 用戶1的數據:d1=110
- 用戶2的數據:d2=010
下面開始編碼過程,假設發給用戶1和用戶2的數據疊加在一起。
用戶1的數據最終成為:
(-1 -1 -1 -1 1 1 1 1)|(-1 -1 -1 -1 1 1 1 1)|(0 0 0 0 0 0 0 0)
用戶2的數據最終為:
(0 0 0 0 0 0 0 0)|(-1 1 -1 1 1 -1 1 -1)|(0 0 0 0 0 0 0 0) ,
二者疊加后為:
(-1 -1 -1 -1 1 1 1 1)|(-1 -1 -1 -1 1 1 1 1)|(0 0 0 0 0 0 0 0)
(0 0 0 0 0 0 0 0)|(-1 1 -1 1 1 -1 1 -1)|(0 0 0 0 0 0 0 0)
(-1 -1 -1 -1 1 1 1 1)|(-2 0 -2 0 2 0 2 0)|(0 0 0 0 0 0 0 0)
最終結果是:
(-1 -1 -1 -1 1 1 1 1)|(-2 0 -2 0 2 0 2 0)|(0 0 0 0 0 0 0 0)
這個疊加的數據同時到達用戶1和用戶2,用戶1解碼的過程實際上是一個“力的分解”過程,如果是二維的情況,如果我們知道有一個“合力”是(a b),那么要求在x軸上的投影向量,我們該怎么辦?其實我們不必求投影向量,只求投影的長度即可,畢竟被編碼的數據是標量啊!這就更簡單了,隨便問一個初中生估計能得到最簡單的答案。答案就是:L乘以夾角的余弦值!
這個疊加的數據同時到達用戶1和用戶2,用戶1解碼的過程實際上是一個“力的分解”過程,如果是二維的情況,如果我們知道有一個“合力”是(a b),那么要求在x軸上的投影向量,我們該怎么辦?其實我們不必求投影向量,只求投影的長度即可,畢竟被編碼的數據是標量啊!這就更簡單了,隨便問一個初中生估計能得到最簡單的答案。答案就是:L乘以夾角的余弦值!
所以忘掉中學時的知識吧。如果我不進一步說明上述的公式是怎樣導出的,我還是落入了俗套,因此,我給出簡單的推導,哪怕是一點指點迷津的思路也行:
起初數據為k,然后和數據r一起被編碼並且疊加在一起,最終又恢復了k,一切使用的都是矩陣的加法和乘法運算,最幸運的是,這些運算都是很簡單的。
CDMA的本質理解了嗎?實際上,這種方式如此簡單的解決了碼分多址編碼問題,使用了這種方式之后,可以巧妙繞開那些相對復雜的變換或者逼近,比如傅里葉變換和離散余弦變換,因為再也不需要那種方式了,使用CDMA的方式可以使得頻譜越寬越有效,而且再也不用靠增加功率來傳輸信號啦,擴頻通信由來於此!
那么沃爾什矩陣究竟是怎么來的呢?可能是沃爾什本人靠他天才的大腦想出來的,也可能...最重要的是,如果理解了哈達瑪矩陣的話,理解沃爾什矩陣就簡單多了,因為哈達瑪矩陣是沃爾什矩陣的一種表述方式,它的最重要的特征就是其遞推性,從低階的矩陣可以推導出高階的,而且生成原則很簡單,僅憑如此它就比其它的編碼方式更具優勢,更別說它的碼分多址特性了。
八.凱撒加密和擴展的凱撒加密
在古代,如果手持一張羊皮紙,上面寫着亂七八糟的文字,然后如果有一個人拿着一張打着窟窿眼的羊皮貼到寫字的羊皮上之后,就能復原信息,窟窿眼在不同的位置,信息呈現就會有所不同,這是一種數據加密的方式,同時也是一種數據復用的方式,這叫什么呢?其實這就是碼分多址啊!因此碼分多址天生就和加密不可分,這種編碼方式天生具有安全性,究其深層原因,實質在於“碼”本身參與了編碼,而碼是特定區間內用戶唯一的,這個碼可以理解成密鑰,也可以理解成收發方作為一個整體共享的私鑰!
徹底理解了碼分多址的本質之后,發現它的簡單性以及優美原來來源於它靠向量本身編碼,我們提到向量覺得起碼得要二維才行,實際上我們更希望從1開始,想想看,一維數軸上的數字難道不是向量嗎?如果我們使用一維的向量來進行編碼,實際上就會發現這原來就是擴展的凱撒加密運算。
什么是凱撒加密呢?簡單的說,凱撒加密需要一個10進制的數字k作為密鑰,然后初始信息的每一個字母編碼為其在字母表中位置加上k的位置處的字母。
擴展的凱撒加密就是使用一個序列a1,a2,a3,...aM作為密鑰,然后將待加密的字母序列中每一個字母bN編碼為字母表中其所在位置加上aN的位置處的字母, 是不是和本文開始處的吉普賽紙牌很相似呢?沒有挖洞的吉普賽紙牌我們看不懂寫滿文字的吉普賽紙牌中的信息含義,因此吉普賽紙牌天生就有保密性的特性,且它和凱撒加密法又是如此相似,並且,更簡單的一個例子,如果一個吉普賽人在中國大罵,我們十有八九聽不懂他們的話,依然會微笑!
個人見解
這篇文章從自然的角度解釋碼分多址,而不是從數學的角度,十分地新穎,有趣,而且,其中包含着許多作者的見解,有趣。
實際而言,碼分多址就是利用正交來進行數據的處理。核心就是正交的定義以及解碼的原理。