确定线性预测编码的最佳滤波器阶数



我想知道是否有一种既定的方法可以在执行线性预测编码时选择最佳滤波器顺序(例如在FLAC等音频文件格式中使用的方法)。

我目前的做法是:

  1. 获取大量信号
  2. 用0.5 tukey窗口打开信号
  3. 获取自相关系数
  4. 使用自相关系数计算LPC系数
  5. 使用具有LPC系数的标准FIR滤波器生成预测信号
  6. 测量原始信号和预测信号之间的误差
  7. 转到步骤1,继续使用不同的筛选顺序重复
  8. 根据最低错误选择最佳订单

是否可以通过查看过程第4步产生的误差来估计最佳滤波器阶数?如果可能的话,我想从第4步快捷到第8步。

既然你提到了FLAC,我就看看他们是如何做到的。看起来在计算LPC系数的过程中,他们会估计所有阶数的误差,直到最大值。总体计算从这里开始,他们使用FLAC_LPC_compute_lp_coefficients来计算系数,并估计误差。然后在FLAC__lpc_computer_best_order中使用它来决定使用什么系数(在非耗尽情况下)。

另一个需要关注的实现是libflake,它选择具有n-1反射系数>.10的最高阶n。这似乎与这里描述的方法(PDF)有关,该方法在n+1n+2的反射系数<时选择最低阶n。15.两者都在寻找反射系数爆炸的点,但从前面提到的PDF中的图1来看,像Flake那样从上面进行搜索更有意义。这只是另一种启发,但可能很有趣。