Есть ли какие-либо преимущества в использовании оконного подхода по сравнению с алгоритмами Parks-McClellan (далее сокращенно обозначаемыми здесь как PMcC) или алгоритмами наименьших квадратов для расчета FIR-фильтра низкочастотного фильтра? Предположим с сегодняшней вычислительной мощью, что сложность самих алгоритмов не является фактором.
Этот вопрос не сравнивает PMcC с наименьшими квадратами, но, в частности, есть ли какая-либо причина использовать какую-либо методику расчета FIR для окон вместо этих алгоритмов, или же методы оконного анализа для фильтрации проекта устарели из-за этих алгоритмов и отнесены к дидактическим целям?
Ниже приведено сравнение, в котором я сравнил окно Хемминга с моим подходом к проектированию с Least-Squared, используя то же количество нажатий. Я расширил полосу пропускания в подходе с наименьшим квадратом, чтобы точно соответствовать полосе Хэмминга, и в этом случае было совершенно ясно, что наименьший квадрат превзойдет (предлагая значительно большее отклонение стоп-полосы). Я не сделал этого со всеми окнами, что приводит меня к вопросу, можете ли вы когда-нибудь превзойти PMcC и метод наименьших квадратов, или есть ли другие приложения для фильтра низких частот FIR, где предпочтителен подход окна?
источник
firpm()
tofirls()
.Ответы:
Я согласен с тем, что метод проектирования оконного фильтра больше не является одним из наиболее важных методов проектирования, и, возможно, это действительно тот случай, когда он широко представлен в традиционных учебниках, возможно, по историческим причинам.
Тем не менее, я думаю, что его использование может быть оправдано в определенных ситуациях. Я не согласен, что вычислительная сложность больше не проблема. Это зависит от платформы. Сидя за настольным компьютером и проектируя фильтр, нам действительно не нужно беспокоиться о сложности. Тем не менее, на конкретных платформах и в ситуациях, когда проектирование должно быть выполнено в квазиреальном времени, сложность вычислений является проблемой, и простой субоптимальный метод проектирования будет предпочтительнее оптимального метода, который является гораздо более сложным. В качестве примера я однажды работал над системой формирования луча, в которой фильтр (формирователь луча) нужно было бы переделывать на лету, поэтому сложность вычислений действительно была проблемой.
Я также убежден, что во многих практических ситуациях нам не нужно беспокоиться о разнице между оптимальным и неоптимальным дизайном. Это становится еще более верным, если нам нужно использовать арифметику с фиксированной точкой с квантованными коэффициентами и квантованными результатами арифметических операций.
Другой проблемой является численная стабильность оптимальных методов проектирования фильтров и их реализации. Я сталкивался с несколькими случаями, когда алгоритм Паркс-Макклеллана (я должен сказать, реализация, которую я использовал) просто не сходился. Это произойдет, если спецификация не имеет особого смысла, но это также может произойти с совершенно разумными спецификациями. То же самое верно для метода расчета наименьших квадратов, где необходимо решить систему линейных уравнений, что может стать плохо обусловленной проблемой. При этих обстоятельствах метод окон никогда не подведет вас.
Замечание о вашем сравнении между методом окна и дизайном наименьших квадратов: я не думаю, что это сравнение показывает какое-либо общее превосходство метода наименьших квадратов над методом окон. Во-первых, вы, похоже, смотрите на затухание в полосе задержек, что не является целью проектирования ни для одного из двух методов. Метод управления окнами не является оптимальным в каком-либо смысле, а конструкция наименьших квадратов минимизирует энергию полосы останова и совершенно не заботится о размере пульсации полосы останова. Что можно увидеть, так это то, что край полосы пропускания в дизайне окна больше, чем в схеме наименьших квадратов, тогда как край полосы пропускания меньше. Следовательно, ширина полосы пропускания фильтра, разработанного для работы с окнами, меньше, что приведет к более высокой пульсации полосы останова. Разница в ширине полосы перехода может быть небольшой, но свойства фильтра очень чувствительны к этому параметру. Нет сомнений, что фильтр наименьших квадратов превосходит другой фильтр, когда речь идет об остановке энергии полосы, но это не так легко увидеть, как размер пульсации. И остается вопрос, будет ли это различие иметь практическое применение.
Позвольте мне показать вам, что такие сравнения часто можно сделать так, чтобы они выглядели так, как хотелось бы. На рисунке ниже я сравниваю фильтр нижних частот оптимального
firls.m
метода наименьших квадратов, разработанный с помощью функции Matlab / Octave (синий), с фильтром нижних частот, разработанным с помощью метода окна с использованием окна Кайзера (красный).Из рисунка можно даже сделать вывод, что фильтр, созданный с помощью управления окнами, немного лучше, чем оптимальный метод наименьших квадратов. Это, конечно, бессмысленно, потому что мы даже не определили «лучше», а фильтр наименьших квадратов должен иметь меньшую среднеквадратичную ошибку аппроксимации. Однако вы не видите этого прямо на рисунке. Во всяком случае, это просто для того, чтобы поддержать мое утверждение о том, что при таких сравнениях нужно быть очень осторожным и ясным.
В целом, помимо того, что полезно учиться для студентов DSP по чисто дидактическим причинам, я думаю, что, несмотря на технологические достижения с 1970-х годов, использование метода управления окнами может быть оправдано в определенных практических сценариях, и я не думаю, что это будет изменить очень скоро.
источник
Оконные фильтры Sinc можно адаптивно генерировать на лету на процессорах, достаточно мощных для запуска соответствующего КИХ-фильтра. Оконные фильтры Sinc могут генерироваться за ограниченное время.
Генерация некоторых простых оконных фильтров Sinc может быть полностью описана (и проверена на наличие вредоносных программ и т. Д.) В нескольких строках кода , в отличие от слепого использования некоторого непрозрачного набора инструментов.
Для объяснения оконного фильтра Sinc требуется меньше предварительных математических знаний, чем для кодирования генератора фильтров PMcC с нуля.
Равные колебания в частотной характеристике фильтра PMcC могут вызывать артефакты во временной области, которые отличаются (и, возможно, менее желательны), чем артефакты, создаваемые простым оконным фильтром.
источник
f=[0 0.49 0.51 1]; a=[1 1 0 0]; b=remez(300,f,a)
который также работает в Octave. Объяснение состоит в том, что с очень крутыми фильтрами рябь может быть достаточно регулярной, чтобы напоминать косинус. Эквивалентом во временной области для косинуса в частотной области будут два импульсных эха.Я покажу здесь одно преимущество оконного дизайна и трюк, чтобы получить то же преимущество от Паркс-Макклеллан.
Для полуполосных, четвертьполосных и т. Д. Фильтров, оконное управление сохраняет нули во временной области масштабированной функции sinc, которая является прототипом идеального фильтра нижних частот. Нули заканчиваются на коэффициентах, уменьшая вычислительные затраты фильтров. Для полуполосного фильтра оконный дизайн дает фильтр с каждым четным коэффициентом 0, кроме среднего коэффициента (который также считается четным):
Рисунок 1. Функция Sinc, растянутая по горизонтали в 2 раза, является прототипом полуполосного фильтра нижних частот с коэффициентом усиления 2, пригодного для повышения частоты дискретизации в 2 раза.
Тем не менее, Parks-McClellan / Remez можно обмануть, чтобы получить те же преимущества, разработав с его использованием фильтр с четным числом отводов с определенной полосой пропускания с единичным усилением. Полученные коэффициенты используются как нечетные коэффициенты более длинного фильтра. Средний коэффициент более длинного фильтра установлен в 1, а остальные четные коэффициенты равны 0. Этот фильтр имеет усиление 2 в полосе пропускания и симметричную пульсацию в полосах пропускания и останова. В Python:
Рисунок 2. Коэффициенты полуполосного фильтра, спроектированного косвенно с использованием Python
scipy.signal.remez
.Рисунок 3. График АЧХ полуполосного фильтра, спроектированного косвенно с использованием
scipy.signal.remez
.источник