#алгоритм #аудио #fft #обработка_сигналов
Меня интересуют алгоритмы активного шумоподавления. Углубляясь в детали реализации,
выполняется спектральное вычитание "на ходу".
Имеется некоторый профиль шума и небольшой длины запись, из которой этот шум нужно
удалить ("вычесть").
Так у меня вопрос по конкретному алгоритму спектрального вычитания: как оно выполняется
и, собственно, над чем? В общих чертах я себе это представляю как вычитание из спектра
(соответствие частот амплитудам гармоник) сигнала спектра шума и обратное преобразование
Фурье. Вообще, вроде как, применяемое здесь FFT даёт не соответствие частот амплитудам,
а просто массив комплексных чисел. Как тут вычитать что из чего не представляю...
P.S.: Не нужно давать ссылки на курсы по обработке звука и спектральному анализу
сигналов. Просто вопрос - просто ясный ответ.
Есть такие специализированные программы, как, например, Noise Gator. Так вот, если
кому известно, подскажите, какие алгоритмы шумоподавления ими используются (в частности,
используется ли спектральное вычитание; если да, то откуда программа берёт слепок шума).
Ответы
Ответ 1
Алгоритмы удаления шума невозможно рассмотреть без углубления в математику, акустику и теорию спектрального анализа сигналов. Любой анализ сигнала с помощью преобразований Фурье предполагает, что сигнал является стационарным на исследуемом отрезке. Поэтому, если сигнал нестационарный, он разбивается на отдельные отрезки, называемые окнами. Выбор размера окна зависит от типа исследуемого сигнала, обычно около 25 - 50 мс для звукового сигнала (меньшие значения - для человеческой речи, большие - для музыки, особенно состоящей из струнных смычковых инструментов). Можно использовать перекрывающиеся окна, для повышения точности анализа. Однако, просто так применить преобразование Фурье к обрезанным окнам нельзя, при этом некорректно обрабатываются граничные области отрезков. Для решения этой проблемы сигнал предварительно умножают на специальную весовую функцию ("оконную"). Примеры оконных функций см. в статье Оконное преобразование Фурье Далее выполняется непосредственно преобразование Фурье. Оно дает в результате спектр сигнала, т.е. значение комплексной амплитуды для различных диапазонов частот. Из него и надо вычитать спектр шума. Из модуля комплексной амплитуды сигнала вычитается модуль комплексной амплитуды шума, умноженный на некий коэффициент; если результат отрицательный, он заменяется на ноль. Фазовый компонент оставляется нетронутым. К результату вычитания можно применить обратное преобразование Фурье, и получить "очищенный" сигнал. Итоговый алгоритм шумоподавления при наличии известного образца шума: Разделение сигнала на окна Применение оконного преобразования Фурье к окнам Вычитание (по модулю) спектра амплитуды шума из спектра амплитуды сигнала: A = Max ( A с. - k * А ш. ; 0) где k - коэффициент, подбираемый опытным путем Применение обратного преобразования Фурье к результату Размер окна, перекрытие окон, тип применяемой оконной функции подбираются опытным путем. Ссылки Removing noise from audio using Fourier transform in Matlab How can I select an optimal window for Short Time Fourier Transform? How to select frequency resolution and window size in FFT?Ответ 2
Вы уже задавали этот вопрос, а я отвечал. Попытаюсь ответить лучше, чем в прошлый раз. ОКНО Пусть шум это синус (наводка сети электроснабжения, например). Фотографируем фрагмент шума, чтобы потом алгоритмом FFT получить его спектр: Кажется, что это синус, но на самом деле это вот что: Резкий перепад, выделенный красным - это очень сильное искажение. Если вы прослушаете это в наушниках ушами, то поймете, что это совсем не тот шум, который вы хотите вычесть из своего сигнала. Чтобы уменьшить искажение, применяется окно (не ликвидировать, ведь окно само вносит искажения в сигнал): Результат применения окна: Это была работа с образцом шума. Теперь можно выполнить БПФ на этом образце шума и получить его спектр. Дальше, на каждом входном блоке сигнала можно так же выполнить БПФ и получить его спектр. Что получится, если попытаться вычесть на каждой частоте абсолютное значение спектра шума из абсолютного значения спектра сигнала. Получится то, что этой операции в принципе соответствует умножение спектра данного блока сигнала на некоторый другой спектр, то есть применение цифрового фильтра. Только для следующего блока входного сигнала этот фильтр будет уже другим. В результате ситуация будет примерно как на второй картинке - разрывы на границах блоков. Лично я вышел из этой ситуации следующим образом: применял к блоку сигнала сразу оба фильтра и линейно интерполировал результат, то есть в первой точке блока сигнала действовал только первый фильтр, в последней - только второй, и так линейно.
Комментариев нет:
Отправить комментарий