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

傅立葉:每個訊號都是正弦波的總和

1807 年,約瑟夫·傅立葉提出一個離譜到審稿人拒絕刊登的主張:任何訊號,即使是帶著刀鋒般尖角的方波,都能僅用平滑的正弦波相加堆出來。他是對的——而這單一個想法,正是 Wi-Fi、MP3、MRI、JPEG 與抗噪耳機背後的秘密引擎。本篇展示週期訊號如何化為諧波的[[ee-fourier-series|傅立葉級數]],非週期訊號如何拉伸成連續的[[ee-fourier-transform|傅立葉轉換]],以及為什麼——因為正弦波是 LTI 系統的本徵函數——轉進頻域,能把上一階那殘酷的[[ee-convolution|捲積]]變成單純的乘法。

用純正弦波堆出一個方波

把一條正弦波和一條方波遞給某人,它們看起來像不同物種——一個平滑得不可思議,另一個全是稜角與平頂。然而傅立葉的主張是:方波是正弦波構成的,就像白光由各種顏色構成。取一條與方波同頻率的正弦波(基波),加上一條三倍頻、較小的(第三諧波),再加一條五倍頻、更小的,接著七倍、九倍……一直加下去,那條搖搖晃晃的總和會肉眼可見地硬挺成帶有銳利邊緣的平台。你以為與正弦相反的那些稜角,不過是大量正弦波以恰當的比例疊起來、合謀產生的結果。

Square wave (period T, frequency f0 = 1/T) as a sum of odd harmonics:

  x(t) = (4/π) · [ sin(ω0 t) + (1/3)sin(3ω0 t) + (1/5)sin(5ω0 t)
                                + (1/7)sin(7ω0 t) + ... ]      ω0 = 2π f0

  1 term                 3 terms                many terms
   _                      ___                    _________
  / \         +1   ->    /   \        ->        |         |   <- flat shelf
 /   \                  /     \                  |         |
------------ 0      ---/-------\---           ___|         |___ 0
      \   /              \     /              |         |
       \_/                \___/               |_________|     <- sharp edge

  only ODD harmonics (1,3,5,7...), amplitudes falling off as 1/n
方波是奇次諧波的總和,振幅為 1/n。項數越多 = 稜角越銳利、頂部越平坦。

這就是[[ee-fourier-series|傅立葉級數]]:任何合理的週期訊號,都等於一群正弦波的總和,這些正弦波的頻率是某個基頻 f₀ 的整數倍。每個諧波各有自己的振幅與相位——一份配方,規定每種純音要倒入多少。為什麼只能是整數倍?因為只有那些頻率才能在一個週期內塞進整數個循環、隨訊號一起重複;其他頻率會漂移而破壞週期性。方波的配方剛好只用奇次諧波(源自它的半波對稱),但一般的週期訊號——一個吉他音、引擎振動、心跳波形——會用上其形狀所要求的任何混合比例。

吉布斯漣波:永不消失的過衝

把方波的諧波疊起來,在每個跳變附近會冒出一件頑固的事。就在銳利邊緣處,部分和並不會乾淨俐落地落在平頂上——它會衝過頭,過衝約為跳變高度的 9%,然後一邊放鬆一邊振鈴。加入更多諧波,漣波會變得更,更貼近邊緣,卻永遠不會變得更:那 9% 的過衝是永久的。這就是吉布斯現象,它不是你數學裡的臭蟲——而是完美平滑的正弦波與完美銳利的不連續之間一種根本的張力。

Gibbs overshoot at a step edge (N = number of harmonics):

        9% overshoot  (independent of N!)
          v
         _∩_______________   ideal level +1
        /                  
       /   ripple gets NARROWER as N grows,
      /    but the peak stays ~9% above the step
  ___/
     |
  ___|________________________ ideal level 0
      \  ∪  <- 9% undershoot below

  N=10  : fat, slow ripple, ~9% peak
  N=100 : thin, fast ripple, still ~9% peak
  N=inf : ripple width -> 0, peak STILL ~9% at the instant of the jump
