Какие проблемы возникают при проектировании FIR-фильтра с использованием FFT?


15

Я пытаюсь понять взаимосвязь между КИХ-фильтром, разработанным на основе «первых принципов» с использованием ядра фильтра со сверткой, и фильтром, сконструированным одним из двух способов с использованием БПФ (см. Ниже).

Насколько я понимаю, импульсный отклик КИХ-фильтра - это то же самое, что и ядро ​​свертки фильтра. (Поправьте меня если я ошибаюсь.)

Кроме того, в моем понимании, составляющие частоты (то есть преобразование Фурье) импульсной характеристики КИХ-фильтра - это то же самое, что и частотная характеристика фильтра. И, следовательно, обратное преобразование Фурье вернет мне импульсную реакцию (опять же, поправьте меня, если я ошибаюсь).

Это приводит меня к двум выводам (игнорирование фазового отклика или допущение линейного фазового отклика):

  1. Я должен быть в состоянии спроектировать FIR-фильтр произвольной частотной характеристики, «рисуя» желаемую частотную характеристику, используя IFFT для получения импульсной характеристики и используя его в качестве своего ядра свертки.

  2. В качестве альтернативы, я должен иметь возможность создать фильтр, взяв БПФ входного сигнала, умножив его на желаемую произвольную частотную характеристику в частотной области, и взяв IFFT результата для получения выходного сигнала.

Интуитивно кажется, что 1 и 2 эквивалентны, но я не уверен, смогу ли я доказать это.

Кажется, что люди (и литература по DSP) идут на все, чтобы спроектировать ядра FIR с предопределенными ответами, используя сложные (для меня) алгоритмы, такие как Чебышев или Ремез (я выбрасываю некоторые имена, которые я прочитал, даже не понимая их) ,

  • Зачем идти на это, если для каждого возможного ядра FIR существует преобразование FFT / IFFT?
  • Почему бы просто не нарисовать точную частотную характеристику, которую вы хотите, взять IFFT, и есть ваше ядро ​​FIR (метод 1 выше)?

Моя область интересов - цифровое аудио / цифровая музыка, если это актуально.
Брюгойт

Ответы:


13

Одна из причин, по которой люди проектируют фильтры FIR, а не используют прямой подход (например, 1 и 2), заключается в том, что прямой подход обычно не учитывает периодичность в частотной области, и тот факт, что свертка, реализованная с использованием FFT, является круговая свертка .

Что это значит?

Иксзнак равно[1,2,3,4]часзнак равно[1,1]

Yзнак равноИкс*час[1,3,5,7,4][3,5,7,5]

Если длина БПФ больше или равна длине результата линейной свертки, то оба значения одинаковы. В противном случае они не одинаковы (если только данные каким-то образом не сговорились, например, если один сигнал был нулевым).


Конечно, но почему кто-то не может просто убедиться, что размеры FFT / IFFT соизмеримы с окончательной длиной свертки? Например, длина свертки равна N + M - 1, поэтому просто убедитесь, что вы «рисуете» частотную характеристику в области Фурье с длиной M-1. Почему бы это не сработало? Интересные вещи, кстати. :)
TheGrapeBeyond

1
M-1

2
Частотный отклик длиной M-1 по-прежнему имеет бесконечный импульсный отклик. Это означает, что когда вы ОБПФ получаете для получения отфильтрованного результата, хвост импульсного отклика фильтра будет многократно повторяться и искажать ваш окончательный результат во временной области. Возможно немного. Возможно много.
hotpaw2

10

Одна проблема связана с бесконечными преобразованиями длины, которые оборачиваются при использовании БПФ конечной длины. Преобразование Фурье частотной характеристики конечной длины представляет собой импульсную характеристику бесконечной длины или ядро ​​фильтра. Большинство людей хотели бы, чтобы их фильтр закончил до того, как они умрут или закончатся из памяти компьютера, поэтому нужны хитрости для создания более коротких КИХ-фильтров. Простое наложение хвоста бесконечного импульсного отклика на БПФ или укорочение его до некоторой общей длины может привести к созданию худшего КИХ-фильтра для требуемой спецификации частоты по сравнению с одним из «классических» прототипов фильтров.

