碼分多址(CDMA)的本質-正交之美

引子: 
CDMA是個很重要的通信概念,很多的大學教科書上都會提到它,甚至我們今天可能都在使用它。然而提到cdma,很少有資料提到它的思想是多麼的有創意,教科書上關於cdma的章節都過於複雜,過於數學化,雖然也有一些簡便的描述方式,但是卻幾乎沒有資料揭示cdma是多麼的簡單,實際上它比其他很多的概念都要更簡單。
     如果僅僅希望理解諸如cdma的概念而不得不去學習一大堆數學是很悲哀的事情! 如果最終你費了九牛二虎之力把數學推理過程搞明白了,你對數學本身的理解將超過你對cdma的理解,本來數學僅僅是爲了幫忙理解cdma,可是最終卻反客爲主了。我認爲理解一個概念最好不要從數學開始,數學化的東西只是一個總結,一種表述方式罷了,正如音樂的實質不在五線譜原理和簡譜助記法而在旋律本身一樣,我敢肯定任何科學理論的提出都不是從數學開始的,但是卻總是歸於數學,正如任何偉大的音樂作品只從音樂本身開始,偉大的美術作品的作者不需要事先研究配色原理一樣。記住,數學只是工具! 
一.開始吧,從吉普賽紙牌開始 
小的時候,我們都玩過吉普賽紙牌,用來算自己某天會不會有“桃花運”,這種紙牌算出來的桃花運像魔咒一樣,使靦腆的你對你喜歡的小女孩說“我喜歡你”(我就這麼玩過,結果很尷尬...),不知道爲什麼這種遊戲現在沒有人玩了。表面上每張牌上寫滿了亂七八糟的文字,如下圖:
 
然而當你用一張挖有小洞的紙牌罩在寫滿字的紙牌上的時候,你會發現上面寫着一句話,如下所示:
 
這種遊戲也許和我們現在玩的《憤怒的小鳥》之類的相比有點傻,然而它確實是一個古老的遊戲,本文的目的不是爲了揭示遊戲原理,而是它有助於我們理解cdma。
     我們把寫滿文件的紙牌看做是“僅有一個有效信號,其它對於接收者來講全是噪音”的疊加信號,而挖有小洞的紙牌就是分配給每一個人的“碼”,每一個“碼”都不同,因此當用這些碼罩到疊加信號上時,能顯示出的只是我們感興趣的信息,比如“你有桃花運”。就這麼簡單,所有的信號儘管發過來好了,我不怕干擾,因爲我用我的“碼”可以解出發給我的信息。
     顯然,如果一張牌上能寫100個字,每句有意義的話有5個字,那麼我們就可以設計出20張挖有小洞的紙牌作爲“碼”,每張紙牌上有5個洞,能通透5個字。如果沒有“碼”,100個字看起來就是亂碼,因此這種方式還起到了一定的信息加密的作用。20個碼分給20個人,就可以通信了,在和對方交換信息前,先用對方的碼把信息填到相應的位置,對方收到後就自己的碼往紙牌上一罩,結果就出來。
     所謂的碼分多址最終就歸於一副吉普賽紙牌上。很簡單吧 
二.好吧,再看看別的例子 
除了吉普賽紙牌,其實我們每天都在接觸碼分多址:
1.大學剛開學的時候,軍訓時,在火車上,飛機上,大家聊天時,你能一耳朵聽出誰是你的老鄉,因爲有時候別人使用的方言你根本聽不懂,也就是說你沒有理解那種語言的“碼”,我們的大腦中天生擁有一種過濾母語或者方言的“碼”!
2.長途旅行中,你很困,旁邊的兩個傢伙嘰嘰喳喳說個不停,如果他們使用你聽不懂的語言,你照樣能睡着,但是如果他們說的是普通話,那你就完蛋了,那就忍耐吧
 
三.該我們自己設計了 
大自然已經設計了我們的大腦這種高度複雜的“碼分多址設備”,我們當然使用這個設備也能造出一個克隆體,如果我們就是上帝,那麼我們希望造出和我們一樣的東西,因此碼分多址技術是必然要出現的,如果你不承認它是一種創意,起碼它也是我們自身的印照! 
     通過吉普賽紙牌,我們發現,碼分多址的要點在於諸多的“碼”本身是不能互相干擾的“掩碼”,它有兩個特點:
一是碼之間兩兩不能互相干擾(因爲不能在紙牌的一個位置寫下兩個不同的字); 
二就是它們是掩碼,所謂的掩碼就是將不需要的信息“掩去”。
 

這就是要點,我們只要能設計出類似的編碼規則就可以了,這難道很難嗎?
     理解了上述的“碼”的兩個基本特徵之後,接下來再考慮數學實現也不遲,我當然還是試圖不使用數學,期望在全文中不提什麼“沃爾什函數”,“正交”,“卷積”之類的概念,可是我覺得還是有必要闡述一下,因爲第一,正交的概念真是太美了,一下子就把上述兩個特徵都實現了;第二,不使用那些複雜的推導過程也能理解上述的數學概念,沒有學過微積分和矩陣原理也沒有問題。 
