JOVANA
Library Glossary Getting Started Three Levels Fields How it works Mission
Join the mission
All guides

從雜訊中拉出訊號:匹配濾波器與糾錯碼

第五級讓你直視雜訊地板——那陣會翻轉位元、推高錯誤率的嘶嘶聲。這一級交給你接收機最厲害的兩件武器。匹配濾波器在判決器下決定前,把雜訊波形中每一滴訊號能量都榨出來;前向糾錯則加入巧妙的冗餘,讓接收機修好仍然漏網的位元。兩者聯手贏回寶貴的幾分貝[[ee-signal-to-noise-ratio-comm|SNR]]——那正是斷線與順暢下載之間的差距。

接收機的難題:埋在嘶聲裡的已知波形

想像一位燈塔守夜人,在黑夜裡守候某艘船發出的特定閃光樣式——三短一長。海面上滿是隨機反光:浪上的月光、遠處的燈、守夜人自己疲倦的雙眼。他的任務不是看見「光」,而是看見「那個樣式」。無線電接收機面對的正是同一件事。發射端為每個位元送出一個已知的脈衝波形 p(t);通道把它埋進熱雜訊之下。接收機早就知道自己在獵捕什麼形狀。這一級的核心問題是:既然你知道形狀,找它的最佳辦法究竟是什麼?

從第五級你帶著一個硬邦邦的數字:位元錯誤率(BER)。對最常用的調變 BPSK 來說,BER 隨 Eb/N0 這個比值急遽下降——它是每位元能量除以雜訊功率譜密度。把 Eb/N0 往上推幾分貝,BER 就掉好幾個數量級。所以這篇指南裡的每一招,骨子裡都是一台機器:在不調高發射功率的前提下,提高判決電路所看到的有效 Eb/N0。

匹配濾波器:與你預期的波形做相關

把守夜人的訣竅化成數學就是這樣。別只盯著某一瞬間的原始波形 r(t),而是把它與已知脈衝 p(t) 的副本逐點相乘,再在整個符元上加總。這個累加和就是一次相關——它在問:「我收到的東西,有多像我送出的形狀?」當收到的能量與樣板對齊時,乘積全為正,總和便鼓脹成一個峰值。隨機雜訊對形狀毫無忠誠,把乘積等量地推高又拉低,大致自相抵消。匹配濾波器正是這個相關器,做成一個脈衝響應為脈衝時間反轉的濾波器,h(t) = p(T − t)。

