封面

Filter Effect

filter 這個詞來自電話和無線電工程,意思就是「濾」:依照頻率,決定哪些聲音留下、哪些被擋掉。 後來合成器和效果器沿用了這些電路,名字也跟著保留了下來。

其實幾乎每顆效果器裡都有 filter,破音的 tone 旋鈕、EQ、delay 回音越來越暗,背後都是 filter 在削掉某些頻率。 不過這些 filter 只是在修音色,設好就不會再動,通常不會被叫做「filter 效果」。 我們常說的 filter 效果,多了兩件事:

  1. 在某個頻率上有明顯的共振峰,會把那附近的聲音特別放大。
  2. 這個共振峰會一直移動,可能是用腳踩的 wah、用 LFO 自動掃的 auto filter,或是跟著彈奏力道開合的 envelope filter。

這也是上一篇花那麼多篇幅講共振的原因:filter 效果的那聲「哇」,其實就是一個會移動的共振峰。


常見參數

Type

決定留下哪一段。低通(low-pass)留下低頻,聲音變悶、變暗;高通(high-pass)留下高頻,聲音變薄、變亮; 帶通(band-pass)只留中間一段,聽起來像隔著紙筒說話;陷波(notch)則剛好相反,把中間一段挖掉。

同一個 cutoff 下,低通、高通、帶通、陷波四種頻率響應
同一個 cutoff,四種留法。

Cutoff

從哪個頻率開始濾,對帶通來說,就是中間那一段的位置。 換成上一篇的說法,cutoff 就是這個共振器的固有頻率,filter 效果的「移動」,其實就是在移動 cutoff。

Resonance(Q)

在 cutoff 附近推出的共振峰有多高。 轉得越大,阻尼越小,峰就越高越尖,聲音也越「叫」。 很多 filter 轉到底時,阻尼會降到零以下,就算沒有輸入,也會自己發出一個穩定的正弦波,這叫做自我振盪(self-oscillation),原理就跟上一篇的回授一樣。

SVF 與 Ladder 低通在不同共振量下的頻率響應,Ladder 共振越大低頻越低
共振越大,峰越尖;Ladder 的斜率更陡,低頻也跟著被吃掉。

Slope

cutoff 之外的頻率衰減得多快,單位是 dB/oct,也就是每遠離一個八度少掉多少。 常見的有 12 dB/oct 和 24 dB/oct,數字越大,邊緣越陡,濾掉的感覺越明顯。 這個數字通常由 filter 的結構決定,下面講到 SVF 和 Ladder 時會再看到。


經典 Filter 結構

State Variable Filter

SVF 由 W. J. Kerwin、L. P. Huelsman 與 R. W. Newcomb 在 1967 年提出,原本是用來解決積體電路的工程問題。 它的核心是一條串聯再加上回授的迴圈,靠兩顆積分器的累加特性來濾波;迴圈上有三個節點,可以各自取出一條輸出,先叫它們 a、b、c。

input ─► Σ ─► a ─► ∫ ─► b ─► ∫ ─► c
         ▲              │         │
         ├── − k·b ◄────┘         │
         └── − c ◄────────────────┘

積分就是累加。高頻正負來回跳得很快,累加起來互相抵消;低頻變化慢,越加越多。 所以每個節點留下的頻率都不一樣:

  • c:聲音經過兩顆積分器,高頻幾乎都被抵消,只剩下低頻,就是 low-pass。
  • a:輸入減掉 c 和 k·b,等於把低頻和中間那段都扣掉,剩下的就是高頻,也就是 high-pass。
  • b:a 累加一次的結果。a 本來就沒有低頻,累加一次之後高頻也被壓低,只留下中間那一段,也就是 band-pass。

也就是說,SVF 只用一條回授迴圈,就能在同一個瞬間同時得到低頻、中頻、高頻三種輸出, 而要改變這三種輸出的樣子,也只需要調整迴圈裡的兩個參數:

  1. 積分的速度:決定 cutoff。累加得越快,分界點就越往高頻移動,三種輸出會一起跟著移動。
  2. 阻尼 k:決定 resonance。k 越小,cutoff 附近越晃越久,共振峰越尖、越「叫」;k 等於零時,迴圈完全沒有損耗,會變成一個正弦波振盪器。

這兩個參數各管各的,調 cutoff 不會影響共振量,調共振也不會讓 cutoff 跑掉,這也是 SVF 特別適合拿來掃動的原因。 類比電路調到自我振盪時不會真的無限放大,是因為元件會飽和,把訊號壓在一個天花板底下;數位實作也常在積分器加上 tanh 這類飽和來模擬。

Ladder

它是 Moog 經典合成器上那顆濾波器採用的結構:四個一階低通像梯子一樣串在一起,再把最後的輸出拉回輸入端,接成負回授。 每一級各提供 6 dB/oct,四級加起來就是 24 dB/oct,邊緣比 SVF 陡很多,濾掉的感覺也更明顯。