無論加總多少諧波,吉布斯過衝都釘在跳變高度的約 9%;只有它的寬度會縮小。

從週期到一切:傅立葉轉換

傅立葉級數很美,但它只能處理週期訊號——那些永遠重複的東西。真實生活充滿一次性事件:一聲拍手、一道擊中電力線的閃電、一個資料封包、一次相機閃光。這些是[[ee-signal-classification|非週期]]訊號,要觸及它們的訣竅是一個思想實驗。取一個週期訊號,把它的週期 T 緩緩拉向無限大。隨著週期增長,相鄰諧波之間的間距——它落在基頻間距 f₀ = 1/T 上——朝零收縮。離散的諧波梳子一條一條地填滿,直到化為一條平滑、連續的頻譜

Stretching the period turns a discrete series into a continuous transform:

  Periodic, T finite              Aperiodic, T -> infinity
  -------------------             ------------------------
  |  |  |  |  |  |  |             |||||||||||||||||||||||
  |  |  |  |  |  |  |    ----->   a smooth filled-in curve
  -------------------             ------------------------
  spacing f0 = 1/T               spacing -> 0  (continuum)
  Fourier SERIES (sum)           Fourier TRANSFORM (integral)

  Forward:  X(f) = ∫ x(t) e^(-j2πft) dt     'how much of frequency f?'
  Inverse:  x(t) = ∫ X(f) e^(+j2πft) df     rebuild signal from spectrum

  The e^(-j2πft) factor is a 'probe sinusoid' you slide x(t) against;
  the integral measures how strongly x(t) correlates with that frequency.
令 T → ∞,傅立葉級數(對離散諧波的求和)就變成傅立葉轉換(對連續頻率的積分)。

結果就是[[ee-fourier-transform|傅立葉轉換]] X(f):你得到的不再是一串諧波振幅,而是一個連續函數,告訴你 x(t) 中含有「多少」每一個頻率 f。正轉換是一個積分,它把探測正弦波 e^(−j2πft) 滑過你的訊號,量測兩者相關的強度;逆轉換則把所有那些頻率成分重新縫合回原本的時域波形。級數與轉換是同一個想法——把訊號分解成正弦波——只是看的尺度不同。週期訊號得到稀疏的線狀頻譜;非週期訊號得到稠密的連續頻譜。

大小、相位,與時間—頻率對偶

轉換 X(f) 是複數,所以它在每個頻率上攜帶兩份實數資訊。它的大小 |X(f)| 是大小頻譜——每個頻率含有多少,也就是每個音的響度。它的角度 ∠X(f) 是相位頻譜——每個音何時開始、它的時間偏移。初學者沉迷於大小而忽略相位,但結構恰恰住在相位裡:把一張照片的相位頻譜打亂、保留其大小,影像會溶解成雜訊;保留相位而把大小抹平,你往往仍能認出那張圖。相位說的是*東西在哪裡*;大小說的是*它們有多強*。

現在來到整個傅立葉分析中最深刻的模式——時間—頻率對偶。一個在時間上很窄的訊號,在頻率上很寬,反之亦然。一聲銳利、轉瞬即逝的喀噠——幾乎只是時間上的一瞬——需要極寬廣的頻率擴散才能堆出那份突然,所以它的頻譜寬闊而平坦。一個悠長、慵懶、純粹的音——在時間上鋪展開來——基本上只住在單一頻率,所以它的頻譜是一根細細的尖峰。在一個域裡擠壓訊號,它必然在另一個域裡鼓脹,就像氣球裡的空氣。

Time domain                    Frequency domain (magnitude)
--------------------------     -----------------------------
Narrow click (impulse-like)    Wide, nearly flat spectrum
   |                               ___________________
   |                              |                   |
---+---------------- t         ---+-------------------- f
   (instant)                       (all frequencies)

