[an error occurred while processing this directive]
|
По поводу динамического диапазона. У нас вначале перед фильтром должна быть выполнена регулировка громкости, устанавливаемая юзером, а также системами автоматической подстройки уровня, системы адаптации громкости под шумы окружающей среды (сохранить соотношение сигнал/внешний шум на заданном уровне). Поэтому требования такие: при любом положении регулятора громкости (от -120дБ до 0дБ) никто не должен слышать никаких шумов (уровень их должен быть ниже -120 дБ). Звук тоже должен быть чистым (без шумов квантования) и в том случае, если регулятор громкости установлен в минимальное положение. Поэтому реально отношение сигнал/шум на выходе фильтра обеспечить в указанном диапазоне при использовании фиксед-пойнт обработки во всех случаях жизни крайне затруднительно. Или придется разрядность задирать до 48-ми или 64-х в обратной связи.
Вы можете возразить: но ведь кодеки-то 24-разрядные и тут как ни крути за 24 бита никуда не вылезешь. Но с фильтрами не совсем все так: дело в том, что после них (фильтров) идет нестационарная/нелинейная обработка: компрессоры и лимитеры - вот они уже и причесывают все к тому, чтобы вписаться в 24 бита. От фильтра же нужно больше.
О том, как можно реализовать FIR-фильтрацию в частотной области см. в гугле ссылки на тему overlap-add или overlap-save. Идея обработки в частотной области основана на том факте, что операции свертки во временной области соответствует операция умножения в частотной области. Операция умножения занимает гораздо меньше времени, чем операция свертки даже с учетом дискретного преобразования Фурье. Проблема заключается в том, что ДПФ - это циклическое преобразование, а нам нужно нециклическое. Проблема решается применением приемов, название которых я привел выше.