相位聲碼器

相位聲碼器是聲碼器的一種，它藉由改變聲音訊號的相位資訊，而達到音訊時域與頻域上的延展。時域與頻域的延展分別對應到此音訊在時間上的縮放（速度快慢改變），與聲音音高的改變。

原理

相位聲碼器的與傳統聲碼器最主要的差別在於：不同於傳統聲碼器將音訊切割成多個頻帶，相位聲碼器是使用短時距傅立葉變換（STFT），得到不只各頻格(frequency bin)的強度(ampiltude)，也得到相位(phase)的資訊。此技術之所以被稱為「相角」音碼器，是因為我們把聲音訊號轉為頻譜之後， 並非只是單純地在強度頻譜上，時間或者頻率的維度內插，還必須考慮相角與頻率的關係，並在相角頻譜上進行相對應的調整。相位聲碼器將特定頻率分量的振幅或相位修改後，透過反向短時傅立葉轉換(inverse STFT)將頻譜還原成時域的音訊。若改變STFT音框在時間上的位置，可以改變重新合成的聲音的時間演變。

STFT的物理意義

振幅
由於傅立葉轉換的物理意義，是將一段訊號表示為許多正弦波成分(sinusoid component)之疊加，現假設訊號的取樣率(sampling rate)為R，則Xm[k]可視為在第m個音框之中，頻率落在R⋅ k 附近的正弦波成分；而Xm[k]的強度就是這個正弦N波成分的振幅(amplitude)，它的平方就是這個正弦波成分的能量(energy)大小。然而根據訊號處理的原理，若訊號的取樣率為R，至多只能觀察到頻率為 R/2，也就是小於或等於奈奎斯特頻率(Nyquist frequency)的正弦波成分。
因此經由短時間傅立葉轉換得到的頻譜，實際上只有前(N/2 +1)個元素是有效的，之後的元素皆對稱於第 ( N /2+1) 個元素，與之前的元素為共軛複數對(complex conjugate pairs)。

相位
至於頻譜中的另一個成分: 相角，其物理意義則與正弦波成分的「瞬時頻率」(instantaneous frequency)有關。
考慮兩個相鄰音框中，同樣位於第 k 個頻道(frequency channel)的頻譜元素：X(m,k)以及 X(m−1,k)。這兩個元素的相角差(phase difference)除以音框平移時間量 Δt ，計算第 m 個音框的第 k 個頻率箱中，正弦波成分的角速度ω(m,k) :

ω(m,k) =2π⋅f(m,k)

=Δθ/Δt 

= (∠X(m,k)−∠X(m−1,k))/Δt

其中Δθ ≥0, f(m,k) 即為瞬時頻率。

從另一個方向來說,此正弦波成分之所以落在第 k 個頻道中,就是因為它的頻率位於此頻道所代表的頻率值範圍之內。它的頻率可以表示為此頻道的中心頻率 f(k) ，加上一個極小的頻率值:

f(m,k) = f(k) +  δ(m,k)/Δt

其中 f(k)= R⋅k/N ， δ(m,k) 是一個極小的相角改變量。

利用頻譜上相鄰音框的第 k 個頻率箱成分之相角差，可以計算此正弦波成分之瞬時頻率。但在實際情況中，相角只會落在一個 2π 的區間之內,因而無法得知真實的相角差。利用上式將相角差分為兩項，一項是落在此頻率箱的正弦波必然具有之相角改變量，另一項則記錄了漏未計算的相角改變量:

∠X(m,k)−∠X(m−1,k)= 2πk ⋅Δn/N+δ(m,k)

其中 Δn = Δt ⋅ R 是音框平移的取樣值數目。

因此 ( 2π k/N ⋅ Δn) 代表的是一個頻率為 f(k)= R⋅k/N 的正弦波，在經過時間 Δt 之後的相角改變量。
之後將δ(m,k)加上或減去2π,直到0≤δ(m,k)<2π，並重新加上2πk⋅Δn。如此一來就可以得到一個大於 0 的相角差值。
 以上的步驟稱為「相位重建」(phase unwrapping)。
注意到如果δ(m,k)在訊號中真實的相角變化超過 2π，會使得相位重建無法實行。 因此必須限制時間框的平移量。

相位連貫性問題

在操縱短時傅里葉變換的時，會遇到的一大問題，是各個信號分量（正弦信號，脈衝）將分散在多個時間框，以及頻譜的多個頻格。這是因為STFT分析是通過使用重疊分析窗函數。
如果考慮的是離散的時間軸，則我們對一離散訊號 x[n] 進行短時間傅立葉轉換，可表示為：

X(η,ω)= ∑x[n]w[n−η]exp(−jωn)    for n= -∞ to ∞

其中 n 跟η 為離散時間索引(discrete time index)，ω 為頻率索引，w[n] 為離散窗函數。

經過窗函數的訊號使得單個正弦分量的信息分佈在相鄰的時間框中。為了避免邊界效應，短時傅里葉分析的時間框會有時間上的重疊。這樣的重疊使相鄰的時間框有強烈的相關性（一個存在於時間“t”時間框中的正弦成分，在時間"t+1"中也會存在）。因此相位聲碼器的信號轉換問題涉及到相位連貫性的問題，也就是在做短時傅里葉與反向短時傅里葉後，相鄰的頻格應仍要保有適當的連貫性（縱向的連貫性）；而相鄰的時間框也會要保有適當的連貫性（橫向連貫性）。除極其簡單的聲音合成外，這些連貫性只能大概的被保留，而相位聲碼器的研究的主要關心便是找出適當的演算法，足以保存修改後的短時間傅立葉分析表示的垂直和水平的連貫性。時間縮放操作幅度的連貫性是一個較次要的問題，因為改變時間框在振幅上只有微小的影響。

歷史

相位聲碼器的演算法最初於1966年由Flanagan提出，可保存頻格相位水平水平的連貫性。這種原始相位聲碼器沒有顧及相鄰頻格之間的縱向的連貫性，因此這個系統做的時間縮放得到的聲音信號不清晰。

在 1981 年，波氏(Michael R. Portnoff)首先提出利用短時間傅立葉轉換 ，將聲音轉入頻域，並在不影響音高的前提之 下調整速度，亦即時間量度調整(time-scale modification)；之後在 1982 年，齊氏(Stephanie Seneff)同樣提出利用短時間傅立葉轉換，並導入音源—濾波器分解 (source-filter decomposition)的觀念，在不改變速度的前提之下，調整聲音檔案的音高，亦即音高平移(pitch shifting)。將這兩項技術結合，便是所謂「相角音碼器」 的雛形。

Griffin 和Lim在1984年提出將短時傅立葉轉換後的聲音訊號最佳化重建的演算法。此演算法不考慮連貫性的問題，但它能找到一個擁有與修改過後類似的短時傅立葉轉換的聲音信號；即便修改後的短時傅里葉轉換是不連貫的（不代表任何信號）。
縱向的連貫性的問題，直到1999年仍然是一個重大的問題，直到Laroche和Dolson提出了一個相當簡單的手段來保持頻格的相位連貫性。Laroche和Dolson的發現造成相位聲碼器歷史的一個轉折點。有了垂直相位的連貫性，聲音訊號可以得到很高品質的時間縮放。

音樂

如今相位聲碼器的技術被包裝成編曲工具auto-tune，被廣泛運用在流行音樂當中，不僅可以透過時間縮放達到調整音樂節拍的效果；還可以藉由音高的微調，將音訊量化到指定的音高，達到修正走音的功能，也可以將人聲轉換成類似機器人的聲音，或是高頻類似花栗鼠的聲線。