相位声码器
此条目没有列出任何参考或来源。 (2019年3月10日) |
相位声码器一种以傅立叶转换为基础的频率处理工具,广泛应用于音讯信号的时间伸缩(time-stretching)与音高转换(pitch-shifting)等领域。为声码器演算法的一种,使用相位声码器策略还可以实现许多其他特殊效果。[1]
简介
[编辑]相位声码器会将input讯号分解成各个区块,并对各个区块进行短时距傅立叶变换(STFT),得到音频的讯息,例如:强度(amplitude),和相位(phase)。由于每个声音都是由不同频率的许多谐波部分组成的,因此可以使用该资讯来猜测在该分析帧中播放或唱出的音符。[2]在所需的频谱变化之后,透过反向快速傅立叶转换(inverse FFT)处理重新合成,将每个段返回到时间域。然后将修改后的段落相加。
短时距傅立叶转换(STFT)
[编辑]原理
[编辑]相位声码器第一个核心机制就是STFT,本身为一种傅立叶转换(Fourier Transform)的变形,分析非平稳讯号(非恒定频率),核心概念为将input讯号拆成各种短段,然后再对每一段进行快速傅立叶转换。又称加窗傅立叶转换(Windowed Fourier Transform)。用于描绘频域与时域的变化,是频谱分析重要的工具。在基于软体定义无线电(SDR) 的频谱显示中常用的。覆盖 SDR 整个范围的全频宽显示器通常在桌上型电脑上使用具有 2^24 点的快速傅立叶变换 (FFT)。[3]
数学公式
[编辑]连续STFT
[编辑]在连续时间情况下,要变换的函数乘以一个仅在短时间内非零,它的数学公式基本形式为以下式子:
为原始讯号;(−t)为窗函数(Window Function),集中在 t 附近,通常为高斯窗函数或汉窗函数;为频率变数;解析失败 (SVG(MathML可通过浏览器插件启用):从服务器“http://localhost:6011/zh.wikipedia.org/v1/”返回无效的响应(“Math extension cannot connect to Restbase.”):): {\displaystyle X(\tau, \omega)} 为一个表示讯号随时间和频率变化的相位和振幅的复函数。通常沿时间轴或两个轴进行相位展开,τ和频率轴,,以抑制STFT 相位结果的任何跳跃不连续性。[4]
这个式子其实就是Convulution的样子,而这个公式等价于
窗函数的选择会影响其结果,如果窗函数是Rectangular,时间会比较集中,但会有leakage;如果是Hamming或是Gaussian,整体能量会比较集中,且比较平滑。
离散STFT
[编辑]然而在大多数情况下,你不会处理连续讯号。在离散的时间下,要转换的资料分解成区块,每一段进行傅立叶转换,它的数学公式基本形式为以下式子:
为第几个窗口位置。对每个m乘上窗函数,再做DFT。
限制
[编辑]海森堡不确定性原理
[编辑]对于任意函数,时间域与频率域的能量集中程度不能同时任意小:
意思是无法同时获得非常精细的时间和非常精细的频率资讯,换句话说,STFT本质上是折衷,当窗越短,时间解析度高,但频率模糊;相反地,当窗越长,频率解析度高,但时间模糊。这也是后来产生 Wavelet Transform 或 Wigner-Ville 分布 等替代方法的原因。
用途
[编辑]STFT应用在很多领域,如果是语音和音乐领域,有应用在语音辨识及乐谱分析,分析一首乐曲里的和声进行和音高变化;在医学方面则是脑电图(EEG)的分析和心电图(ECG)的杂讯过滤;在工程方面,机器有时出现间歇性振动或轴承故障,而STFT 可追踪这些不稳定震动频率,做出预警或自动维修建议。
相位重建(Phase Unwrapping)
[编辑]另外一个机制是相位重建,在许多讯号处理领域中(例如雷达、光学干涉仪、MRI 或合成孔径雷达 SAR),测量的相位常常是被包裹的(wrapped)。换句话说,所量得的相位值仅限于或,这会导致一个问题:原始讯号的连续相位会出现跳跃(phase jumps),因为超出区间的部分被模回到范围内。[5]
常见解法
[编辑]常见主要有三种:第一个为积分法(Path-following / Integration),按空间或时间顺序比对相位差异,当差异超过 就加减 修正;第二个为最小平方法,用最佳化的方式找出最平滑的相位曲面;第三个为品质指标引导,根据相位变化平滑程度的“可信度”来选择展开顺序。
时间拉伸(Time-Stretch)
[编辑]指在不改变音调的情况下,对音讯档案进行处理,使其播放速度变慢或变快的过程。时间拉伸在音乐制作中用于调整循环或样本的节奏,或将人声或样本融入不同节奏的项目中。[6]
当我们要拉长讯号(如两倍慢放),我们会使用一个比原始 hop size 更小的合成 hop size 。假设伸长倍率为 ,例如代表要伸长一倍的时间
当两个预先录制的片段无法重新播放或重新取样时,这些处理通常用于匹配它们的音高和节奏,以便进行混音。时间拉伸通常用于调整广播广告和电视广告的音频,使其恰好适合30秒或60秒的时长。它也可以用于将较长的素材调整到指定的时间段,例如1小时的广播节目。[7]
参考资料
[编辑]- ^ 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] (美国英语).
- ^ Short-time Fourier transform, 2025-03-03 [2025-05-30] (英语)
- ^ Short-time Fourier transform, 2025-03-03 [2025-05-30] (英语)
- ^ Unwrapped Phase - an overview | ScienceDirect Topics. www.sciencedirect.com. [2025-06-04].
- ^ Simms, Sara. What is time stretching? When to use it in music production. Native Instruments Blog. 2024-02-09 [2025-06-04] (美国英语).
- ^ Audio time stretching and pitch scaling, 2025-04-28 [2025-06-06] (英语)