Конструкция фильтра FIR: окно против парков Макклеллана и наименьших квадратов


21

Есть ли какие-либо преимущества в использовании оконного подхода по сравнению с алгоритмами Parks-McClellan (далее сокращенно обозначаемыми здесь как PMcC) или алгоритмами наименьших квадратов для расчета FIR-фильтра низкочастотного фильтра? Предположим с сегодняшней вычислительной мощью, что сложность самих алгоритмов не является фактором.

Этот вопрос не сравнивает PMcC с наименьшими квадратами, но, в частности, есть ли какая-либо причина использовать какую-либо методику расчета FIR для окон вместо этих алгоритмов, или же методы оконного анализа для фильтрации проекта устарели из-за этих алгоритмов и отнесены к дидактическим целям?

Ниже приведено сравнение, в котором я сравнил окно Хемминга с моим подходом к проектированию с Least-Squared, используя то же количество нажатий. Я расширил полосу пропускания в подходе с наименьшим квадратом, чтобы точно соответствовать полосе Хэмминга, и в этом случае было совершенно ясно, что наименьший квадрат превзойдет (предлагая значительно большее отклонение стоп-полосы). Я не сделал этого со всеми окнами, что приводит меня к вопросу, можете ли вы когда-нибудь превзойти PMcC и метод наименьших квадратов, или есть ли другие приложения для фильтра низких частот FIR, где предпочтителен подход окна?

введите описание изображения здесь


2
Я мог бы предложить сравнить с Кайзером Sinc-to- firpm()to firls().
Роберт Бристоу-Джонсон

Ответы:


16

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

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

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

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

Замечание о вашем сравнении между методом окна и дизайном наименьших квадратов: я не думаю, что это сравнение показывает какое-либо общее превосходство метода наименьших квадратов над методом окон. Во-первых, вы, похоже, смотрите на затухание в полосе задержек, что не является целью проектирования ни для одного из двух методов. Метод управления окнами не является оптимальным в каком-либо смысле, а конструкция наименьших квадратов минимизирует энергию полосы останова и совершенно не заботится о размере пульсации полосы останова. Что можно увидеть, так это то, что край полосы пропускания в дизайне окна больше, чем в схеме наименьших квадратов, тогда как край полосы пропускания меньше. Следовательно, ширина полосы пропускания фильтра, разработанного для работы с окнами, меньше, что приведет к более высокой пульсации полосы останова. Разница в ширине полосы перехода может быть небольшой, но свойства фильтра очень чувствительны к этому параметру. Нет сомнений, что фильтр наименьших квадратов превосходит другой фильтр, когда речь идет об остановке энергии полосы, но это не так легко увидеть, как размер пульсации. И остается вопрос, будет ли это различие иметь практическое применение.

Позвольте мне показать вам, что такие сравнения часто можно сделать так, чтобы они выглядели так, как хотелось бы. На рисунке ниже я сравниваю фильтр нижних частот оптимального firls.mметода наименьших квадратов, разработанный с помощью функции Matlab / Octave (синий), с фильтром нижних частот, разработанным с помощью метода окна с использованием окна Кайзера (красный).

введите описание изображения здесь

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

В целом, помимо того, что полезно учиться для студентов DSP по чисто дидактическим причинам, я думаю, что, несмотря на технологические достижения с 1970-х годов, использование метода управления окнами может быть оправдано в определенных практических сценариях, и я не думаю, что это будет изменить очень скоро.


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

2
@DanBoschen: Конечно, в большинстве случаев дизайн выполняется в автономном режиме, и сложность не является проблемой. Тем не менее, я сталкивался с приложениями, в которых фильтры должны были бы быть перепроектированы в квазиреальном времени (это было приложение для формирования луча), поэтому у вас есть проблема сложности.
Мэтт Л.

1
А что касается фактической экономии количества отводов за счет оптимального дизайна по сравнению с дизайном окон, результаты, которые я видел, часто бывают разочаровывающими. Часто всего 1 или 2 касания, которые для многих реализаций не будут иметь большого значения.
Мэтт Л.

