2014-10-30 27 views
2

我在想如果在執行線性預測編碼(例如在FLAC等音頻文件格式中使用的編碼)中選擇最佳濾波器順序時,是否存在已建立的方法。確定線性預測編碼的最佳濾波器順序

我目前的做法是:

  1. 徑信號
  2. 窗口的信號的塊用0.5 Tukey窗
  3. 獲取自相關係數
  4. 使用自動計算LPC係數 - 相關係數
  5. 使用具有LPC係數的標準FIR濾波器生成預測信號
  6. 測量原始的和預測信號
  7. 轉到步驟1和之間的誤差繼續用不同的濾波器階 重複...
  8. 選擇基於最低誤差

最佳順序是否有可能估計最好通過查看過程的第4步創建的錯誤來篩選順序?如果可能的話,我想從步驟4快捷步驟8。

+0

我一直對此感興趣,謝謝你的提問。 – hcs 2014-10-31 02:36:12

回答

1

既然你提到FLAC,我看看他們是如何做到的。它看起來像在計算LPC係數的過程中,他們估計所有訂單的誤差直到最大。整體計算開始here,他們使用FLAC__lpc_compute_lp_coefficients來計算係數並估計誤差。然後在FLAC__lpc_compute_best_order中使用它來決定使用什麼係數(在非窮盡的情況下)。

另一實現看是libflake,其被選擇的最高順序Ñn-1個的反射係數> 0.10。這似乎與here (PDF)描述的方法有關,其選擇最低階nn + 1n + 2的反射係數是<.15。兩者都在尋找反射係數爆發的點,但從上面的PDF中看圖1,它看起來像從上面進行搜索,因爲Flake確實更有意義。只是另一種啓發式,但可能會很有趣。

+0

是的,我看了FLAC實現,但我可以說我認爲它不正確?我運行了幾個MATLAB仿真程序,它產生了FLAC代碼的不同結果。最值得注意的是,在他們的levinson遞歸中,他們將lambda誤差初始化爲每個循環中的自相關係數,而不是從零開始,而我不認爲*是正確的(這與其他文獻當然不同)。此外,我懷疑FLAC編解碼器不是*選擇最好的順序(再次基於MATLAB仿真)。 – 2014-10-31 09:06:29

+0

我同意,這只是一個啓發式的,但這可能是最好的,你可以做的沒有詳盡無遺。出於另一種啓發式的興趣,我用libflake的方法編輯了我的答案。 – hcs 2014-10-31 10:10:27

+0

感謝您對此的反饋。我也將仔細研究libflake。在這個階段,似乎啓發式可能是我所希望的最好的。再次感謝 :)。 – 2014-11-02 21:40:30