Я довольно новичок в обработке сигналов и знаю, что этот вопрос может быть слишком широким. Но я все равно хотел бы услышать намеки от экспертов.
Меня учили использовать butter
(для разработки фильтра Баттерворта, известного как фильтр с максимально плоской величиной) и filtfilt
(цифровая фильтрация нулевой фазы) полосовую фильтрацию сигналов ЭЭГ (электроэнцефалограмма) в автономном режиме MATLAB (т.е. после завершения записи). Таким образом, вы можете избежать неизбежной «задержки», вызванной цифровым фильтром (то есть фильтрацией нулевой фазы).
Затем кто-то спросил меня, почему мы не можем использовать fft
(быстрое преобразование Фурье), чтобы получить представление сигнала в частотной области, а затем установить нулевую мощность нежелательных частот, а затем ifft
(обратное быстрое преобразование Фурье), чтобы восстановить отфильтрованные данные во времени домен для той же цели. Это манипулирование в частотной области звучало для меня проще и разумнее, и я не мог ответить, почему.
Каковы преимущества и недостатки использования простого fft/ifft
метода для полосовой фильтрации? Почему люди предпочитают использовать цифровые фильтры FIR или IIR?
Например, является ли fft/ifft
метод более подверженным спектральной утечке или ряби по сравнению с установленными цифровыми фильтрами? Способ также страдает от задержки фазы? Есть ли способ визуализации импульсного отклика для этого метода фильтрации для сравнения?
источник
Ответы:
Основная причина того, что обработка в частотной области не выполняется напрямую, связана с задержкой. Чтобы сделать, скажем, БПФ для сигнала, вы должны сначала записать весь сигнал во временной области, от начала до конца, прежде чем сможете преобразовать его в частотную область. Затем вы можете выполнить обработку, преобразовать ее во временную область и воспроизвести результат. Даже если два преобразования и обработка сигнала в середине являются практически мгновенными, вы не получите первую выборку результата, пока не будет записана последняя входная выборка. Но вы можете получить «идеальные» результаты в частотной области, если вы готовы с этим мириться. Например, 3-минутная песня, записанная с частотой 44100 сэмплов / секунду, потребует от вас 8 миллионов точечных преобразований, но это не имеет большого значения для современного процессора.
Возможно, вы захотите разбить сигнал во временной области на меньшие блоки данных фиксированного размера и обработать их индивидуально, сократив задержку до длины блока. Однако это не работает из-за «краевых эффектов» - выборки на обоих концах данного блока не будут правильно совмещаться с соответствующими выборками соседних блоков, создавая нежелательные артефакты в результатах.
Это происходит из-за допущений, которые подразумеваются в процессе, который преобразует между временной областью и частотной областью (и наоборот). Например, FFT и IFFT «предполагают», что данные являются циклическими; другими словами, эти блоки идентичных данных во временной области поступают до и после обрабатываемого блока. Так как это вообще не так, вы получаете артефакты.
Обработка во временной области может иметь свои проблемы, но тот факт, что вы можете контролировать задержку и не производить периодические артефакты, делает ее явным победителем в большинстве приложений для обработки сигналов в реальном времени.
(Это расширенная версия моего предыдущего ответа .)
источник
Вы, конечно, можете использовать идеальные фильтры «boxcar» в частотной области. Двойственность говорит, что это эквивалентно свертыванию с функцией sinc бесконечной длины. Чтобы уменьшить артефакты, связанные с ограничением длины, функция sinc часто умножается на окно. Возможно, вы слышали о Хэмминге, Ханнинге (на самом деле фон Ханн), о повышенном косинусе и других техниках окон. Свертка может быть вычислительно проще, чем подход fft / ifft, но ответы те же.
У каждого метода будут свои плюсы и минусы. Баттерворт - IIR, а вагоны - FIR. Баттерворты, вероятно, более плоские в полосе пропускания, но, вероятно, с менее крутым спадом, в зависимости от порядка БИХ и ширины КИХ. Фильтрфильт будет сложнее реализовать в режиме реального времени.
источник
Смежные вопросы
Почему плохая идея фильтровать, обнуляя ячейки БПФ? /signals/6220/why-is-it-a-bad-idea-to-filter-by-zeroing-out-fft-bins
Удаление значений из результата FFT так же, как фильтрация? /signals/11487/removing-values-from-fft-result-same-as-filtering?noredirect=1&lq=1
Почему мы используем окно во временной области, а не БПФ для изменения спектра, а не обратное БПФ /signals/8911/why-do-we-use-window-in-time-domain-rather -than-делать-FFT-изменение-The-спектр-и-т? noredirect = 1 & LQ = 1
источник