相位聲碼器

相位聲碼器一種以傅立葉轉換為基礎的頻率處理工具，廣泛應用於音訊信號的時間伸縮（time-stretching）與音高轉換（pitch-shifting）等領域。為聲碼器演算法的一種，使用相位聲碼器策略還可以實現許多其他特殊效果。

簡介
相位聲碼器會將input訊號分解成各個區塊，並對各個區塊進行短時距傅立葉變換（STFT），得到音頻的訊息，例如：強度（amplitude），和相位（phase）。由於每個聲音都是由不同頻率的許多諧波部分組成的，因此可以使用該資訊來猜測在該分析幀中播放或唱出的音符。在所需的頻譜變化之後，透過反向快速傅立葉轉換（inverse FFT）處理重新合成，將每個段返回到時間域。然後將修改後的段落相加。

短時距傅立葉轉換（STFT）
 原理 
相位聲碼器第一個核心機制就是STFT，本身為一種傅立葉轉換（Fourier Transform）的變形，分析非平穩訊號（非恆定頻率），核心概念為將input訊號拆成各種短段，然後再對每一段進行快速傅立葉轉換。又稱加窗傅立葉轉換（Windowed Fourier Transform）。用於描繪頻域與時域的變化，是頻譜分析重要的工具。在基於軟體定義無線電（SDR）的頻譜顯示中常用的。覆蓋 SDR 整個範圍的全頻寬顯示器通常在桌上型電腦上使用具有 2^24 點的快速傅立葉變換（FFT）。

數學公式
 連續STFT 
在連續時間情況下，要變換的函數乘以一個僅在短時間內非零，它的數學公式基本形式為以下式子：

為原始訊號；(−t)為窗函數（Window Function），集中在 t 附近，通常為高斯窗函數或漢窗函數；為頻率變數；為一個表示訊號隨時間和頻率變化的相位和振幅的複函數。通常沿時間軸或兩個軸進行相位展開，τ和頻率軸，，以抑制STFT 相位結果的任何跳躍不連續性。

這個式子其實就是Convulution的樣子，而這個公式等價於

窗函數的選擇會影響其結果，如果窗函數是Rectangular，時間會比較集中，但會有leakage；如果是Hamming或是Gaussian，整體能量會比較集中，且比較平滑。

 離散STFT 
然而在大多數情況下，你不會處理連續訊號。在離散的時間下，要轉換的資料分解成區塊，每一段進行傅立葉轉換，它的數學公式基本形式為以下式子：

為第幾個窗口位置。對每個m乘上窗函數，再做DFT。

限制
 海森堡不確定性原理 
對於任意函數，時間域與頻率域的能量集中程度不能同時任意小：

意思是無法同時獲得非常精細的時間和非常精細的頻率資訊，換句話說，STFT本質上是折衷，當窗越短，時間解析度高，但頻率模糊；相反地，當窗越長，頻率解析度高，但時間模糊。這也是後來產生 Wavelet Transform 或 Wigner-Ville 分布 等替代方法的原因。

 用途 
STFT應用在很多領域，如果是語音和音樂領域，有應用在語音辨識及樂譜分析，分析一首樂曲裡的和聲進行和音高變化；在醫學方面則是腦電圖（EEG）的分析和心電圖（ECG）的雜訊過濾；在工程方面，機器有時出現間歇性振動或軸承故障，而STFT 可追蹤這些不穩定震動頻率，做出預警或自動維修建議。

 相位重建（Phase Unwrapping） 
另外一個機制是相位重建，在許多訊號處理領域中（例如雷達、光學干涉儀、MRI 或合成孔徑雷達 SAR），測量的相位常常是被包裹的（wrapped）。換句話說，所量得的相位值僅限於或，這會導致一個問題：原始訊號的連續相位會出現跳躍（phase jumps），因為超出區間的部分被模回到範圍內。

 常見解法 
常見主要有三種：第一個為積分法（Path-following / Integration），按空間或時間順序比對相位差異，當差異超過  就加減  修正；第二個為最小平方法，用最佳化的方式找出最平滑的相位曲面；第三個為品質指標引導，根據相位變化平滑程度的「可信度」來選擇展開順序。

 時間拉伸（Time-Stretch） 
指在不改變音調的情況下，對音訊檔案進行處理，使其播放速度變慢或變快的過程。時間拉伸在音樂製作中用於調整循環或樣本的節奏，或將人聲或樣本融入不同節奏的項目中。

當我們要拉長訊號（如兩倍慢放），我們會使用一個比原始 hop size 更小的合成 hop size 。假設伸長倍率為 ，例如代表要伸長一倍的時間

當兩個預先錄製的片段無法重新播放或重新取樣時，這些處理通常用於匹配它們的音高和節奏，以便進行混音。時間拉伸通常用於調整廣播廣告和電視廣告的音頻，使其恰好適合30秒或60秒的時長。它也可以用於將較長的素材調整到指定的時間段，例如1小時的廣播節目。

 參考資料