Comments 13
Было бы интересно узнать результаты прослушивания на слышимость артефактов. Например, пре-эхо.
![](https://webcf.waybackmachine.org/web/20210910111304/https://habrastorage.org/webt/ci/c0/0d/cic00dggewz0jffmdic5pqrpl4q.png)
![](https://webcf.waybackmachine.org/web/20210910111304/https://habrastorage.org/webt/rg/we/sa/rgwesag78js0hfpffrzh5r7nkpo.png)
а минимально-фазовая — так:
![](https://webcf.waybackmachine.org/web/20210910111304/https://habrastorage.org/webt/ao/dq/y0/aodqy00qnzax0hfhtkxoftjfsqw.png)
Видно, что в первом случае и фронт более резкий, и пульсации затухают сильнее.
Несмотря на очевидность постановки задачи, мне не встречалось ничего подобного
Не там искали.
КИХ фильтры в обработке звука обычно не используют, так как ухо нечувствительно к фазе сигнала, только в редких случаях прибегают к Allpass фильтрам для глубокого баса, но это редкость и мало кто это способен хоть как-то услышать.
Спасибо за интересный и полезный материал!
Позвольте пару вопросов от неспециалиста:
Как эффективно применять полученный КИХ-фильтр?
Простейшая реализация - прямая свёртка входного сигнала с фильтром. Это даёт почти нулевую задержку, но само вычисление занимает слишком много времени. Ускорить вычисление можно с помощью БПФ (умножая Фурье-образ фрагмента входного сигнала на Фурье-образ фильтра). Но алгоритм БПФ предполагает, что входной сигнал зациклен, а в нашем случае это не так, т.к. мы просто выдёргиваем произвольный фрагмент из временного ряда. В результате такой фильтрации конец и начало фрагмента будут "смешаны" друг с другом. Как этого избежать? Использовать оконную функцию (например, Ганна)? А как потом восстановить фильтрованный сигнал из фрагментов?Пробовали ли Вы в качестве функции пропускания (для АЧХ) использовать интеграл атомарной функции? Она обладает двумя замечательными свойствами: её производная представляет собой сумму двух таких же функций (с точностью до масштаба и смещения); в точках "стыковки" все её производные равны нулю, т.е. стык получается идеально гладким.
1.б. Для свёртки без задержки есть алгоритм zero-delay convolution, идея которого тоже проста. Допустим, у нас FIR в 16 отсчётов. Тогда мы его разбиваем на 4,4 и 8 отсчётов. Первые 4 вычисляем прямой свёрткой, остальные — через FFT (что даст задержку соответственно в 4 и 8 отсчётов). Результаты складываем.
2. Нет, не слышал о таких функциях.
Спасибо за интересную и доступную подачу материала. Раз вы упомянули про QMF, может знаете что кроме научных статей можно почитать про расчет FIR фильтра для полифазного фильтрбанка?
Ух. Есть у меня pet project - открытая реализация atrac кодека. Для atrac3plus нужно реализовать анализирующий фильтрбанк для вот такой реализации синтезирующего https://github.com/FFmpeg/FFmpeg/blob/master/libavcodec/atrac3plusdsp.c#L502-L645
Попытка "с наскоку" взять и адаптировать код pqf из другого кодека для моего случая (M=16, 384 fir коэффициента) не очень сработала - хотя для DC или синуса результат очень похож на правду, и после обратного синтеза получилось что то похожее на near perfect reconstruction, но для дельта функции или просто прямоугольного фронта после синтеза получается уже совсем не похожий на входной сигнал.
Что хочется для себя прояснить.
Как по прототипу понять является ли фильтрбанк near perfect reconstruction или perfect reconstruction?
Из разных статей понял, что есть случаи когда анализирующий и синтезирующий фильтрбанк используют разные прототипы. Есть подозрения что это именно мой случай. Можно ли это как то узнать из анализа прототипа? И как получить из одного другой?
Ну и в целом тема интересная, есть много вопросов, но к сожалению математику происходящего понимаю плохо (
В данном случае у меня сразу возникло непонимание того, как из этих коэффициентов получается результирующий FIR-фильтр. Попробовал их визуализировать в том порядке, в котором они описываются — получилось следующее:
![](https://webcf.waybackmachine.org/web/20210910111304/https://habrastorage.org/webt/sd/zk/t4/sdzkt4u8uz_pii9vlmyokfm3mgg.png)
Выглядит так, как будто авторы специально усложнили алгоритм для реверс-инжиниринга.
В статье повстречались мелкие ошибки по синтаксису и орфографии:
1) -"Переход между этими областями осуществляется через преобразование Фурье, которая между функциями во временной и в частотной области задаёт однозначное соответствие." Здесь определение "которая" женского рода, а должно быть среднего, так как относится к слову "преобразование", которое среднего рода. Тут бы не помешало буковку "а" заменить на "о", в окончании слова "которая".
2) -"По сути, представляют собой всё те аналоговые фильтры, но «моделируемые» в цифре..." Здесь недостаёт частички "же" после "всё те", для более удобоваримого прочтения.
3) -"Среди множества разработанных окон одним из наиболее оптимальных и удобным для аналитических вычислений является окно Нуттала, определяемая как..." Тут "определяемая" - по смыслу соотносится к существительному среднего рода "окно", а раз так, то и окончание должно быть так же среднего рода: "определяемое", а не женского - "определяемая". Ну или как вариант, можно добавить слово "функция".
4) -"Используя полином 5-ой степени, с двумя нулевыми производными на границах сопряжения." Здесь недосказанный непорядок в первом слове. "Используя", подразумевает некое дальнейшее действие. Но его нет до самой точки в окончании предложения. А раз нет дальнейшего действия, то целесообразнее изменить окончание у первого слова, например на вариант "используем", тогда получится предложение с констатацией факта. А иначе смысл как бы повисает в воздухе, а логичного завершения в данном предложении не следует.
5) "-Используя рациональный полином — даёт более гладкую характеристику и более простую обратную функцию, чем у кубической:" Здесь первому слову "используя" (что делая здесь и сейчас), глагол "даёт" не соответствует. Просится изменение первого слова на "использование", с коррекцией окончаний в последующих двух словах: -Использование рационального полинома — даёт более гладкую характеристику...
6) -"Для реализации таких фильтров в «мультиампинг»-системах можно использовать готовые решения, позволяющих загружать заранее посчитанные импульсные файлы." Здесь следует изменить окончание в слове "позволяющих", на "позволяющие", так как оно относится к существительному женского рода во множественном числе: "решения". Готовые решения позволяющие загружать... (так получится правильно). А пока читается несколько коряво: -"Готовые решения позволяющих загружать..."
Симметричные НЧ-ВЧ фильтры: новое слово в цифровой обработке сигналов