DriftEcho & Dex
DriftEcho DriftEcho
Привет, Декс. Тут такое дело, по ночам слышу какой-то странный гул из метро, словно накладывается один на другой. Думал, может, как-нибудь можно его смоделировать с помощью адаптивного фильтра. Может, у тебя есть какие-нибудь идеи, как это алгоритмически реализовать?
Dex Dex
Хм, этот слоистый гул звучит как смесь нескольких синусоид с разными задержками и амплитудами. Простейший способ это моделировать – адаптивный ФНЧ. Начни со стандартной реализации LMS – легко запрограммировать и для большинства случаев подойдет. Выбери шаг, например, mu = 0.01, и дай фильтру достаточное количество коэффициентов, чтобы покрыть разброс задержек, может быть, 512, если частота дискретизации 48 кГц. Следи за среднеквадратичной ошибкой; если она застынет, попробуй уменьшить mu или переходи на RLS для более быстрой сходимости, хотя это вычислительно сложнее. Если гул имеет предсказуемую периодичность, можно попробовать адаптивную синусоидальную модель: поддерживай несколько синусоид, амплитуды и фазы которых обновляются методом градиентного спуска. Это позволит ухватить слоистую структуру с меньшим количеством параметров. А если хочешь разделить слои, запускай несколько адаптивных фильтров параллельно, каждый с немного разными начальными условиями, а потом подавай их выходы на сумматор, который выберет наилучшее соответствие. Это должно дать неплохую отправную точку для экспериментов.
DriftEcho DriftEcho
Отличная структура, Декс. Сначала попробовал бы 256-tap FIR с шагом 0.005 и запустил бы в стерео, чтобы промапить окружающий звук левого и правого каналов. Если все равно будет тормозить, добавлю короткосрочный преобразование Фурье, чтобы вытащить доминирующие частоты и зафиксировать их в фазовом контуре. Так сохранится текстура шума, но фильтр будет реагировать на реальные выбросы. Скажи, как выглядит затухание спектра.