Transmitted pulse p(t)        Received r(t) = p(t) + noise
   ___                            .--._.-'`-.__.'\ . _.
  /   \                       .'\/      `.    `'  `
 _/     \_                  _.'             noise everywhere
                            (which sample do you trust?)

Matched filter = slide a time-reversed copy of p(t) along r(t),
multiply & integrate (this IS correlation):

   y(t) = INTEGRAL  r(tau) * p(tau - (t - T))  d tau

        noise-only stretch        SIGNAL aligns -> PEAK
          ___   _   __              |
   y(t): /   \_/ \_/  \___ . . . __/ \__ . . .
        (small, wobbly)            ^
                            SAMPLE EXACTLY HERE  (t = T)
                            -> maximum SNR, minimum BER
把 r(t) 與已知脈衝做相關,會讓訊號堆成一個高峰,雜訊則保持低矮。就在那個峰值取樣。

為什麼這是「那個」最佳解,而不只是「一個」好點子?可以證明,對加性白高斯雜訊而言,匹配濾波器是在某個選定取樣瞬間讓訊雜比最大化的線性濾波器。證明用的是柯西–施瓦茲不等式:在所有對輸入波形加權的方式中,唯有「對每一段的權重恰與該處的訊號能量成正比、其餘一律不理」的那一種,才能在單位雜訊下榨出最多訊號。它給出的峰值 SNR 是 2·Eb/N0,而且妙的是只取決於脈衝的能量,與形狀無關。只要攜帶相同能量,一個寬而緩的脈衝與一個窄而尖的脈衝表現完全相同。

當濾波器還不夠:錯誤仍然漏網

匹配濾波器是最佳的,但最佳不等於完美。即使表現到極致,一道深邃的雜訊尖峰仍可能把取樣值推過判決門檻,讓判決器把 0 叫成 1。在 Eb/N0 = 9.6 dB 時,BPSK 大約每十萬個位元還是會翻一個。對一條 1 Gbit/s 的鏈路而言,那是每秒一萬個錯誤——每張照片、每筆付款、每行程式碼,都被翻轉的位元灑得滿身。你無法靠濾波擺脫這件事;匹配濾波器已經把濾波器能做的全做完了。

舊辦法是再問一次:偵測到收到的東西亂了,就要求重傳(ARQ)。對網頁可行,但對 20 光分外的火星探測器、對即時視訊通話、對一張無法打電話回家的藍光光碟而言,這是場災難。現代的辦法是把解藥連同病一起送出。加入精心設計的冗餘位元,讓接收機不只能偵測錯誤發生,還能自行定位並修正它。這就是前向糾錯(FEC)——第二台偉大的 SNR 換購機器。

實作範例:能修好一個翻轉位元的漢明碼

Richard Hamming 受夠了週末的電腦運算被單一壞位元毀掉,1950 年他問:要找出並修好一個錯誤,最少需要幾個額外位元?他的答案——漢明 (7,4) 碼——取 4 個資料位元,加上 3 個同位位元,組成 7 位元的碼字。訣竅在擺放位置。把同位位元放在位置 1、2、4(二的次方),資料位元放在 3、5、6、7。每個同位位元恰好守護那些「二進位索引含有它那一位」的位置。如此一來,任何單一位元錯誤都會讓這些同位檢查以某種樣式失敗,而那樣式正好用二進位拼出出錯的確切位置。

Position:   1    2    3    4    5    6    7
Role:      p1   p2   d1   p4   d2   d3   d4

Parity coverage (position's binary index has that bit set):
  p1 (001) checks positions 1,3,5,7   -> bit 0 of the index
  p2 (010) checks positions 2,3,6,7   -> bit 1 of the index
  p4 (100) checks positions 4,5,6,7   -> bit 2 of the index
Each p is set so its group has EVEN parity.

--- ENCODE data 1011 (d1 d2 d3 d4) ---
  p1 over {d1,d2,d4}=1,0,1 -> need even -> p1=0
  p2 over {d1,d3,d4}=1,1,1 -> need even -> p2=1
  p4 over {d2,d3,d4}=0,1,1 -> need even -> p4=0
  codeword = 0 1 1 0 0 1 1   (pos 1..7)

--- CHANNEL flips bit 5 ---  received = 0 1 1 0 1 1 1

--- DECODE: recompute the 3 checks ---
  c1 = parity of pos 1,3,5,7 = 0,1,1,1 = ODD  -> 1
  c2 = parity of pos 2,3,6,7 = 1,1,1,1 = EVEN -> 0
  c4 = parity of pos 4,5,6,7 = 0,1,1,1 = ODD  -> 1
  syndrome (c4 c2 c1) = 1 0 1 (binary) = 5
  ==> bit 5 is wrong. FLIP IT BACK. Error corrected, no resend.
漢明 (7,4):三個失敗的檢查位元以二進位讀出要翻轉的確切位置。症候 101 = 位置 5。

細細品味這有多優雅。三個檢查給出一個 3 位元的症候,有 8 種可能值:000 代表「沒有錯誤」,其餘 7 種精確指向 7 個位置中該翻哪一個。完全不必去查資料表;症候本身就是故障的地址。代價是額外開銷:你送了 7 個位元只承載 4 個,碼率 4/7 ≈ 0.57。花掉一點頻寬,換回每個區塊自我修復一個錯誤的能力。

從漢明到你口袋裡的那些碼

漢明碼是親切的第一步;真實系統倚靠更重型的機器,各自為它面對的錯誤型態而調校。串起它們的線索始終如一:結構化的冗餘,加上一個聰明的解碼器。

  1. 里德–所羅門碼作用在整個符元(位元組)上,而非單一位元,因此能抖落成串的損傷——光碟上的一道刮痕、一次衰落造成的中斷。它統治了 CD、DVD、QR 碼與深空鏈路數十載。一張航海家號的影像得以倖存,正因 RS 默默修好了那片汙跡。
  2. 摺積碼 + 維特比解碼把每個位元的影響攤在一個滑動視窗上,找出最可能被送出的序列。把它與外層 RS 碼配對(串接式架構),便得到穩健的分層保護——這是深空與早期行動通訊的經典配方。
  3. 渦輪碼(1993)LDPC 碼迭代解碼,來回傳遞軟性機率估計,直到收斂。它們進逼到距理論極限不到一分貝之處。LDPC 如今守護 Wi‑Fi 6、5G 資料通道與現代儲存;渦輪碼則扛起了 3G/4G。

「理論極限」這個詞不是隨口說說。它就是夏農的通道容量——一條雜訊通道每秒能承載多少無錯位元的硬性天花板。夏農在 1948 年證明:能在容量以內達成可靠通訊的碼必然存在;他只是沒說怎麼造。從漢明到 LDPC 這六十五年的追逐,正是工程界要真正觸及他所畫那條線的歷程。今日最好的碼坐落在距夏農極限不到十分之幾分貝之處——這場追逐大致已經勝出。

編碼增益:你買回來的那些分貝

我們該如何為一個碼打分,而且分數要是工程師花得出去的?答案是編碼增益:開啟編碼後,達到目標 BER 所需 Eb/N0 的減少量。先定個目標,比如 BER = 10⁻⁵。未編碼的 BPSK 約需 9.6 dB 才到得了。一個像樣的摺積碼也許在 5 dB 就達到同樣 BER——編碼增益約 4.6 dB。良好碼率下的現代 LDPC 可買到 7 dB 以上。記得前面說過 3 dB 等於功率加倍;所以 6 dB 的編碼增益,就像擁有一台強四倍的發射機,純粹由接收端的算術變出來。

BER
 1e-2 |* uncoded BPSK
      | *\
 1e-3 |  * \        coded (e.g. LDPC)
      |   *  \        .
 1e-4 |    *   \      .
      |     *   \    .
 1e-5 |......*....\..*................. <- target BER
      |       *    \  .
 1e-6 |        *    \  .
      +--+----+----+--+----+---- Eb/N0 (dB)
         3    5    7  9.6  11
                |<-- ~4-7 dB -->|
                  CODING GAIN  (= cheaper transmitter)
編碼把整條 BER-對-Eb/N0 曲線往左移。在目標 BER 處的水平間距,就是編碼增益。

把兩者疊起來,就是現代接收機的脊梁。匹配濾波器從類比的霧氣中拉出可能最乾淨的判決,把物理所允許的最佳 Eb/N0 交到判決器手上。FEC 接著清掃殘餘的錯誤,再往上買進好幾分貝。你手機裡的每一台數據機、每一顆 Wi‑Fi 晶片、每一座衛星地面站,跑的都是這套一拳接一拳的組合——先榨乾訊號,再治癒位元——好讓自己活在矽片所能企及、距夏農之線最近的地方。