相位声码器
此条目没有列出任何参考或来源。 (2019年3月10日) |
相位声码器一种以傅立叶转换为基础的频率处理工具,广泛应用于音讯信号的时间伸缩(time-stretching)与音高转换(pitch-shifting)等领域。为声码器算法的一种,使用相位声码器策略还可以实现许多其他特殊效果。[1]
原理
[编辑]相位声码器会将input讯号分解成各个区块,并对各个区块进行短时距傅立叶变换(STFT),得到音频的讯息,例如:强度(amplitude),和相位(phase)。由于每个声音都是由不同频率的许多谐波部分组成的,因此可以使用该资讯来猜测在该分析帧中播放或唱出的音符。[2]在所需的频谱变化之后,透过反向快速傅立叶转换(inverse FFT)处理重新合成,将每个段返回到时间域。然后将修改后的段落相加。
短时距傅立叶转换(STFT)
[编辑]简介
[编辑]本身为一种傅立叶转换(Fourier Transform)的变形,分析非平稳讯号(非恒定频率),核心概念为将input讯号拆成各种短段,然后再对每一段进行快速傅立叶转换。又称加窗傅立叶转换(Windowed Fourier Transform)。
数学公式
[编辑]STFT的数学公式基本形式为以下式子:
可看出这个式子其实就是Convulution的样子,而这个公式等价于
这个式子的意义在于,在时间点t上对窗内的讯号进行傅立叶转换。
相位
[编辑]至于频谱中的另一个成分: 相角,其物理意义则与正弦波成分的“瞬时频率”(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,被广泛运用在流行音乐当中,不仅可以透过时间缩放达到调整音乐节拍的效果;还可以借由音高的微调,将音讯量化到指定的音高,达到修正走音的功能,也可以将人声转换成类似机器人的声音,或是高频类似花栗鼠的声线。
参考资料
[编辑]- ^ William A. Sethares. phase vocoder in Matlab. sethares.engr.wisc.edu. [2025-05-11].
- ^ BABY Audio - What is a Phase Vocoder? How Pitch Correction Works in Music Production. BABY Audio. 2024-07-16 [2025-05-13] (美国英语).