1
Хорошо, для автономных проектов, и если числовая стабильность оказывается без проблем (для этого конкретного проекта; в общем случае это остается проблемой), оконное управление не будет полезным. Но в целом мы не всегда можем полагаться на автономные разработки, и, что еще более важно, мы не всегда можем избежать проблем с числовыми данными. Поэтому я думаю, что слово «устаревший» все еще слишком сильно.
Мэтт Л.

3
Очень хорошо сказано. Следует помнить, что инжиниринг - это поиск подходящей реализации, соответствующей вашим требованиям. Оконный метод прост в реализации и всегда работает. Другие методы имеют более сложные реализации и могут иметь случаи, когда с ними сложно работать. Я работал с несколькими системами, которым нужно разрабатывать фильтры на лету, и метод окна является подходящим решением для таких ситуаций.
Джейсон Р

7

Оконные фильтры Sinc можно адаптивно генерировать на лету на процессорах, достаточно мощных для запуска соответствующего КИХ-фильтра. Оконные фильтры Sinc могут генерироваться за ограниченное время.

Генерация некоторых простых оконных фильтров Sinc может быть полностью описана (и проверена на наличие вредоносных программ и т. Д.) В нескольких строках кода , в отличие от слепого использования некоторого непрозрачного набора инструментов.

Для объяснения оконного фильтра Sinc требуется меньше предварительных математических знаний, чем для кодирования генератора фильтров PMcC с нуля.

Равные колебания в частотной характеристике фильтра PMcC могут вызывать артефакты во временной области, которые отличаются (и, возможно, менее желательны), чем артефакты, создаваемые простым оконным фильтром.


1
Да, хорошая точка @ hotpaw2, пульсация полосы пропускания приводит к межсимвольным помехам (трейлинг и эхо-сигналы в начале). Спасибо
Дэн Бошен

2
Мы говорили о Паркс-Макклеллане до и после эха на comp.dsp в 2003 году . Алексей Лукин опубликовал минимальный пример MATLAB:, f=[0 0.49 0.51 1]; a=[1 1 0 0]; b=remez(300,f,a)который также работает в Octave. Объяснение состоит в том, что с очень крутыми фильтрами рябь может быть достаточно регулярной, чтобы напоминать косинус. Эквивалентом во временной области для косинуса в частотной области будут два импульсных эха.
Олли Нимитало,

6

Я покажу здесь одно преимущество оконного дизайна и трюк, чтобы получить то же преимущество от Паркс-Макклеллан.

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

Sinc
Рисунок 1. Функция Sinc, растянутая по горизонтали в 2 раза, является прототипом полуполосного фильтра нижних частот с коэффициентом усиления 2, пригодного для повышения частоты дискретизации в 2 раза.

Тем не менее, Parks-McClellan / Remez можно обмануть, чтобы получить те же преимущества, разработав с его использованием фильтр с четным числом отводов с определенной полосой пропускания с единичным усилением. Полученные коэффициенты используются как нечетные коэффициенты более длинного фильтра. Средний коэффициент более длинного фильтра установлен в 1, а остальные четные коэффициенты равны 0. Этот фильтр имеет усиление 2 в полосе пропускания и симметричную пульсацию в полосах пропускания и останова. В Python:

import numpy as np
from scipy import signal
import matplotlib.pyplot as plt
c0 = signal.remez(14, [0, 3500.0/8000], [1])
c = np.zeros(c0.size*2-1)
c[0::2] = c0
c[c0.size-1] = 1
freq, response = signal.freqz(c)
plt.semilogy(freq/(2*np.pi), np.abs(response))
plt.show()
plt.plot(range(-c0.size+1, c0.size, 1), c, 'x')
plt.grid(True)
plt.show()

Фигура 2.
Рисунок 2. Коэффициенты полуполосного фильтра, спроектированного косвенно с использованием Python scipy.signal.remez.

Рисунок 3
Рисунок 3. График АЧХ полуполосного фильтра, спроектированного косвенно с использованием scipy.signal.remez.

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