The CELT ultra-low delay audio codec
CELT 编码器是一种用于音频的压缩算法。像 MP3 , Vorbis ,和 AAC 一样适合传输音乐,且获得高质量的音质。不像其他形式, CELT 占用很小的延时,甚至其延时比语音核心版式像 Speex , GSM 或 G.729 的都少。
在超低延时领域,没有确定的标准。
-G.722.1C ( ITU-T ): 40ms delay up to 32kHz
-AAC-LD(MOEG):20-50ms delay up to 48kHz
-ULD(Fraunhofer): <10ms delay, up to 48kHz
CELT 已经在这些竞争中领先。
其特性是:
- 可配置, 1.3ms 到 24ms , 典型的是 ~8ms
- 质量(在相同的比特率下):比 G.722.1C 好,与 AAC-LD 的相当,比 ULD 的好。
- 灵活性: 24kbps 到 160+kbps , 32kHz 到 96kHz ,可配置的延时,低复杂度模式。
- 自由性:开源( BSD ),没有专利
CELT —— Constrained Energy Lapped Transform
- 转换编码( MDCT ,像 MP3 , Vorbis 一样)
短窗( ~8ms ) -> 低的频率分辨率
- 精确地对信号的各个带的能量进行编码
这样不论什么信号,可以保持声音的粗糙形状
- 使用矢量量化对剩下的细节进行编码
- 结合时间偏移使用基音预测
类似于语音编码中的线性预测
同时帮助补偿频率分辨率差的问题
1 、 Lapped Transform
我们都知道,任何信号都可以使用不同频率余弦曲线的加权和表示。离散余弦转换( DCT )计算各个频率的权值。
DCT 中的“离散( Discrete )”意味着我们限制有限的频率数。
- 随着转换块大小变小,能量“峰值”进入邻近的频率(更难去压缩)
同时普通的 DCT 在块之间产生编码失真(明显的不连续性),且很容易听出来。
“修正” DCT ( MDCT )使用衰落窗来对重叠的多块进行加窗。
- 与 MP3 , Vorbis , AAC 等一样,使用相同的转换。
- 但是使用更小的块,更少的重叠。
2 、 Constrained Energy
因为人的耳朵在频域能听见大约 25 个截然不同的“临界频带”
- 心理声学的掩蔽效应比频带之间的掩蔽效应强
根据临界频带( Bark scale )把 MDCT 系数进行分组
- 限制每个频带至少包含 3 个系数来最小化每个频带的开销( overhead )。
- 对所有频带具有不同的频率分辨率。
- 但是把更多的比特数用在低频部分( LFs )。
大多数重要的心理声学课程从 Vorbis 学习得到:
Preserve the energy in each band
Vorbis 通过“ floor curve ”间接地操作
CELT 中对能量进行精确的编码
- 粗糙的能量( 6dB 的分辨率),从前一帧和前一频带来预测
使用预测每帧可以节省 28bits , 5ms 的帧的比特率为 5.6kbps
- 精细的能量,当有可用的比特率则不用通过预测来改善分辨率
3 、 Coding Band Shape
规范化后,各个频带由 N 维的单位矢量来表示
- 点在 N 维的球体
- 描述频带的能量的形状
使用以下两方面来编码形状
- 使用前一个解码的信号内容的自适应码本来预测当前帧
- 固定码本来处理那些不能预测的信号部分( the “ innovation ”)
然后使用矢量量化
Pitch Prediction
短块大小 -> 低的频率分辨率
- 语音 / 音乐有周期的,平稳的内容
- 经过短的 MDCT 后不能正确的表示周期
基音预测补偿了低的分辨率
- 在时域搜索过去的 1024 的解码的样点,编码最好匹配的偏移
分辨率等于采样率
范围( 48kHz , FS=256 ): 48000/1024 到 48000/384=46.875 到 125Hz
- 应用 MDCT 来转换到频域
- 限制预测的频带低于 8kHz