從乾淨的想法到真實的波形
在實體層,我們腦中有 1 和 0,但一條導線或無線電只承載連續變化的電壓或波。這篇要談的就是翻譯:我們該如何塑造一個實體訊號,讓接收端能還原出這些確切的位元?先前談類比與數位訊號的那篇告訴我們,訊號本質上永遠是類比的;數位的部分,是雙方對「什麼算 1、什麼算 0」的約定。
做這件事大致有兩條路。第一條是線路編碼,把位元直接當成導線上的電壓位準發送,就像把手電筒開開關關。第二條是調變,拿一個穩定嗡嗡作響的載波,再輕輕地扭曲它來承載位元,就像廣播電台把音樂搭在高頻音調上發送。要選哪一條,主要看媒介:建築物內一段短短的銅線喜歡線路編碼;無線電通道或電話線則需要調變。
線路編碼:位元直接上線
最天真的方案是 NRZ:1 就維持高電壓,0 就維持低電壓。它能用,但有兩個討厭的問題。第一,一長串相同的位元只是一條平直的線,接收端的時脈會慢慢漂移,最後數不清一個位元在哪裡結束、下一個在哪裡開始。第二,穩定的直流位準無法通過許多纜線途中放置的變壓器與電容。好的線路編碼把這兩個問題都解決。
經典的招數是曼徹斯特編碼,早期乙太網路就用它。每個位元不是用一個電壓位準,而是用其時槽正中央的一次跳變來表示:高轉低的邊代表一個值,低轉高的邊代表另一個值。因為保證每一個位元都翻轉一次,接收端就能不斷重新校準時脈、永不漂移,而且訊號平均下來為零,所以能通過那些阻擋直流的元件。代價是每個位元要花兩次電壓變化,因此你需要的頻寬比裸位元率所暗示的還多——這正好接回上一篇的奈奎斯特極限。
bits: 1 0 0 1 1
NRZ: ___ ___________
|________| |____ (long run = flat = drift risk)
Manchester: _ _ _ _ _
| |__| |__| |____| |__| | (edge in EVERY bit = self-clocking)
mid-bit flip: hi->lo = 1 , lo->hi = 0調變:搭乘載波
當媒介是空氣或一條老舊電話線時,原始的電壓階梯毫無用處,你需要一個載波。載波是一條純正弦波、一個穩定的音調,而正弦波恰好有三個你可以轉動的旋鈕:它的高度(振幅)、它的快慢(頻率),以及它的起始偏移(相位)。調變就是隨著你的位元擺動其中一個旋鈕,接收端則盯著這些擺動、把位元讀回來。把振幅開開關關得到 ASK;在兩個頻率間切換得到 FSK;移動相位得到 PSK。
這也是基頻與寬頻傳輸之間的界線。基頻指訊號從零赫茲往上佔據媒介,停在它天生的頻率上,正是線路編碼在導線上產生的那種訊號。寬頻傳輸則把訊號舉高,搭在某個較高頻段的載波上。正是這個「舉高」,讓許多通話能以不同頻率共用同一條纜線——這就是下一篇要講的多工故事。
位元率不等於鮑率,而 QAM 利用了這個差距
這裡是整個段落最常被誤解的觀念。鮑率是你每秒發送多少個不同的符元,旋鈕每轉一次就是一個符元。而位元率是你每秒承載多少個位元。只有當每個符元剛好代表一個位元時,兩者才相等。高速連結的整套把戲,就是讓一個符元一次代表好幾個位元,於是位元率遠遠爬到鮑率之上,而符元發送的速度卻沒有變快。
如果一個符元可以是 M 種不同的形狀之一,它就承載 log 以 2 為底 M 個位元。有 4 種形狀,每個符元值 2 位元;16 種形狀值 4 位元;256 種形狀值 8 位元。所以一條以每秒 1000 個符元(1000 鮑)運行、使用 256 種形狀符元的連結,可送出 8000 bps。這就是把位元率與鮑率的差距化為實打實的速度,也是為什麼以位元每秒計的資料率可以是符元率的好幾倍。
正交振幅調變(QAM)是這場遊戲的冠軍,你的 Wi-Fi、纜線數據機,還有 4G/5G 都靠它運作。它的訣竅是同時改變振幅與相位,於是你能把許多不同的符元塞進一張叫做星座圖的格子裡。16-QAM 用 16 個點(每點 4 位元),256-QAM 用 256 個點(每點 8 位元),現代連結更推到 1024-QAM 甚至更高。每個點就是一個符元;接收端判斷你最可能送出的是哪個點。
接收端如何把波形變回位元
把整條鏈一次走完、從頭到尾看一遍,對理解很有幫助,我們以一條 QAM 調變連結為例。發送端的任務是把位元切成符元、再畫到載波上;接收端的任務是量測抵達的波形、反推回符元。最美的一點是這裡沒有任何魔法,只有仔細的計時,以及一個「哪個星座點最近」的判斷。
- 發送端把位元串切成一組組,例如 256-QAM 每次取 8 位元,並查出每一組對應到哪一個星座點。
- 對每個點,它把載波的振幅與相位設成那個點的確切數值,並維持一個符元週期發送出去;符元越快,每個的微秒數越少,但也要求更多頻寬。
- 一路上,通道會削弱訊號(衰減)並加入雜訊,所以這個點抵達時是一團模糊的污漬,而不是一個完美的點。
- 接收端恢復載波的計時,量測進來的振幅與相位,並找出哪個理想星座點離測得的污漬最近。
- 它讀出那個點的 8 個位元,接到串流尾端。若雜訊把污漬推過了鄰居的邊界,這些位元就會翻轉,這一次誤讀就是位元錯誤率裡的一筆。
這就是為什麼同一條實體連結會因條件不同而承載天差地別的速度,也是為什麼兩條規格相同的纜線在吵雜的建築裡表現會不一樣。編碼與調變不是纜線寫死的定律;它們是兩端協商出的選擇,目的是緊貼夏農極限之下、同時讓錯誤保持稀少。懂了這個,你就懂了整個實體層:它上面的一切,只是單純地信任一串位元會大致完好地從另一端冒出來。