Определение наилучшего порядка фильтра для кодирования с линейным предсказанием

Мне интересно, существует ли установленный метод выбора наилучшего порядка фильтров для использования при выполнении кодирования с линейным предсказанием (например, используемого в форматах аудиофайлов, таких как FLAC).

Мой текущий подход:

  1. Возьмите кусок сигнала
  2. Окно сигнала с окном Туки 0,5
  3. Получите коэффициенты автокорреляции
  4. Рассчитайте коэффициенты LPC, используя коэффициенты автокорреляции
  5. Сгенерируйте предсказанный сигнал с помощью стандартного КИХ-фильтра с коэффициентами LPC
  6. Измерьте ошибку между исходным и предсказанным сигналом
  7. Перейдите к шагу 1 и продолжайте повторять с разными порядками фильтрации...
  8. Выберите лучший порядок на основе наименьшей ошибки

Можно ли оценить наилучший порядок фильтра, взглянув на ошибку, возникшую на шаге 4 процесса? Я хотел бы перейти к шагу 8 с шага 4, если это возможно.


person bennji_of_the_overflow    schedule 30.10.2014    source источник
comment
Меня это тоже давно интересовало, спасибо за вопрос.   -  person hcs    schedule 31.10.2014


Ответы (1)


Поскольку вы упомянули FLAC, я посмотрел, как они это делают. Похоже, в процессе расчета коэффициентов LPC оценивают ошибки для всех ордеров вплоть до макс. Общие вычисления начинаются здесь, они используют FLAC__lpc_compute_lp_coefficients, чтобы вычислить коэффициенты, а также оценить ошибку. Затем он используется в FLAC__lpc_compute_best_order, чтобы решить, какой коэффициент использовать. использования (в неисчерпывающем случае).

Еще одна реализация, на которую стоит обратить внимание, — это libflake. , который выбирает наивысший порядок n с коэффициентом отражения n-1 > 0,10. Похоже, это связано с описанным подходом здесь (PDF), который выбирает самый низкий порядок n, когда коэффициенты отражения n+1 и n+2 равны ‹ . 15. Оба ищут точку, где коэффициент отражения резко возрастает, но, глядя на рисунок 1 в вышеупомянутом PDF-файле, кажется, что поиск сверху, как это делает Flake, имеет больше смысла. Просто еще одна эвристика, но может быть интересной.

person hcs    schedule 31.10.2014
comment
Да, я смотрел на реализацию FLAC, но могу ли я сказать, что я думаю, что это не так? Я запустил несколько симуляций MATLAB, и они дают разные результаты из кода FLAC. В частности, в своей рекурсии Левинсона они инициализируют лямбда-ошибку коэффициентом автокорреляции в каждом цикле, а не начинают с нуля, что я не думаю правильно (это, безусловно, отличается от другой литературы). по этому вопросу). Кроме того, я подозреваю, что кодек FLAC не выбирает лучший порядок (опять же на основе моделирования MATLAB). - person bennji_of_the_overflow; 31.10.2014
comment
Я согласен, это просто эвристика, но это может быть лучшее, что вы можете сделать, не углубляясь. В интересах другой эвристики я отредактировал свой ответ, указав кое-что о подходе libflake. - person hcs; 31.10.2014
comment
Спасибо за ваш отзыв об этом. Я также собираюсь поближе познакомиться с libflake. Кажется, эвристика — лучшее, на что я могу надеяться на данном этапе. Еще раз спасибо :). - person bennji_of_the_overflow; 03.11.2014