
Filter Effect
filter 這個詞來自電話和無線電工程,意思就是「濾」:依照頻率,決定哪些聲音留下、哪些被擋掉。 後來合成器和效果器沿用了這些電路,名字也跟著保留了下來。
其實幾乎每顆效果器裡都有 filter,破音的 tone 旋鈕、EQ、delay 回音越來越暗,背後都是 filter 在削掉某些頻率。 不過這些 filter 只是在修音色,設好就不會再動,通常不會被叫做「filter 效果」。 我們常說的 filter 效果,多了兩件事:
- 在某個頻率上有明顯的共振峰,會把那附近的聲音特別放大。
- 這個共振峰會一直移動,可能是用腳踩的 wah、用 LFO 自動掃的 auto filter,或是跟著彈奏力道開合的 envelope filter。
這也是上一篇花那麼多篇幅講共振的原因:filter 效果的那聲「哇」,其實就是一個會移動的共振峰。
常見參數
Type
決定留下哪一段。低通(low-pass)留下低頻,聲音變悶、變暗;高通(high-pass)留下高頻,聲音變薄、變亮; 帶通(band-pass)只留中間一段,聽起來像隔著紙筒說話;陷波(notch)則剛好相反,把中間一段挖掉。
Cutoff
從哪個頻率開始濾,對帶通來說,就是中間那一段的位置。 換成上一篇的說法,cutoff 就是這個共振器的固有頻率,filter 效果的「移動」,其實就是在移動 cutoff。
Resonance(Q)
在 cutoff 附近推出的共振峰有多高。 轉得越大,阻尼越小,峰就越高越尖,聲音也越「叫」。 很多 filter 轉到底時,阻尼會降到零以下,就算沒有輸入,也會自己發出一個穩定的正弦波,這叫做自我振盪(self-oscillation),原理就跟上一篇的回授一樣。
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 只用一條回授迴圈,就能在同一個瞬間同時得到低頻、中頻、高頻三種輸出, 而要改變這三種輸出的樣子,也只需要調整迴圈裡的兩個參數:
- 積分的速度:決定 cutoff。累加得越快,分界點就越往高頻移動,三種輸出會一起跟著移動。
- 阻尼
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 聽起來常常帶著金屬感,像聲音被灌進了一根管子裡。 延遲時間決定這把梳子的音高,延遲越短,音高越高;回授量則決定它響多久。 如果在回授路徑上再加一個低通,讓每繞一圈高頻就少一點,聲音就會從金屬感變得比較像弦,就像真實的樂器一樣,高頻總是先消失。
Phaser
Phaser 是這一節的反例:它刻意不做共振峰,而是挖出凹口。 它用的是全通濾波器(all-pass filter),這種 filter 不會改變任何頻率的大小,只會讓不同頻率延遲的時間不一樣,也就是改變相位。
把幾級全通串在一起,再跟原音相加,某些頻率的相位剛好被轉了半圈,跟原音方向相反,加起來就互相抵消,出現一個個凹口; 移動全通的頻率,凹口就跟著移動。
它聽起來有一種流動、旋轉的感覺,但不會像 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)要慢一點,讓「哇」的尾巴慢慢收回來,而不是一下子就斷掉。
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 會讓共振峰快速移動,某個瞬間剛好對上很強的泛音時,峰值可能突然衝高,這道限制就是確保任何極端情況都不會直接送到喇叭。