「四級」不只是為了斜率,也剛好湊齊了共振的條件。 每一級低通在 cutoff 上會讓相位落後 45 度,四級加起來剛好 180 度,原本用「減」的負回授,在這個頻率就變成了「加」。 於是 cutoff 附近的聲音會被一圈一圈推大,形成共振峰;回授越大,峰越尖,推到底就會自我振盪。 代價是回授拉高時,低頻也會被吃掉,共振越大聲音越薄,這也是 Ladder 很著名的特性之一。

另一個特性是飽和。類比的 Ladder 用電晶體做每一級,電晶體本身在訊號太大時就會被壓扁, 所以推得越大聲,聲音越粗、越暖,共振峰也會變得比較圓,這些都是電路自然產生的。

四個一階低通串接看似簡單,實際上數位要模擬它反而很困難。 類比電路裡,回授是瞬間完成的,輸出和輸入同時互相影響;但數位是一個 sample 一個 sample 算,要算輸入就得先知道輸出,要知道輸出又得先算輸入。 如果每一級都帶著飽和,這個互相依賴的關係就沒辦法直接解開,只能一次次猜答案、再修正,直到誤差夠小為止; 飽和產生的高頻雜音也很容易在數位裡變成刺耳的失真,通常還得在內部提高取樣率來處理,運算量會比 SVF 大上不少。

Comb

Comb filter 的做法完全不同:它不用積分器,而是用一條延遲線。 聲音延遲一小段時間後,再加回原本的聲音,繞一圈、再繞一圈,就跟上一篇的回授一樣。

差別在於,它不只在一個頻率共振。 只要延遲時間剛好是某個頻率週期的整數倍,這個頻率繞回來時就會跟自己對齊,一起被放大。 所以它會在一個基頻,以及所有整數倍的頻率上同時共振,頻率響應看起來就像一把梳子,這也是名字的由來。

Comb filter 的頻率響應:等距的共振峰,迴圈裡加低通後高頻的峰逐漸變矮
延遲 4 ms,每 250 Hz 一根齒;迴圈裡加上低通,高頻的齒就一根比一根矮。

這一整排等距的共振峰,其實就是一根弦或一根管子的泛音列,所以 comb filter 聽起來常常帶著金屬感,像聲音被灌進了一根管子裡。 延遲時間決定這把梳子的音高,延遲越短,音高越高;回授量則決定它響多久。 如果在回授路徑上再加一個低通,讓每繞一圈高頻就少一點,聲音就會從金屬感變得比較像弦,就像真實的樂器一樣,高頻總是先消失。

Phaser

Phaser 是這一節的反例:它刻意不做共振峰,而是挖出凹口。 它用的是全通濾波器(all-pass filter),這種 filter 不會改變任何頻率的大小,只會讓不同頻率延遲的時間不一樣,也就是改變相位。

把幾級全通串在一起,再跟原音相加,某些頻率的相位剛好被轉了半圈,跟原音方向相反,加起來就互相抵消,出現一個個凹口; 移動全通的頻率,凹口就跟著移動。

Phaser 的頻率響應:全通頻率移動時凹口跟著移動,加回授後凹口之間浮出峰
沒有回授時只有凹口;加了回授,凹口之間才浮出峰。

它聽起來有一種流動、旋轉的感覺,但不會像 wah 那樣「叫」,因為整個過程沒有任何東西在共振。 很多 phaser 會再加一點回授,讓凹口之間浮出小小的峰,聲音更明顯;不加回授的版本則比較柔和、透明。

Twin

上一篇講到,人聲不只一個共振峰,母音是由好幾個共振峰的位置一起決定的。 Twin 的想法就是:既然一個移動的共振峰聽起來像「哇」,那兩個各自移動的共振峰,應該能做出更複雜、更像說話的聲音。

做法是把兩個帶通共振器並聯,讓它們朝不同方向移動,例如一個隨著彈奏快速往上開,另一個慢慢往下收。 兩個共振峰交錯的時候,聲音會出現類似母音轉換的變化。 它不是真的在模擬某個母音,只是借用了嘴巴「好幾個共振峰同時在動」的特性。


驅動 Filter

Wah

最直接的方法,是把 cutoff 接到一個踏板上。 wah 本身就是一個帶通共振器,踏板往下踩,共振峰就往高頻移動;往上收,就回到低頻。 因為完全由腳控制,wah 可以跟著節奏、跟著樂句自由開合。

Auto

控制換成 LFO(low frequency oscillator),也就是一個很慢的振盪器,cutoff 就會依照固定的速度自動來回掃動。 速度和深度決定它像緩慢的呼吸,還是規律的「哇哇哇」,也常常會跟歌曲的速度同步。

Envelope

