Существуют ли какие-либо стандартные формы реализации для настраиваемых фильтров Баттерворта?


17

Один из стандартных способов реализации фильтра Баттерворта - это каскад секций второго порядка, каждый из которых соответствует паре комплексно-сопряженных полюсов. Например, для фильтра четвертого порядка будет два раздела второго порядка. Если мы рассмотрим, как расположение полюсов для фильтра нижних частот изменяется в плоскости z, так как отсечка рассчитана на частоту от 0 Гц до Найквиста, путь, «сметенный» каждой парой полюсов, соответствует паре дуг внутри единичной окружности. , как показано на следующем рисунке [для фильтров четвертого порядка]:

Положения полюсов Z-плоскости для фильтров нижних частот Баттерворта четвертого порядка

Учитывая, как долго эти фильтры были вокруг, и учитывая тот факт, что эти «дуги» соответствуют прямым линиям в s-плоскости, само собой разумеется, что кто-то разработал бы форму реализации с единственным параметром, который может охватить полюса вдоль дуг в «время выполнения» [в отличие от «времени проектирования»]. Впрочем, ничего подобного я еще не встречал.

Относительно просто придумать различные способы сделать это, особенно в пределах сегментов диапазона, и с готовностью добавить немного дополнительных вычислений в это. Что мне интересно, так это следующее:

Существует ли какой-либо стандартный способ реализации перестраиваемого [цифрового] ​​фильтра Баттерворта заданного порядка, который 1) имеет оптимальные свойства (например, эффективность, надежность) и 2) покрывает весь диапазон?

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

Я нашел это: A Многоцелевое Баттерворта фильтр с переменной частотой среза , но на первый Googling не кажется , что будет много информации о том, что в нем.

Обновление (повторно: ответы)

Просто чтобы быть немного более понятным:

  • Я ищу «мета-дизайн» с параметром (скажем, от [0,1]), который автоматически настроит отсечку от постоянного тока до Найквиста (при сохранении нормализации усиления) для использования в изменяющейся во времени системе. Нечто подобное этому двухполюсному резонатору , за исключением ограничений Баттерворта. Идея состоит в том, что вычисление параметра будет более эффективным, чем выполнение обычной процедуры автономного проектирования во время выполнения.
  • Я не обязательно даже ищу, как спроектировать «метафильтр» (т. Е. Делать математику с переменными вместо чисел), мне интересно, есть ли выбор для стандартных [неочевидных] форм реализации - потому что, скажем, простой подход, который соответствует статическому случаю, в конечном итоге приводит к численным проблемам в изменяющемся во времени случае.
  • Возможно, нет никаких проблем, и простой подход - то, что используется на практике. Это было бы прекрасно. Меня беспокоит то, что я не видел, чтобы эта тема явно упоминалась ни в одном из источников, к которым я обращался, но, возможно, я просто упустил что-то действительно очевидное, поэтому я спрашиваю.
  • В процессе добавления более подробной информации я натолкнулся на общий подход к параметрическим структурам биквада, который почти то, что я ищу (и имеет несколько хороших ссылок).

Обновление 2

Я ищу ответы, подобные тому, который я положил во втором комментарии к Джейсону R, а именно:

«О, да, вы хотите использовать параметризацию III-2b из такого-то тезиса, в форме решетки с повернутым состоянием, потому что она разрешает такой-то случай с краем при использовании минимального числа умножений».

Может быть, ничего подобного не существует, но у меня вопрос: есть ли, и если да, то что это, или где я могу найти это?

куш

Основываясь на ссылке на «каноническую форму наблюдателя», данной Тимом Уэскоттом в ветке comp.dsp в ответе Джейсона Р. , я решил предположить, что мне, возможно, придется начать копаться в литературе по системам управления, поэтому я попытался найти «Пространство состояний» Баттерворта, и это оказалось очень крутой процедурой проектирования / реализации не только параметрических Баттерворта, но и чебышевских и эллиптических фильтров:

Софокл Дж. Орфанидис, «Дизайн цифрового параметрического эквалайзера высокого порядка», J. Audio Eng. Soc., Vol. 53, с. 1026-1046, ноябрь 2005 г.

Это займет некоторое время, чтобы разобраться, но, исходя из того, что я прочитал до сих пор, я был бы очень удивлен, если это не то, что я ищу. Я передаю это Джейсону R для ссылки на comp.dsp, которая привела меня к статье Орфанидиса. Его ответ также является хорошим практическим обзором проектирования фильтров Баттерворта.

Ответы:


10