Другая проблема заключается в том, что случайная «нарисованная» частотная характеристика очень часто имеет ужасный отклик (дикие выбросы) между нарисованными точками при любом конечном разрешении. Преобразовать в FIR-фильтр, и он звучит как сумасшедший. Прототипы классического фильтра имеют функции частотной характеристики, которые являются плавными между точками выборки.

Ваш (2) называется быстрой сверткой, и обычно используется, если БПФ длиннее, чем длина окна данных плюс объединенное ядро ​​фильтра, и надлежащее добавление / сохранение перекрытия используется для обеспечения начала / конца каждого сегмента свертки. или окно (так как БПФ обычно имеют длину блока).


6

По поводу 1): Да, вы можете спроектировать КИХ-фильтр, «нарисовав» частотную характеристику (как по амплитуде, так и по фазе. Однако это имеет тенденцию быть очень неэффективным: длина импульсной характеристики (и порядок фильтра) просто пред - определяется длиной вашего БПФ. Если вы выбрали 128-точечное БПФ, вы получите 128 отводов для импульсного отклика, а если вы выбрали 4096-точечное БПФ, вы получите 4096 отводов фильтра.

По поводу 2): Да, вы можете фильтровать путем умножения в частотной области, и это действительно единственный способ сделать это эффективно для больших импульсных характеристик. Однако, как указал Питер К., умножение в частотной области соответствует круговой свертке. Наиболее распространенным способом реализации линейной свертки являются алгоритмы «сложения с наложением» или «сохранения с перекрытием» (легко гугливаются).


3

Я не уверен, что понимаю все, что здесь было сказано, но я хотел бы обосновать метод преобразования Фурье.

Во-первых, это невероятно гибкий и простой способ создания FIR-фильтров. Как вы сказали, все, что нужно сделать, это определить величину и фазовые отклики. Однако, как уже было сказано, вы должны быть немного осторожны при определении ответа. Произвольный ответ может потребовать чрезмерно большого количества нажатий для реализации и дать ужасный ответ во временной области. Так что будьте осторожны, как вы это определяете.

Во-вторых, это действительно тот случай, когда метод Parks McClellan, например, может сгенерировать лучший фильтр, чем метод Фурье, для некоторых конкретных требований, но его нелегко контролировать количество отводов, а также определять величину, фазу и шаговую реакцию с этим метод.

Например, предположим, что вы хотите сконструировать КИХ-фильтр с характеристиками, аналогичными 10-полюсному Бесселю IIR, но вы хотите немного сузить полосу перехода (за счет скачка отклика на шаг). Затем метод Фурье позволяет легко решить эту проблему с помощью примерно 22 отводов, в зависимости от того, насколько сужена полоса перехода.

Если вы хотите узнать, на что способен метод Фурье, попробуйте эту программу FIR http://www.iowahills.com/5FIRFiltersPage.html (это бесплатно). Например, он может создавать БИХ-эквиваленты для фильтров Гаусса, Бесселя, Баттерворта и Инверсии Чебышева. В общем, это позволяет вам настроить отклик фильтра практически на все, что является сильной стороной метода Фурье. С другой стороны, фильтры, вероятно, не являются оптимальными для некоторых конкретных требований.


Это выглядит интересно. Мне придется попробовать программное обеспечение, чтобы действительно разобраться в том, что происходит - веб-страница, похоже, не описывает его метод слишком подробно. Однако из того, что я могу сказать, похоже, что это своего рода гибрид, в котором вы манипулируете частотной характеристикой прототипа фильтра, сгенерированного более традиционным способом. Это верно? Я думаю, что вы говорите правильно - вы должны быть осторожны в определении ответа, иначе вы получите огромное количество нажатий. AFAIU, это большая проблема при разработке фильтра исключительно с частотной характеристикой.
Bryhoyt

1

AFAIK это так называемый «подход наивной фильтрации». Вы можете влиять на спектральное содержимое в определенных точках частотного пространства, но вы ничего не делаете для частотного содержимого между этими точками. Если вы разрабатываете правильный FIR-фильтр, вы фактически учитываете точки между этими основными точками, и такой фильтр намного лучше, чем первый.

С уважением, бул.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.