Я пытаюсь понять взаимосвязь между КИХ-фильтром, разработанным на основе «первых принципов» с использованием ядра фильтра со сверткой, и фильтром, сконструированным одним из двух способов с использованием БПФ (см. Ниже).
Насколько я понимаю, импульсный отклик КИХ-фильтра - это то же самое, что и ядро свертки фильтра. (Поправьте меня если я ошибаюсь.)
Кроме того, в моем понимании, составляющие частоты (то есть преобразование Фурье) импульсной характеристики КИХ-фильтра - это то же самое, что и частотная характеристика фильтра. И, следовательно, обратное преобразование Фурье вернет мне импульсную реакцию (опять же, поправьте меня, если я ошибаюсь).
Это приводит меня к двум выводам (игнорирование фазового отклика или допущение линейного фазового отклика):
Я должен быть в состоянии спроектировать FIR-фильтр произвольной частотной характеристики, «рисуя» желаемую частотную характеристику, используя IFFT для получения импульсной характеристики и используя его в качестве своего ядра свертки.
В качестве альтернативы, я должен иметь возможность создать фильтр, взяв БПФ входного сигнала, умножив его на желаемую произвольную частотную характеристику в частотной области, и взяв IFFT результата для получения выходного сигнала.
Интуитивно кажется, что 1 и 2 эквивалентны, но я не уверен, смогу ли я доказать это.
Кажется, что люди (и литература по DSP) идут на все, чтобы спроектировать ядра FIR с предопределенными ответами, используя сложные (для меня) алгоритмы, такие как Чебышев или Ремез (я выбрасываю некоторые имена, которые я прочитал, даже не понимая их) ,
- Зачем идти на это, если для каждого возможного ядра FIR существует преобразование FFT / IFFT?
- Почему бы просто не нарисовать точную частотную характеристику, которую вы хотите, взять IFFT, и есть ваше ядро FIR (метод 1 выше)?
источник
Ответы:
Одна из причин, по которой люди проектируют фильтры FIR, а не используют прямой подход (например, 1 и 2), заключается в том, что прямой подход обычно не учитывает периодичность в частотной области, и тот факт, что свертка, реализованная с использованием FFT, является круговая свертка .
Что это значит?
Если длина БПФ больше или равна длине результата линейной свертки, то оба значения одинаковы. В противном случае они не одинаковы (если только данные каким-то образом не сговорились, например, если один сигнал был нулевым).
источник
Одна проблема связана с бесконечными преобразованиями длины, которые оборачиваются при использовании БПФ конечной длины. Преобразование Фурье частотной характеристики конечной длины представляет собой импульсную характеристику бесконечной длины или ядро фильтра. Большинство людей хотели бы, чтобы их фильтр закончил до того, как они умрут или закончатся из памяти компьютера, поэтому нужны хитрости для создания более коротких КИХ-фильтров. Простое наложение хвоста бесконечного импульсного отклика на БПФ или укорочение его до некоторой общей длины может привести к созданию худшего КИХ-фильтра для требуемой спецификации частоты по сравнению с одним из «классических» прототипов фильтров.
Другая проблема заключается в том, что случайная «нарисованная» частотная характеристика очень часто имеет ужасный отклик (дикие выбросы) между нарисованными точками при любом конечном разрешении. Преобразовать в FIR-фильтр, и он звучит как сумасшедший. Прототипы классического фильтра имеют функции частотной характеристики, которые являются плавными между точками выборки.
Ваш (2) называется быстрой сверткой, и обычно используется, если БПФ длиннее, чем длина окна данных плюс объединенное ядро фильтра, и надлежащее добавление / сохранение перекрытия используется для обеспечения начала / конца каждого сегмента свертки. или окно (так как БПФ обычно имеют длину блока).
источник
По поводу 1): Да, вы можете спроектировать КИХ-фильтр, «нарисовав» частотную характеристику (как по амплитуде, так и по фазе. Однако это имеет тенденцию быть очень неэффективным: длина импульсной характеристики (и порядок фильтра) просто пред - определяется длиной вашего БПФ. Если вы выбрали 128-точечное БПФ, вы получите 128 отводов для импульсного отклика, а если вы выбрали 4096-точечное БПФ, вы получите 4096 отводов фильтра.
По поводу 2): Да, вы можете фильтровать путем умножения в частотной области, и это действительно единственный способ сделать это эффективно для больших импульсных характеристик. Однако, как указал Питер К., умножение в частотной области соответствует круговой свертке. Наиболее распространенным способом реализации линейной свертки являются алгоритмы «сложения с наложением» или «сохранения с перекрытием» (легко гугливаются).
источник
Я не уверен, что понимаю все, что здесь было сказано, но я хотел бы обосновать метод преобразования Фурье.
Во-первых, это невероятно гибкий и простой способ создания FIR-фильтров. Как вы сказали, все, что нужно сделать, это определить величину и фазовые отклики. Однако, как уже было сказано, вы должны быть немного осторожны при определении ответа. Произвольный ответ может потребовать чрезмерно большого количества нажатий для реализации и дать ужасный ответ во временной области. Так что будьте осторожны, как вы это определяете.
Во-вторых, это действительно тот случай, когда метод Parks McClellan, например, может сгенерировать лучший фильтр, чем метод Фурье, для некоторых конкретных требований, но его нелегко контролировать количество отводов, а также определять величину, фазу и шаговую реакцию с этим метод.
Например, предположим, что вы хотите сконструировать КИХ-фильтр с характеристиками, аналогичными 10-полюсному Бесселю IIR, но вы хотите немного сузить полосу перехода (за счет скачка отклика на шаг). Затем метод Фурье позволяет легко решить эту проблему с помощью примерно 22 отводов, в зависимости от того, насколько сужена полоса перехода.
Если вы хотите узнать, на что способен метод Фурье, попробуйте эту программу FIR http://www.iowahills.com/5FIRFiltersPage.html (это бесплатно). Например, он может создавать БИХ-эквиваленты для фильтров Гаусса, Бесселя, Баттерворта и Инверсии Чебышева. В общем, это позволяет вам настроить отклик фильтра практически на все, что является сильной стороной метода Фурье. С другой стороны, фильтры, вероятно, не являются оптимальными для некоторых конкретных требований.
источник
AFAIK это так называемый «подход наивной фильтрации». Вы можете влиять на спектральное содержимое в определенных точках частотного пространства, но вы ничего не делаете для частотного содержимого между этими точками. Если вы разрабатываете правильный FIR-фильтр, вы фактически учитываете точки между этими основными точками, и такой фильтр намного лучше, чем первый.
С уважением, бул.
источник