Я не уверен, что именно вы ищете. Как вы отметили в своем вопросе, передаточные функции семейства фильтров Баттерворта хорошо понятны и легко рассчитываются аналитически. Довольно просто реализовать структуру фильтра Баттерворта, которая настраивается по порядку фильтра и частоте среза:

  1. На основе выбранного порядка фильтра, частоты среза и частоты дискретизации рассчитайте расположение полюсов аналогового фильтра-прототипа Баттерворта. Поскольку фильтры Баттерворта не имеют нулей, передаточная функция определяется расположением полюсов (и коэффициентом усиления постоянного тока).

  2. Используя билинейное преобразование , сопоставьте местоположения полюсов аналогового прототипа с их соответствующими местоположениями в вашей цифровой реализации фильтра.

  3. Опять же, цифровой фильтр определяется местоположениями полюсов, найденными на шаге 2. Разбейте фильтр на секции второго порядка , сгруппировав полюса попарно.

Вот и все. Как я уже сказал, программно спроектировать фильтр Баттерворта очень просто, используя любые параметры, которые вам могут понадобиться; ни одна из операций не является чрезвычайно сложной для реализации.

Изменить: я не совсем уверен, какой конечный результат вы ищете. Я думаю, что вас больше всего интересует, как реализовать БИХ-фильтры с изменяющимися во времени коэффициентами, не обязательно специфичными для фильтра Баттерворта. Я предполагаю, что ваша цель - минимизировать артефакты при изменении частоты среза фильтра; это было рассмотрено в обсуждении в группе новостей comp.dsp в начале этого года. Хотя я не уверен, каковы ваши варианты использования или требования для этой структуры фильтра, существует несколько способов выполнить переключение.

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

Вы могли бы потенциально упростить процесс вычисления местоположения полюсов, анализируя геометрию местоположений полюсов цифрового фильтра в плоскости z. Аналоговый фильтр Баттерворта имеет полюса, которые лежат полукругом в левой половине s-плоскости; билинейное преобразование отображает этот полукруг в эллиптическую форму, которую вы проиллюстрировали в описании вопроса. Используя этот известный паттерн для полюсов аналогового фильтра Баттерворта, функции отображения билинейного преобразования и некоторой алгебры, вы сможете придумать относительно простое выражение для расположения полюсов цифрового фильтра, что даст вам более простой и понятный фильтр. тюнинг действий.


Джейсон, я не ищу, как разработать данную спецификацию Баттерворта, я ищу "мета-дизайн". Я обновлю вопрос немного подробнее.
Datageist

1
Re: Редактировать. Процесс, который вы описали в последнем абзаце, - это как раз то, как я бы подошел к нему - мне просто интересно, было ли это где-нибудь рассмотрено. Другими словами, такие вещи, как «О, да, вы хотите использовать параметризацию III-2b из тезисов и тезисов в форме решетки с повернутым состоянием, потому что она разрешает тот или иной случай с использованием минимального числа умножений. "
Datageist

1
Небольшой придирчивый комментарий: в плоскости Z фильтр BW действительно имеет нули. Для фильтров нижних частот все они равны -1, а для фильтров верхних частот они равны +1.
Хильмар

s±ss0

2

Да, есть стандартные формы реализации для Баттерворта, и почти каждый ответ фильтра. Все они полностью реализованы в моей библиотеке фильтров с открытым исходным кодом. Вот фрагмент кода, который создает пары полюс / ноль для фильтра Баттерворта произвольной степени:

void AnalogLowPass::design (int numPoles)
{
  if (m_numPoles != numPoles)
  {
    m_numPoles = numPoles;

    reset ();

    const double n2 = 2 * numPoles;
    const int pairs = numPoles / 2;
    for (int i = 0; i < pairs; ++i)
    {
      complex_t c = std::polar (1., doublePi_2 + (2 * i + 1) * doublePi / n2);
      addPoleZeroConjugatePairs (c, infinity());
    }

    if (numPoles & 1)
      add (-1, infinity());
  }
}

Как видите, положение полюсов рассчитывается путем деления s-плоскости на «пары» равных отрезков.

Подходящий код предоставляется для всех распространенных типов ответов фильтра: Чебышев, Эллиптик, Лежандр, включая полочные версии каждого.

https://github.com/vinniefalco/DSPFiltersDemo.git

https://github.com/vinniefalco/DSPFilters.git

Скриншот


Библиотека DSPFilters напрямую обращается к сценарию использования, предусмотренному первоначальным вопросом, используя параметризованное уравнение для вычисления пар полюс / ноль цифрового фильтра во время выполнения. Я исправлю ответ, чтобы также включить фрагмент исходного кода.
Винни Фалько
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.