主要出于我自己的经验和好奇心,我正在尝试研究文件和数据的格式,以便对它们有足够的了解,以输出相应程序可以识别的文件。
例如,通过在网上找到它们的结构规范,我已经能够编写相当简单的程序来生成具有未压缩内容的文件,格式为音频的 WAV、图像的 BMP 和运动图像的 Y4M。我还能够从 Internet 收集足够的信息来编写一个 Python 程序,该程序可以将 RGB 图像压缩和编码为 JPEG。
我不希望能够为特别高效或紧凑的格式实现编码器,或者编写一个更好的实现已经存在的,但是对于可以以比未压缩更少字节存储数据的音频编解码器,有哪些选项(如果有) WAV,有损或无损,有足够完整的文档可用,我可以编写一个简单的编码器来试验这个过程。
从我目前的搜索来看,对于大多数编解码器,文档充其量是不完整的。例如,关于 FLAC 的文档指出每个子帧有四种编码模式:常量、逐字、固定和 LPC。据说 LPC 最多使用 32 阶 FIR 滤波器进行预测,尽管我无法从提供的信息中收集到它们的系数是如何确定的,也无法准确地了解残差是如何用 Rice 编码进行编码的。对于这种或任何其他格式,是否有某种资源可以查看编码过程的各个步骤/方面的示例?
问问题
43 次
1 回答
0
固定线性预测器。FLAC 使用一类计算效率高的固定线性预测器(有关详细说明,请参阅audiopak和Shortcut)。FLAC 在 Shorten 使用的零到三阶预测器中添加了四阶预测器。由于预测器是固定的,因此预测器顺序是唯一需要存储在压缩流中的参数。然后将误差信号传递给残差编码器。
缩短链接下的论文非常详尽,几乎完全是 FLAC 使用所谓的固定预测器的方式。还解释了大米代码的工作原理。
至于如何有效地选择 LPC 系数:这可以通过多种方式完成。libFLAC 通过使用 Yule-Walker 方程来做到这一点。这些方程将信号的自相关作为输入,求解系统后返回可以很好地预测信号的 LPC 系数。
还有其他方法可以找到合适的 LPC 系数。这里有几个提到:
识别模型参数的另一种方法是使用卡尔曼滤波器迭代计算状态估计,并在期望最大化算法中获得最大似然估计。
也可以使用回归。
于 2021-09-07T18:52:58.527 回答