四.爲什麼需要數學 
任何領域幾乎都需要數學,數學確實是一個好東西,它不僅僅是一種工具,它還是一種大腦訓練操。因爲它足夠抽象 ,能夠很方便的建模,使各領域的設計師將精力集中在該領域本身,純邏輯和純理論抽象的部分交給數學來解決,由於現代數學是建立在一整套很嚴密的邏輯的基礎上的,因此它的結論一般不容置疑(當然不要考慮哥德爾考慮的問題,那是數學家和邏輯學家的工作),而且在數學推理過程中,可以排除特定領域的概念干擾,比如在基於牛頓第二定律計算運動物體速度時,可以排除接觸面粗糙程序,阻尼等物理概念。數學完全符合高內聚低耦合的特徵, 因此雖然數學看起來很令人討厭,然而當你熟悉了它之後,它真的很有趣!能使我一心一意工作的誘惑有兩個,一個是加薪,另一個就是數學,真的是這樣(雖然平時不怎麼使用數學,然而數學帶來的不是知識本身,不是會背幾個公式知道幾個名詞,值得享受的是思考的過程和從中總結出的“道”)。
     然而切記,只有兩種情況下使用數學,一種是你在體驗數學本身,二是你使用它描述或者解決問題,並且此時你已經徹底理解了問題的本質。(有些頂級草根黑客認爲代碼需要想到及寫出,然後慢慢修改調試,正如畫油畫一樣,而大部分公司的經理卻厭惡這種論調,他們總希望你在編碼之前先提交一堆文檔,然後等到最後再用最短的時間編碼,這也許就是藝術和技術的區別吧?)
五.先從最簡單的情況看起 
如果問一個初中生,力是如何合成的,如何分解的,他會馬上說出矢量,正交,座標系,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.用戶1的碼:a1=(-1 -1 -1 -1 1 1 1 1)--第2行
2.用戶2的碼:a2=(-1 1 -1 1 1 -1 1 -1)--第7行
3.用戶1的數據:d1=110
4.用戶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) 【前面的|隔開的是用戶1的三位數據編碼後的結果,每一位用戶數據都是標量,和碼相乘,結果還是向量】;用戶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乘以夾角的餘弦值!
     然而對於多維向量而言,L是不易的,因爲多維向量不好用【勾股定理】 (我更喜歡用畢達哥拉斯定理這個詞)。那麼怎麼辦呢?向量的事最好由向量自己解決,記住,有很多我們中學時學習到的定理或者公式都是不適合高維空間的,畢竟那是古人經驗(計算車輪子的長度,計算橫樑)或者純思辨哲學(蘇格拉底,柏拉圖,亞里士多德的時代)的成果,那時數學還沒有抽象到希爾伯特時代的程度,因此我們還是用現代的方法吧!現代的方法爲:
 
所以忘掉中學時的知識吧。如果我不進一步說明上述的公式是怎樣導出的,我還是落入了俗套,因此,我給出簡單的推導,哪怕是一點指點迷津的思路也行:
 
起初數據爲k,然後和數據r一起被編碼並且疊加在一起,最終又恢復了k,一切使用的都是矩陣的加法和乘法運算,最幸運的是,這些運算都是很簡單的。
     CDMA的本質理解了嗎?實際上,這種方式如此簡單的解決了碼分多址編碼問題,使用了這種方式之後,可以巧妙繞開那些相對複雜的變換或者逼近,比如傅里葉變換和離散餘弦變換,因爲再也不需要那種方式了,使用CDMA的方式可以使得頻譜越寬越有效,而且再也不用靠增加功率來傳輸信號啦,擴頻通信由來於此! 
     那麼沃爾什矩陣究竟是怎麼來的呢?可能是沃爾什本人靠他天才的大腦想出來的,也可能...最重要的是,如果理解了哈達瑪矩陣的話,理解沃爾什矩陣就簡單多了,因爲哈達瑪矩陣是沃爾什矩陣的一種表述方式,它的最重要的特徵就是其遞推性,從低階的矩陣可以推導出高階的,而且生成原則很簡單,僅憑如此它就比其它的編碼方式更具優勢,更別說它的碼分多址特性了。 
八.凱撒加密和擴展的凱撒加密

在古代,如果手持一張羊皮紙,上面寫着亂七八糟的文字,然後如果有一個人拿着一張打着窟窿眼的羊皮貼到寫字的羊皮上之後,就能復原信息,窟窿眼在不同的位置,信息呈現就會有所不同,這是一種數據加密的方式,同時也是一種數據複用的方式,這叫什麼呢?其實這就是碼分多址 啊!因此碼分多址天生就和加密不可分,這種編碼方式天生具有安全性,究其深層原因,實質在於“碼”本身參與了編碼,而碼是特定區間內用戶唯一的,這個碼可以理解成密鑰,也可以理解成收發方作爲一個整體共享的私鑰!

徹底理解了碼分多址的本質之後,發現它的簡單性以及優美原來來源於它靠向量本身編碼,我們提到向量覺得起碼得要二維才行,實際上我們更希望從1開始,想想看,一維數軸上的數字難道不是向量嗎?如果我們使用一維的向量來進行編碼,實際上就會發現這原來就是擴展的凱撒加密運算。
     什麼是凱撒加密呢?簡單的說,凱撒加密需要一個10進制的數字k作爲密鑰,然後初始信息的每一個字母編碼爲其在字母表中位置加上k的位置處的字母。 
     擴展的凱撒加密就是使用一個序列a1,a2,a3,...aM作爲密鑰,然後將待加密的字母序列中每一個字母bN編碼爲字母表中其所在位置加上aN的位置處的字母, 是不是和本文開始處的吉普賽紙牌很相似呢?沒有挖洞的吉普賽紙牌我們看不懂寫滿文字的吉普賽紙牌中的信息含義,因此吉普賽紙牌天生就有保密性的特性,且它和凱撒加密法又是如此相似,並且,更簡單的一個例子,如果一個吉普賽人在中國大罵,我們十有八九聽不懂他們的話,依然會微笑!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章