Envelope 是讓彈奏的力道去推 cutoff:彈得越大聲,共振峰就開得越高。 它的原理跟 compressor 很像,第一步都是一個偵測器,把聲音的大小轉成一條平滑的控制曲線,叫做 envelope; 差別在於 compressor 用這條曲線去控制音量,envelope filter 則用它去控制 cutoff。

這條曲線上升和下降的速度通常不一樣。 上升(attack)要快,才跟得上撥弦的那一瞬間;下降(release)要慢一點,讓「哇」的尾巴慢慢收回來,而不是一下子就斷掉。

三次撥弦的波形、偵測出的 envelope,以及跟著 envelope 以八度移動的 cutoff
撥弦的瞬間 cutoff 立刻打開,再慢慢收回;縱軸每一格是一個八度。

cutoff 跟著 envelope 移動的方式也很重要。 耳朵判斷音高看的是倍數,從 200 Hz 到 400 Hz,跟從 1000 Hz 到 2000 Hz,聽起來都是升高一個八度。 所以 envelope 通常是以倍數去推 cutoff,而不是固定的 Hz 數,掃起來才會在每個音域都一樣平均。


實作 EnvFilter

實體的 envelope filter,個性跟電路綁在一起:用了哪種 filter 結構、envelope 用什麼元件推動,聲音和手感大致就決定了。 但換到數位,就可以把 filter 結構和 envelope 的反應分開設計,再替每一種結構配上最適合的驅動方式。

每個算法寫出來之後,第一次測試時幾乎都能找到幾組很好聽的設定:某個掃動範圍、某個共振量、某個 envelope 的速度,剛好讓共振峰移動得很自然。 但這些設定通常只在一個小範圍裡,換個樂句或是稍微偏一點,聲音就會變得太悶、太衝;再加上參數之間會互相牽動,不同結構之間的音量差異也很大。

所以實作真正花時間變成是: 讓旋鈕不管怎麼轉,都盡量待在這個甜蜜點的範圍裡。

參數會互相牽動

耳朵聽到的是所有參數整合起來的結果,而不是一個一個分開聽。 共振拉高時,聲音不只變得更「叫」,也會聽起來更大聲、更薄;cutoff 往高處掃時,同樣的共振量會比在低處刺耳; envelope 的速度一變,共振峰停留的時間也跟著變,聽起來的共振感又不一樣了。

這時候光靠耳朵,很難判斷問題出在哪一個參數。 我的做法是另外寫一個監控面板,即時顯示 cutoff、共振量和 envelope 的變化,一邊彈一邊看。 只要聽到不舒服的聲音,就記下那一瞬間各個參數大概是多少;累積幾次之後,就能找出聲音開始變差的邊界,再回頭調整旋鈕的範圍和曲線,讓它避開這些位置。

非線性的對應

測試的經驗累積夠多之後,會發現一顆旋鈕很難只負責一個參數:只要動了其中一個,其他參數的甜蜜點就會跟著移動。

所以最後的做法,是讓一顆旋鈕同時帶動好幾個參數,各自用不同的曲線變化。 例如 TONE 轉動時,掃動的音域會一路往上移,但共振量在前半段只會慢慢增加,到後半段才明顯打開,避免低音域的共振太重、高音域又不夠; cutoff 也是以倍數、而不是固定的 Hz 數去掃,讓每個音域聽起來都一樣平均。

反過來,如果想要的是很明顯的音色差異,就不硬塞進同一顆旋鈕,而是直接做成不同的 mode。 每顆旋鈕只要負責一個 mode 裡的甜蜜點範圍,曲線就能調得更細;要換一種個性,切換 mode 就好。 這樣反而更自由:每種結構可以各自調到最好聽,之後也更容易把不同結構串接、組合,做出單一結構做不到的聲音。

增益補償

不同結構的 filter,聲音本來就有大有小。 同樣的輸入,BP 只留下共振峰附近那一段,聽起來會比 LP 小聲很多;Ladder 共振拉高時,低頻被吃掉,整體音量也跟著往下掉。 如果不處理,切換 mode 或轉動旋鈕時,音量就會忽大忽小,聽起來像是效果「變強」或「變弱」,其實只是大聲小聲不同。

所以每種結構都要各自做增益補償,目標是讓耳朵聽起來的音量一致,而不只是數字上的峰值一樣:

  • 依照共振量補償:共振越高,能量越集中在窄窄的一段,所以會跟著共振量調整輸出,讓共振峰在不同設定下維持差不多的響度。
  • 依照驅動量補償:Ladder 這類帶飽和的結構,推進去的訊號越大,出來的也越大聲,所以加了多少驅動,輸出就扣回多少。
  • 乾溼比例一起調:BLEND 改變效果和原音的比例時,兩邊的音量也會一起調整,讓旋鈕只改變音色,不改變整體大小。

最後,所有結構的輸出都會再經過一次限制。 envelope 會讓共振峰快速移動,某個瞬間剛好對上很強的泛音時,峰值可能突然衝高,這道限制就是確保任何極端情況都不會直接送到喇叭。