從一條連線到百萬個陌生人
到目前為止,每一階都默默假設了一個舒適的虛構:一個發射器透過自己私有的通道,對一個接收器說話。調變載波、推進空氣、在另一端還原位元。但走到戶外抬頭看看。任何一座城市上空,數千支手機、每戶公寓兩台互相競爭的 Wi-Fi 基地台、十幾顆 GPS 衛星、一架經過的飛機詢答機,還有一台嬰兒監視器,全都在*同一個*瞬間朝著*同一片*天空輻射。沒有人給它們私有通道。它們全在爭奪一個共享、有限的資源——無線電頻譜——而它竟然能運作。
它能運作的原因是多重存取(multiple access):一套有紀律的規則,把一個通道切成許多可用的片段。其總稱技術就是多工——把數個獨立訊號合併到共享媒介上,好讓接收器能乾淨地把*屬於它的*訊號抽回來。整個領域歸結為一個問題、三個經典答案:我們沿著*哪個軸*來劃分資源?你可以劃分頻率、劃分時間,或者——那個微妙的——劃分碼。每個軸給出一種不同的多工方案,而現代系統三者兼用。
FDM 與 TDM:切頻率、切時間
最古老的答案是分頻多工(FDM):給每個使用者一段不同的窄頻帶,像高速公路上的車道般並排堆疊。類比廣播正是這樣運作——你最愛的 FM 電台在 99.7 MHz,坐在自己 200 kHz 的車道裡,而 100.3 MHz 的電台住在另一條車道,兩者之間留有空的保護頻帶,免得它們的裙襬相撞。接收器把一個帶通濾波器(外加一個本地振盪器——回想那個把它精確鎖定的鎖相迴路)調到某一條車道,無視其餘。每個人都*一直*發射,但各自用自己顏色的光。
互補的答案是分時多工(TDM):給每個使用者*整個*頻帶,但只給一個短暫的輪次。把時間切成重複的訊框(frame),每個訊框給每個使用者一個時槽,然後輪流(round-robin)夠快地走過去,使得——在兩端各有緩衝下——每個使用者都感覺到一條連續的連線。經典的 2G GSM 手機正是這樣運作:八位通話者共享一個 200 kHz 載波,每人每 4.6 ms 拿到一段 577 µs 的突發。陷阱在於每個人都必須對時槽*何時*開始達成共識,精確到微秒,所以 TDM 生死取決於嚴密的同步——一個眾人都信任的共享時鐘。
FDM — divide FREQUENCY TDM — divide TIME (everyone all the time, (everyone full band, each in their own band) one at a time) freq freq ^ ^ | [ U4 ]====guard==== | |U1|U2|U3|U4|U1|U2|U3|U4| | [ U3 ] | | full bandwidth used | | [ U2 ] | | by whoever's turn it | | [ U1 ] | | is, right now | +-----------------> time +-----------------------> time share by colour share by taking turns
CDMA:用碼劃分,而非時間或頻率
現在來看那個奇怪的。分碼多重存取(CDMA)做了一件聽起來不可能的事:每個使用者*在同一時間、同一頻帶*發射——而接收器仍能完美地把它們分開。沒有車道,也沒有輪次。取而代之的是,每個使用者被指派一個獨特的高速碼——一串由 +1 與 −1 組成、稱為碼片序列(chipping sequence)的偽隨機圖樣——他們在發射前,把自己緩慢的資料位元乘上這個快速的碼。訣竅在於這些碼被選成正交的:在數學上,兩個不同的碼對彼此「隱形」。
「正交」能換來什麼?接收器知道它想要的使用者的碼。它把那團混雜、加在一起的電波乘上*那一個碼*,並對每個位元把結果加總起來——這個運算叫做相關(correlation)。對於想要的使用者,他的碼乘上自己的碼,處處得到 +1(一個碼乘自己全是 +1),所以他的位元累加成一個又大又清楚的數。對於每一個*其他*使用者,他的碼乘上想要的碼是正交的——+1 與 −1 等量抵消,加總為零。不想要的訊號不是被濾掉的;它們在加總中數學上*自我湮滅*。
實例演練:分開兩個 CDMA 使用者
讓我們用最小可能的 CDMA 系統把這個魔法具體化:兩個使用者、長度 4 的碼。我們把位元 1 寫成 +1、位元 0 寫成 −1(這種「雙極性」對映讓抵消的算術很乾淨——骨子裡就是 BPSK)。挑兩個正交的碼:
Codes (orthogonal: their dot product is zero)
Ca = (+1, +1, +1, +1)
Cb = (+1, -1, +1, -1)
Ca . Cb = (+1)(+1)+(+1)(-1)+(+1)(+1)+(+1)(-1) = 1-1+1-1 = 0 <- orthogonal
This bit period, suppose:
User A sends bit +1 -> transmits +1 * Ca = (+1, +1, +1, +1)
User B sends bit -1 -> transmits -1 * Cb = (-1, +1, -1, +1)
The air sums both signals (they overlap completely in time & frequency):
R = (+1, +1, +1, +1)
+ (-1, +1, -1, +1)
= ( 0, 2, 0, 2) <- a garbled mess; neither bit is readable
Receiver A correlates R with Ca, then sums:
R . Ca = (0)(+1)+(2)(+1)+(0)(+1)+(2)(+1) = 0+2+0+2 = +4
Divide by code length 4 -> +1 == User A's bit. CORRECT.
Receiver B correlates R with Cb, then sums:
R . Cb = (0)(+1)+(2)(-1)+(0)(+1)+(2)(-1) = 0-2+0-2 = -4
Divide by 4 -> -1 == User B's bit. CORRECT.仔細看接收器 A 的計算。使用者 B 發射的向量藏在 R 裡面,卻對 A 的相關加總貢獻了恰好為零——它造成的每個 +2 都被 Ca 的結構抵消掉,既沒幫忙也沒搗亂。這就是正交性獨力完成整件事。把它放大:真實的 IS-95 CDMA 標準使用 64 碼片的 Walsh 碼,提供 64 個互相正交的通道,再疊在一個更快的偽隨機擾碼之上,後者把能量展開並區分相鄰的基地台。
展頻:刻意變寬
到目前為止我們做的一切都試圖*節省*頻寬。展頻反其道而行,而且聽起來很瘋狂:拿一個需要比方說 10 kHz 的訊號,刻意把它抹開到 10 MHz——寬一千倍,而*總*功率不變。每赫茲的能量下降同樣的一千倍,於是訊號真的能沉到雜訊底之下:一台掃過該頻段的頻譜分析儀看不到任何東西,只見雜訊微弱、幾乎察覺不到地隆起。為什麼有人要如此奢侈地拋棄頻譜效率?因為你換回來的東西:強健性。
展頻有兩種方式。你剛才演練的 CDMA 例子是直接序列展頻(DSSS):把資料乘上快速的偽隨機碼片碼,抹開到一個寬頻帶,然後在接收端用同一個碼做相關來解展(de-spread)。跳頻展頻(FHSS)展開的方式不同——它在任一瞬間保持訊號狹窄,但讓它每秒多次在數百個頻率之間*跳躍*,遵循一個發射與接收兩端都知道的偽隨機圖樣。對任何不知道跳頻圖樣的人來說,這訊號就是一團鬼火,從不在同一個地方出現兩次。
展開到底換來什麼?三個強大的性質,全都源自處理增益——展開頻寬與資料頻寬的比值。第一,抗干擾:一個敵意的窄頻干擾器可以用巨大功率轟炸一個頻率,但當接收器解展時,干擾器的窄頻能量被同一個碼*展開*,而你的訊號則塌回到全強度——干擾器被處理增益(常達 20–30 dB)壓制。第二,低截獲機率:藏在雜訊之下,這訊號連被*偵測*都難,更別說解碼。第三,共存:許多展頻使用者(或不相干的系統)在同一頻段重疊,每一個對其他人而言不過是雜訊底上的一個小鼓包。
野外的展頻:GPS 與 Wi-Fi
DSSS 最美的展示就在你口袋裡:GPS。一顆位於 20,000 公里高空的衛星,用大約一顆家用燈泡的功率發射,被一個 1.023 Mchip/s 的碼展開到約 2 MHz。等它抵達地面時,訊號落在熱雜訊底之下 30–40 dB——對一般無線電完全隱形。你的接收器知道每顆衛星獨特的偽隨機碼並對它做相關;處理增益(約 43 dB)把埋住的訊號從雜訊裡拉出來。更妙的是,把本地碼在時間上*滑動*直到相關出現峰值,會告訴接收器訊號的傳播時間,精確到奈秒——而那個傳播時間乘上光速,就是到衛星的距離。分開訊號的解展相關,正是定位你的那個量測。
- 捕獲:接收器把它本地的衛星碼副本,在所有可能的時間位移(以及都卜勒頻移的頻率)上滑動,留意相關尖峰——那個尖峰意味著「找到了,而且這就是對齊位置」。
- 追蹤:一個迴授迴路(一個碼追蹤迴路,搭配一個載波鎖相迴路)讓本地碼隨著衛星移動與使用者行走,持續鎖在進來的碼上。
- 量測:精確的碼相位產生到該衛星的虛擬距離(pseudo-range);對四顆以上的衛星都這麼做,解出三維位置外加接收器的時鐘誤差。
展頻也形塑了早期的 Wi-Fi。最初的 802.11,以及第一個普及的版本 802.11b,在免授權的 2.4 GHz 頻段使用 DSSS——部分*正是因為*展開能讓多個裝置與不相干的器具(微波爐、無線電話、藍牙)在一個沒人授權的頻段中共存。經典的 11 Mbit/s 802.11b 模式使用 11 碼片的 Barker 碼、後來是 CCK,來展開每個符元。展開買到了那份關鍵的早期強健性,抵抗一個人人共享的頻段裡那團亂的干擾。隨著對原始速度的需求爆增,Wi-Fi 為了更高的資料率而遷移到 OFDM(802.11a/g 及之後)——但是 DSSS 讓它起飛。