資料連結層
順向錯誤更正(forward error correction)
錯誤「偵測」告訴你訊息收到時已損壞;你唯一的辦法是再要一次。錯誤「更正」則更進一步:它送出足夠多的額外資訊,讓接收方能自己「修好」損壞,而不必要求重送。順向錯誤更正就是做這件事的一整類方案。「順向」是指這些冗餘是預先、在同一次傳輸中就送出去的,所以接收方為了復原,永遠不必送任何東西回去。
其想法是加入經過精心設計的冗餘位元,讓有效的碼字彼此拉得很開,就像字典裡彼此差很多字母的詞。如果雜訊弄壞了幾個位元,收到的樣式仍會比起任何其他碼字更像某一個有效碼字,解碼器便把它扣回最接近的那一個。能修正幾個錯誤,取決於碼字之間拉得多開(最小漢明距離)。漢明碼是能更正任何單一位元錯誤的經典教學範例;真實系統用的是強得多的碼,例如里德-所羅門碼、迴旋碼、渦輪碼與 LDPC 碼。
FEC 在「再要一次」不可能或太慢的場合大放異彩:往返要好幾小時的深空探測器、遲到的重送毫無用處的即時音訊串流、燒錄後才被刮傷的光碟,或錯誤率很高的無線連結。代價誠實而無可迴避:那些更正用的位元是純粹的額外開銷,不管有沒有錯,每次傳輸你都得付,所以你花頻寬買到「立刻復原」的能力。相對地,ARQ 只在真的發生錯誤時才花頻寬,卻要付一個往返的延遲來復原。許多系統會把兩者混用。
一艘在數百萬公里外的太空船付不起「重來一次」:一次往返請求可能要好幾小時。於是它送出帶有大量 FEC 的資料;若宇宙雜訊翻轉了一些位元,地球的接收方就當場把它們修好。不必重送、不必等待。
當重送太慢或根本不可能時,你預先付出額外開銷,好讓接收方能自我修復。
更正並非免費:那些冗餘位元在每一個訊框上都要花頻寬,不管送不送、有沒有錯。FEC 拿固定的額外開銷換取即時復原;ARQ 則拿一個往返延遲,換取「只在發生錯誤時」才付的開銷。
又稱
另見