用純正弦波堆出一個方波
把一條正弦波和一條方波遞給某人,它們看起來像不同物種——一個平滑得不可思議,另一個全是稜角與平頂。然而傅立葉的主張是:方波是由正弦波構成的,就像白光由各種顏色構成。取一條與方波同頻率的正弦波(基波),加上一條三倍頻、較小的(第三諧波),再加一條五倍頻、更小的,接著七倍、九倍……一直加下去,那條搖搖晃晃的總和會肉眼可見地硬挺成帶有銳利邊緣的平台。你以為與正弦相反的那些稜角,不過是大量正弦波以恰當的比例疊起來、合謀產生的結果。
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這就是[[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從週期到一切:傅立葉轉換
傅立葉級數很美,但它只能處理週期訊號——那些永遠重複的東西。真實生活充滿一次性事件:一聲拍手、一道擊中電力線的閃電、一個資料封包、一次相機閃光。這些是[[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.
結果就是[[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),就是[[ee-frequency-response|頻率響應]]——而它不過是你上一階遇到的脈衝響應的傅立葉轉換。知道了 H(f),你就能一眼預測系統對*任何*輸入的作為:它在哪裡增強、在哪裡削減、在哪裡延遲。這正是下一階的主題,在那裡 H(f) 成為核心角色,而波德圖讓你能從單一張圖上讀出系統的整體行為。
整體圖像濃縮成一頁
退一步看,你剛才走的這一步,和相量是同一步:離開那個彆扭的域,做輕鬆的工,再回來。相量處理單一個頻率;傅立葉則一次處理全部頻率。一切都源自一個分解。
- 分解。任何訊號都是純正弦波的總和(週期 → 傅立葉級數)或積分(非週期 → 傅立葉轉換)。
- 把頻譜讀成兩部分:大小 |X(f)|(每個頻率有多少)與相位 ∠X(f)(每個頻率的時序)。
- 留意對偶:時間窄 ↔ 頻率寬。頻寬與時序是同一枚硬幣的兩面。
- 善用本徵函數:每條正弦波穿過 LTI 系統時被縮放與移相,形狀永不被改變。
- 兌現捲積定理:把捲積換成 X(f)·H(f),再逆轉換回時域。