2014-10-30 3 views
2

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

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

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

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

+0

Я уже давно заинтересовался этим, спасибо, что спросил. – hcs

ответ

1

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

Другая реализация смотреть на это libflake, который выбирает самый высокий порядок п с п-1 «s коэффициент отражения> .10. Это кажется связанным с подходом, описанным here (PDF), который выбирает наименьший порядок п при п + 1 и п + 2 коэффициенты отражения «ы являются < .15. Оба ищут точку, в которой отражается коэффи- циент отражения, но, глядя на цифру 1 в вышеупомянутом PDF-документе, похоже, что поиск по-прежнему сверху, поскольку у Флэка больше смысла. Еще один эвристический, но может быть интересным.

+0

Да, я посмотрел на реализацию FLAC, но могу ли я сказать, что я думаю, что это неправильно? Я запускал несколько симуляций MATLAB и производит разные результаты из кода FLAC. Прежде всего, в своей рекурсии левинсона они инициализируют лямбда-ошибку коэффициенту автокорреляции в каждом цикле, а не начиная с нуля, что я не считаю правильным (это, безусловно, отличается от другой литературы по этому вопросу). Кроме того, я подозреваю, что кодек FLAC * не * выбирает лучший порядок (опять же на основе моделирования MATLAB). –

+0

Я согласен, это просто эвристика, но это может быть лучшее, что вы можете сделать, не выходя из исчерпывающего. В интересах другой эвристики я отредактировал свой ответ с некоторыми материалами по подходу libflake. – hcs

+0

Спасибо за ваши отзывы. Я собираюсь поближе познакомиться с libflake. Кажется, что эвристика - это, пожалуй, лучшее, на что я могу надеяться на этом этапе. Еще раз спасибо :). –