Long pure tone (sine)          Single sharp spike
  /\  /\  /\  /\                       |
 /  \/  \/  \/  \  t          --------+--------------- f
                                    (one frequency f0)

  RULE:  Δt · Δf  >=  constant    (narrow in one => wide in the other)
  Same maths as Heisenberg's uncertainty principle in quantum mechanics.
時間—頻率對偶:把訊號在時間上局部化,它就必須在頻率上擴散。兩者擴散的乘積有一個下限。

回報:為什麼捲積變成乘法

這裡就是整趟頻域繞路值得一走的理由,而它一路回扣到上一階。回想一個 [[ee-convolution|LTI 系統]]——一個放大器、一條纜線、一個房間的聲學——是透過與脈衝響應做捲積,把輸入變成輸出:一個翻轉—滑動—相乘—求和的操作,計算起來是貨真價實的苦工。奇蹟發生在你餵給這樣的系統一條純正弦波時:出來的是同一條正弦波,在同一個頻率,只是振幅被縮放、相位被移動。形狀絲毫未變。系統無法創造新頻率;它只能把每個既有頻率調大或調小,並在時間上滑移它。

這個性質有個精確的數學名稱:正弦波(或它們的複數形式 e^(j2πft))是 LTI 系統的本徵函數。本徵函數是一種輸入,其*形狀*能毫髮無傷地穿過系統——只有一個縮放數字,也就是本徵值,會改變。所以若你先用傅立葉轉換把任意輸入分解成正弦波,每一條都各自獨立地穿過系統,僅僅被乘上它自己的複數增益。把這些輸出重新縫合起來,你就得到完整的響應——全程不見任何捲積求和的蹤影。

The convolution theorem — the single most useful identity in DSP:

  TIME DOMAIN              FREQUENCY DOMAIN
  ----------------        ------------------------
  y(t) = x(t) * h(t)  <-> Y(f) = X(f) · H(f)
         ^^^                       ^^^
      convolution             multiplication
   (flip-slide-sum,          (one complex multiply
    O(N^2) work)              per frequency, easy)

  H(f) = the system's FREQUENCY RESPONSE
       = Fourier transform of the impulse response h(t)

  So the recipe to run a signal through an LTI system:
    1.  X = FFT(x)          take the input to the frequency domain
    2.  Y = X * H           multiply, point by point, by H(f)
    3.  y = IFFT(Y)         transform back to the time domain

  This is exactly how a graphic EQ, a reverb plug-in, and a
  digital radio channel filter actually run.
捲積定理:時域中雜亂的捲積,在頻域中就是單純的逐點相乘。H(f) 就是頻率響應。

這就是捲積定理,也是整個階段的笑點所在:*時域的捲積等於頻域的乘法*。系統在每個頻率上施加的複數增益,匯集成單一個函數 H(f),就是[[ee-frequency-response|頻率響應]]——而它不過是你上一階遇到的脈衝響應的傅立葉轉換。知道了 H(f),你就能一眼預測系統對*任何*輸入的作為:它在哪裡增強、在哪裡削減、在哪裡延遲。這正是下一階的主題,在那裡 H(f) 成為核心角色,而波德圖讓你能從單一張圖上讀出系統的整體行為。

整體圖像濃縮成一頁

退一步看,你剛才走的這一步,和相量是同一步:離開那個彆扭的域,做輕鬆的工,再回來。相量處理單一個頻率;傅立葉則一次處理全部頻率。一切都源自一個分解。

  1. 分解。任何訊號都是純正弦波的總和(週期 → 傅立葉級數)或積分(非週期 → 傅立葉轉換)。
  2. 把頻譜讀成兩部分:大小 |X(f)|(每個頻率有多少)與相位 ∠X(f)(每個頻率的時序)。
  3. 留意對偶:時間窄 ↔ 頻率寬。頻寬與時序是同一枚硬幣的兩面。
  4. 善用本徵函數:每條正弦波穿過 LTI 系統時被縮放與移相,形狀永不被改變。
  5. 兌現捲積定理:把捲積換成 X(f)·H(f),再逆轉換回時域。