如何結合反極性鋸齒波來建立脈衝寬度調變
要建立脈衝寬度調變(PWM),將兩個相同電平的鋸齒波混合,反轉其中一個的極性,並改變兩者的相對相位。兩者方向相反的斜坡會在重置之間互相抵消,留下脈衝波形,其寬度會隨重置點之間的間隔而改變。New Systems Instruments 明確記載了這項技術,並將其應用於相位控制鋸齒波振盪器。Triphase Oscillator
本指南適合想用振盪器與混音功能打造這種聲音的合成器使用者。先設定固定脈衝,確認抵消作用正常,再加入變化。實際上,你可以直接控制相位,或讓兩個頻率略有差異的波形使相位持續移動。
兩個鋸齒波要符合哪些條件才能產生脈衝?
你需要兩個基本形狀相同、振幅相等、極性相反,且相位關係可調的鋸齒波訊號。若要產生精確的靜態脈衝,兩者的頻率也必須相同。一個訊號在重置之間上升,另一個則下降;相加時,兩者的斜率會互相抵消。
實用的配置包括一個可獨立調整相位輸出的鋸齒波訊號源、一個能將其中一個訊號從另一個訊號中相減的混音器,以及一個低頻振盪器(LFO)用於調變。或者,也可以使用兩個振盪器訊號源,並另外加上極性反轉器。Triphase Oscillator 是有文件記載的硬體實作之一:它提供相同音高、相位可獨立控制的鋸齒波輸出,以及雙極性混音器。Triphase Oscillator
極性反轉與相位偏移是兩種不同的操作。反轉會將每個取樣或電壓乘以 −1。相位偏移則會讓波形在週期內移動。鋸齒波平移半個週期本身並不會反轉其斜率。Puckette 對波形的分析指出,相減半週期相隔的鋸齒波會產生方波,而相加則會產生頻率加倍的鋸齒波。鋸齒波與對稱性
因此,合成器的起始相位控制只有在能建立所需關係時才有用。持續的 PWM 需要一個能在音符發聲期間改變相對相位的參數,或是利用頻率差讓相位逐漸偏移。
為什麼相減鋸齒波會改變脈衝寬度?
想像兩個相同的上升鋸齒波,彼此相隔週期的一部分。將其中一個從另一個中相減。在兩者重置之間,它們以相同速率上升,因此差值維持不變。任一波形重置時,差值就會跳到另一個電平。兩個重置點之間的間隔,決定了輸出維持在各電平的時間。Steffan Diedrichsen 的合成筆記描述了這種延遲鋸齒波相減法。脈衝寬度調變
以下提供一套明確的數學慣例,用來預測結果。令 p 表示目前相位,其範圍從 0 到小於 1。將正向上升鋸齒波正規化為 r(p) = 2 × frac(p) − 1,其中 frac 會將其引數折回該區間。若要得到正脈衝占空比 D(介於 0 和 1 之間),則建立 y = r(p − D) − r(p)。
依照此慣例,輸出在週期前 D 的部分為 2(1 − D),其餘部分則為 −2D。因此,正向部分恰好占每個週期的 D。下列數值是以振幅範圍從 −1 到 +1 的理想鋸齒波進行的示例計算,並非任何特定樂器的測量結果。
| 正脈衝占空比 | 相對延遲 | 高電平 | 低電平 |
|---|---|---|---|
| 25% | 四分之一週期,或 90° | +1.5 | −0.5 |
| 50% | 二分之一週期,或 180° | +1.0 | −1.0 |
| 75% | 四分之三週期,或 270° | +0.5 | −1.5 |
25% 和 75% 占空比時正、負電平不相等是預期結果:在這種構造中,每個波形的平均值都是零。我以 1,000 個等間距相位數值對這三種情況進行了數值檢查。反轉相減順序會反轉輸出極性,因此裝置顯示的相位方向可能會得到互補的正向占空比。
相對偏移為零時,極性相反的相同波形會完全抵消。這個端點適合用於校準,但不會產生持續的脈衝音。
加入調變前,如何設定穩定的脈衝?
如果你的樂器提供匹配的鋸齒波輸出和可調的相對相位,請依照以下步驟操作。New Systems Instruments 的手冊記載了相同的基本路由方式:混音器中一個正向輸入、一個負向輸入,並透過調整相位設定脈衝寬度。Triphase Oscillator — 使用者手冊,修訂版 1.01
- 選擇兩個匹配的鋸齒波訊號。 使用共用振盪器核心,或能維持兩者頻率關係的軟體振盪器架構。
- 暫時停用調變。 關閉相位隨機化和額外聲部,以便檢查一組波形。
- 將兩個訊號接到加總混音器。 設定抵消時,保持訊號路徑為線性。
- 反轉其中一個輸入的極性。 使用負的混音器增益或專用反轉器,另一個輸入則保持正向。
- 在零相位偏移時匹配兩者振幅。 調整電平,直到加總輸出接近靜音。
- 將相對相位移至半個週期。 理想結果是高、低電平時間相等的方波。
- 將相位差調至四分之一週期附近。 確認其中一個部分變短,另一個部分變長。
如果有示波器可用,請檢視加總訊號。在固定偏移下,觀察是否有兩段大致水平的區域,中間以轉換點相隔。這能讓你在透過濾波器或效果器聆聽之前,先有具體方式確認結果。
旋鈕位置相同不一定代表訊號振幅相同。零偏移抵消測試會檢查完整訊號路徑,包括振盪器輸出電平和混音器增益。測試成功後,保持增益不變,再用相位設定脈衝寬度。
如何將固定脈衝轉為可控的 PWM?
將 LFO 套用至相對相位控制。舉例來說,可以將相位關係中心設在半個週期,並使用較慢的調變速率,例如 0.3 Hz。逐漸增加深度,直到脈衝從寬變窄,但不會完全抵消。這些是可依耳朵調整的起始設定,並非產品規格。
若要明確設定調變範圍,可將前述慣例寫成 D(t) = 0.5 + 0.2 × sin(2π × 0.3 × t),其中時間 t 的單位為秒。這會使正向占空比在 30% 到 70% 之間掃動,約每 3.33 秒完成一個調變週期。將此範圍換算為樂器使用的相位單位;不要假設所有相位輸入採用相同的電壓比例。
只移動一個鋸齒波的相位,也會讓一個脈衝邊緣相對另一個邊緣移動。如果因此產生過多音高變化,可以試著讓兩個相位以相同幅度朝相反方向移動。Triphase 手冊特別建議將相同控制訊號套用至兩個相位輸入,並使用方向相反的衰減反轉器設定,以減少基頻音高的變化。Triphase Oscillator — 使用者手冊
加入其他音色塑形之前,先設定脈衝寬度範圍。如此一來,如果音色變弱,就更容易判斷是因為接近抵消,還是來自訊號鏈後段。
略微失諧的振盪器也能產生相同的變化嗎?
可以。兩個極性相反、頻率略有差異的鋸齒波,其相對相位會持續變化。Puckette 的 PWM 範例正是採用這種方法。如果合成器提供振盪器調音和極性反轉,但沒有連續相位控制,這種方法就很有用。結合鋸齒波
每當兩個頻率之差累積一個完整週期,相位關係就會前進一個完整週期。例如,舉例頻率 100 Hz 和 100.2 Hz 相差 0.2 Hz,因此兩者的相對相位每隔 1 ÷ 0.2 = 5 秒就會重複一次。固定的頻率差因此能提供可預測的掃動週期。
這與等頻率的構造在數學上略有不同。對正規化鋸齒波而言,斜率與頻率成正比。相減不同頻率的鋸齒波後,轉換點之間會留下殘餘斜率;頻率差越小,結果就越接近平頂脈衝。直接對鋸齒波公式中的斜坡部分微分即可得到這個結果。
失諧也會掃過整個相對相位週期,包括接近完全抵消的區域。直接調變相位則可以選擇中心位置並限制掃動範圍。若想要持續旋轉的相位關係,選擇失諧;若需要可重現的脈衝寬度範圍,則選擇相位控制。
如果振盪器沒有可調相位輸出,該怎麼辦?
確認你的系統能否從現有鋸齒波產生相位偏移版本。Doepfer 記載了一種代數方法:將輸入鋸齒波與控制電壓比較,再以適當電平將產生的矩形波加回去,即可得到相位偏移後的鋸齒波。控制電壓會設定實際偏移量。A-137-2 Wave Multiplier II
如果有合適的處理器能獨立輸出相位偏移後的鋸齒波,就可以依照上述方法,將它與極性相反的原始波形混合。請先確認可用的輸出。Doepfer 對 A-137-2 的說明區分了總和輸出與內部可用的個別訊號;不要假設前面板的總和輸出就是可獨立取得的相位偏移鋸齒波。A-137-2 Wave Multiplier II
因此,實際上可依設備選擇做法:有獨立相位輸出時就使用它;可以接受完整掃動時,就讓兩個振盪器失諧;或使用具有可存取個別訊號、且文件有明確說明的鋸齒波移相處理器。必要功能是能控制匹配斜坡波之間的相位關係。
如何診斷意料之外的結果?
從最簡單的靜態配置開始,逐步反向檢查。以下檢查依據抵消模型整理,可協助區分路由錯誤與刻意加入的調變。
| 觀察到的現象 | 檢查項目 | 下一步 |
|---|---|---|
| 零偏移時仍有明顯鋸齒波 | 極性和振幅匹配 | 確認其中一個輸入為負向,再微調電平使其抵消 |
| 固定脈衝寬度下仍有斜坡部分 | 頻率、增益和波形匹配 | 移除失諧,並比較兩個訊號源的訊號 |
| 只有在音符起始時脈衝寬度才改變 | 起始相位行為 | 尋找連續相位調變,或使用輕微失諧 |
| 聲音會週期性地幾乎消失 | 調變範圍碰到相位對齊的位置 | 降低深度或移動相位中心 |
| 加入第二個鋸齒波後,感覺音高提高 | 混音器的兩個輸入可能是相同極性 | 調整相位前,先重新檢查極性反轉 |
對數位實作而言,也要區分波形建構方式與音訊渲染品質。數學上直接產生的鋸齒波包含不連續點。SciPy 明確指出,其 sawtooth 函式並未限制頻帶,且其諧波會產生混疊;取樣兩個這類斜坡並將它們相減,並不能達到抗混疊效果。SciPy 鋸齒波文件
若要在軟體中實作音訊速率的訊號,請使用合適的限頻振盪器方法,或使用過度取樣並在降取樣前濾波的架構。Puckette 記載了兩種鋸齒波產生方法:過度取樣與轉換點拼接。請在預定的音高和調變範圍內檢查結果,不要只依據低音符的波形檢視來判斷。鋸齒波限頻策略
分三個階段建立聲音:在零偏移時確認抵消,在半週期相隔時建立方波,然後再讓相對相位動起來。這個順序能讓你在每個階段都有可靠的參考點,也讓最後的 PWM 配置更容易控制。
