В этом примере показано, как проектировать фильтры FIR и IIR на основе спецификаций частотного отклика с помощью designfilt функция на панели инструментов обработки сигналов ®. В примере основное внимание уделяется фильтрам нижних частот, но большинство результатов относится и к другим типам ответов.
Этот пример посвящен разработке цифровых фильтров, а не их применению. Дополнительные сведения о приложениях цифрового фильтра см. в разделе Практическое введение в цифровую фильтрацию.
Спецификации фильтра нижних частот
Идеал lowpass фильтр является тем, который оставляет все компоненты частоты без изменений сигнала ниже обозначенной частоты среза, , и отклоняет все компоненты выше . Поскольку импульсная характеристика, необходимая для реализации идеального фильтра нижних частот, является бесконечно длинной, невозможно сконструировать идеальный фильтр нижних частот КИХ. Конечные аппроксимации длины к идеальной импульсной характеристике приводят к наличию пульсаций как в полосе пропускания (λ c), так и в полосе останова > startc) фильтра, а также к ненулевой ширине перехода между полосой пропускания и полосой останова.
Как пульсации полосы пропускания/полосы останова, так и ширина перехода являются нежелательными, но неизбежными отклонениями от характеристики идеального фильтра нижних частот при аппроксимации с конечной импульсной характеристикой. Эти отклонения изображены на следующем рисунке:

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

Треугольник используется для понимания степеней свободы, доступных при выборе спецификаций конструкции. Поскольку сумма углов фиксирована, можно выбрать максимум значения двух спецификаций. Третья спецификация определяется конкретным алгоритмом проектирования. Кроме того, как и в случае с углами в треугольнике, если сделать одну из спецификаций больше/меньше, это повлияет на одну или обе другие спецификации.
Фильтры FIR очень привлекательны, потому что они по своей природе стабильны и могут быть сконструированы так, чтобы иметь линейную фазу. Тем не менее, эти фильтры могут иметь длительные переходные реакции и могут оказаться дорогостоящими с точки зрения вычислений в некоторых приложениях.
Конструкции FIR минимального порядка
Конструкции минимального порядка получают путем задания частот полосы пропускания и полосы останова, а также пульсации полосы пропускания и затухания полосы останова. Затем алгоритм проектирования выбирает минимальную длину фильтра, которая соответствует спецификациям.
Сконструировать фильтр нижних частот FIR минимального порядка с частотой полосы пропускания 0,37 * пи рад/образец, частотой полосы останова 0,43 * пи рад/образец (следовательно, ширина перехода равна 0,06 * пи рад/образец), пульсацией полосы пропускания 1 дБ и ослаблением полосы останова 30 дБ.
Fpass = 0.37; Fstop = 0.43; Ap = 1; Ast = 30; d = designfilt('lowpassfir','PassbandFrequency',Fpass,... 'StopbandFrequency',Fstop,'PassbandRipple',Ap,'StopbandAttenuation',Ast); hfvt = fvtool(d);

Результирующий порядок фильтрации можно запросить с помощью filtord функция.
N = filtord(d)
N = 39
Вы можете использовать info функция для получения информации о параметрах, используемых для проектирования фильтра
info(d)
ans = 17x44 char array
'FIR Digital Filter (real) '
'------------------------- '
'Filter Length : 40 '
'Stable : Yes '
'Linear Phase : Yes (Type 2) '
' '
'Design Method Information '
'Design Algorithm : Equiripple '
' '
'Design Specifications '
'Sample Rate : N/A (normalized frequency)'
'Response : Lowpass '
'Specification : Fp,Fst,Ap,Ast '
'Passband Ripple : 1 dB '
'Stopband Atten. : 30 dB '
'Passband Edge : 0.37 '
'Stopband Edge : 0.43 '
designfilt по умолчанию функция выбирает алгоритм проектирования equiripple. Линейно-фазовые эквиппельные фильтры желательны, поскольку для данного порядка они имеют наименьшее возможное максимальное отклонение от идеального фильтра.
Однако следует отметить, что конструкции минимального порядка также могут быть получены с помощью окна Кайзера. Несмотря на то, что метод окна Кайзера дает больший порядок фильтров для тех же спецификаций, алгоритм является менее дорогостоящим с точки зрения вычислений и менее вероятным, что имеет проблемы сходимости, когда спецификации конструкции являются очень строгими. Это может произойти, если применение требует очень узкой ширины перехода или очень большого затухания полосы останова.
Спроектируйте фильтр с теми же характеристиками, что и выше, используя метод окна Кайзера, и сравните его отклик с эквириптным фильтром.
dk = designfilt('lowpassfir','PassbandFrequency',Fpass,... 'StopbandFrequency',Fstop,'PassbandRipple',Ap,... 'StopbandAttenuation',Ast, 'DesignMethod', 'kaiserwin'); addfilter(hfvt,dk); legend(hfvt,'Equiripple design', 'Kaiser window design')

N = filtord(dk)
N = 52
Задание параметров частоты в герцах
Если известна частота дискретизации, с которой будет работать фильтр, можно указать частоту дискретизации и частоты в герцах. Перепроектируйте эквиропльный фильтр минимального порядка для частоты дискретизации 2 кГц.
Fpass = 370; Fstop = 430; Ap = 1; Ast = 30; Fs = 2000; d = designfilt('lowpassfir','PassbandFrequency',Fpass,... 'StopbandFrequency',Fstop,'PassbandRipple',Ap,... 'StopbandAttenuation',Ast,'SampleRate',Fs); hfvt = fvtool(d);

Фиксированный порядок, Фиксированная ширина перехода
Конструкции фиксированного порядка полезны для приложений, чувствительных к вычислительной нагрузке или накладывающих ограничение на количество коэффициентов фильтра. Одним из вариантов является фиксация ширины перехода за счет управления пульсацией полосы пропускания/затуханием полосы останова.
Рассмотрим фильтр FIR нижних частот 30-го порядка с частотой полосы пропускания 370 Гц, частотой полосы останова 430 Гц и частотой дискретизации 2 кГц. Существует два метода проектирования для этого конкретного набора спецификаций: эквирипл и наименьшие квадраты. Разработаем один фильтр для каждого метода и сравним результаты.
N = 30; Fpass = 370; Fstop = 430; Fs = 2000; % Design method defaults to 'equiripple' when omitted deq = designfilt('lowpassfir','FilterOrder',N,'PassbandFrequency',Fpass,... 'StopbandFrequency',Fstop,'SampleRate',Fs); dls = designfilt('lowpassfir','FilterOrder',N,'PassbandFrequency',Fpass,... 'StopbandFrequency',Fstop,'SampleRate',Fs,'DesignMethod','ls'); hfvt = fvtool(deq,dls); legend(hfvt,'Equiripple design', 'Least-squares design')

Фильтры Equiripple идеально подходят для применений, в которых должен быть соблюден определенный допуск, например, для проектирования фильтра с заданным минимальным затуханием полосы останова или заданной максимальной пульсацией полосы пропускания. С другой стороны, эти конструкции могут быть нежелательными, если мы хотим минимизировать энергию ошибки (между идеальным и фактическим фильтром) в полосе пропускания/полосе останова.
Если вы хотите максимально уменьшить энергию сигнала в определенной полосе частот, используйте конструкцию наименьших квадратов.
В приведенных выше примерах сконструированные фильтры имели одинаковую пульсацию в полосе пропускания и в полосе останова. Мы можем использовать веса, чтобы уменьшить пульсацию в одной из полос, сохраняя порядок фильтра фиксированным. Например, если требуется, чтобы пульсация полосы останова составляла десятую часть в полосе пропускания, необходимо задать полосу останова, десятикратную весу полосы пропускания. Переработайте фильтр equiripple, используя этот факт.
deqw = designfilt('lowpassfir','FilterOrder',N,'PassbandFrequency',Fpass,... 'StopbandFrequency',Fstop,'SampleRate',Fs,... 'PassbandWeight',1,'StopbandWeight',10); hfvt = fvtool(deq,deqw); legend(hfvt,'Equiripple design', 'Equiripple design with weighted stopband')

Фиксированный порядок, Фиксированная частота отсечения
Можно проектировать фильтры с фиксированным порядком фильтрации и частотой отсечения с помощью метода оконного проектирования.
Можно использовать различные окна для управления затуханием полосы останова при сохранении порядка фильтра неизменным.
Например, рассмотрим фильтр FIR нижних частот 100-го порядка с частотой отсечки 60 Гц и частотой дискретизации 1 кГц. Сравните конструкции, которые являются результатом использования окна Хэмминга и окна Чебышева с 90 дБ затухания боковых зон.
dhamming = designfilt('lowpassfir','FilterOrder',100,'CutoffFrequency',60,... 'SampleRate',1000,'Window','hamming'); dchebwin = designfilt('lowpassfir','FilterOrder',100,'CutoffFrequency',60,... 'SampleRate',1000,'Window',{'chebwin',90}); hfvt = fvtool(dhamming,dchebwin); legend(hfvt,'Hamming window', 'Chebyshev window')

Существуют и другие способы задания фильтра с фиксированным порядком: фиксированная частота отсечения, пульсация полосы пропускания и затухание полосы останова; фиксированная ширина перехода; и зафиксированная полувласть (3 дБ) частота.
Одним из недостатков КИХ-фильтров является то, что они требуют большого порядка фильтров, чтобы соответствовать некоторым конструктивным спецификациям. Если пульсации сохраняются постоянными, порядок фильтра увеличивается обратно пропорционально ширине перехода. Используя обратную связь, можно соответствовать набору конструктивных спецификаций с гораздо меньшим порядком фильтрации. Это идея, лежащая в основе конструкции фильтра БИХ. Термин «бесконечная импульсная характеристика» (БИХ) проистекает из того, что при подаче импульса на фильтр выходной сигнал никогда не затухает до нуля.
Фильтры БИХ полезны, когда вычислительные ресурсы имеют преимущество. Однако стабильные каузальные фильтры БИХ не могут иметь совершенно линейную фазу. Избегайте конструкций БИХ в тех случаях, когда требуется линейность фаз.
Другой важной причиной использования БИХ-фильтров является их небольшая групповая задержка относительно КИХ-фильтров, что приводит к более короткому переходному отклику.
Фильтры Баттерворта
Фильтры бабочки являются максимально плоскими фильтрами БИХ. Плоскостность полосы пропускания и полосы останова заставляет переходную полосу быть очень широкой. Для получения фильтров с узкой шириной перехода требуются большие заказы.
Проектирование фильтра Баттерворта минимального порядка с частотой полосы пропускания 100 Гц, частотой полосы останова 300 Гц, максимальной пульсацией полосы пропускания 1 дБ и затуханием полосы останова 60 дБ. Частота дискретизации составляет 2 кГц.
Fp = 100; Fst = 300; Ap = 1; Ast = 60; Fs = 2e3; dbutter = designfilt('lowpassiir','PassbandFrequency',Fp,... 'StopbandFrequency',Fst,'PassbandRipple',Ap,... 'StopbandAttenuation',Ast,'SampleRate',Fs,'DesignMethod','butter');
Фильтры типа I Чебышева
Фильтры типа I Чебышева достигают меньшей ширины перехода, чем фильтры Баттерворта того же порядка, допуская пульсацию полосы пропускания.
Фильтры Butterworth и Chebyshev типа I имеют максимально плоские стопоры. Для заданного порядка фильтра компромисс находится между пульсацией полосы пропускания и шириной перехода.
Спроектируйте фильтр типа I Чебышева с теми же характеристиками, что и фильтр типа Butterworth выше.
dcheby1 = designfilt('lowpassiir','PassbandFrequency',Fp,... 'StopbandFrequency',Fst,'PassbandRipple',Ap,... 'StopbandAttenuation',Ast,'SampleRate',Fs,'DesignMethod','cheby1');
Фильтры типа II Чебышева
Фильтры типа II Чебышева имеют максимально плоские полосы пропускания и равные полосы останова.
Поскольку чрезвычайно большие затухания обычно не требуются, мы можем достичь требуемой ширины перехода с относительно небольшим порядком, допустив некоторую пульсацию полосы останова.
Сконструируйте фильтр Чебышева типа II минимального порядка с теми же спецификациями, что и в предыдущих примерах.
dcheby2 = designfilt('lowpassiir','PassbandFrequency',Fp,... 'StopbandFrequency',Fst,'PassbandRipple',Ap,... 'StopbandAttenuation',Ast,'SampleRate',Fs,'DesignMethod','cheby2');
Эллиптические фильтры
Эллиптические фильтры обобщают фильтры Чебышева и Баттерворта, допуская пульсацию как в полосе пропускания, так и в полосе останова. По мере уменьшения пульсаций эллиптические фильтры могут приближенно произвольно закрывать величину и фазовый отклик фильтров Чебышева или Баттерворта.
Эллиптические фильтры достигают заданной ширины перехода с наименьшим порядком.
dellip = designfilt('lowpassiir','PassbandFrequency',Fp,... 'StopbandFrequency',Fst,'PassbandRipple',Ap,... 'StopbandAttenuation',Ast,'SampleRate',Fs,'DesignMethod','ellip');
Сравните отклик и порядок четырех фильтров БИХ.
Для тех же ограничений спецификации метод Баттерворта дает наивысший порядок, а эллиптический метод - наименьший.
FilterOrders = [filtord(dbutter) filtord(dcheby1) filtord(dcheby2) filtord(dellip)]
FilterOrders = 1×4
7 5 5 4
hfvt = fvtool(dbutter,dcheby1,dcheby2,dellip); axis([0 1e3 -80 2]); legend(hfvt,'Butterworth', 'Chebyshev Type I',... 'Chebyshev Type II','Elliptic')

Увеличьте масштаб полосы пропускания, чтобы увидеть различия пульсаций.
axis([0 150 -3 2]);

Соответствие точным спецификациям полосы пропускания или полосы останова
В конструкциях с минимальным порядком идеальный порядок должен быть округлен до следующего целого числа. Этот дополнительный дробный порядок позволяет алгоритму фактически превышать спецификации.
Используйте 'MatchExactly' параметр для ограничения алгоритма проектирования точным совпадением с одной полосой. Другая полоса превышает свои технические характеристики.
По умолчанию конструкции типа I Чебышева соответствуют полосе пропускания, Butterworth и Chebyshev Type II - полосе останова, а эллиптические конструкции - полосе пропускания и полосе останова (при превышении частоты границ полосы останова):
dellip1 = designfilt('lowpassiir','PassbandFrequency',Fp,... 'StopbandFrequency',Fst,'PassbandRipple',Ap,... 'StopbandAttenuation',Ast,'SampleRate',Fs,'DesignMethod','ellip',... 'MatchExactly','passband'); dellip2 = designfilt('lowpassiir','PassbandFrequency',Fp,... 'StopbandFrequency',Fst,'PassbandRipple',Ap,... 'StopbandAttenuation',Ast,'SampleRate',Fs,'DesignMethod','ellip',... 'MatchExactly','stopband'); hfvt = fvtool(dellip, dellip1, dellip2); legend(hfvt,'Matched passband and stopband','Matched passband',... 'Matched stopband'); axis([0 1e3 -80 2]);

Согласованная полоса пропускания и согласованная полоса пропускания имеют пульсацию ровно 1 дБ при значении частоты полосы пропускания 100 Гц.
Сравнение задержки группы
При использовании фильтров БИХ необходимо учитывать не только компромисс между шириной пульсации/перехода, но и степень фазового искажения. Мы знаем, что невозможно иметь линейную фазу на протяжении всего интервала Найквиста. Таким образом, мы можем захотеть увидеть, насколько далек фазовый отклик от линейного. Хороший способ сделать это - посмотреть на (идеально постоянную) групповую задержку и увидеть, насколько она плоская.
Сравните групповую задержку четырех фильтров БИХ, разработанных выше.
Если фаза является проблемой, помните, что конструкции Баттерворта и Чебышева типа II имеют самую плоскую групповую задержку и, таким образом, вносят наименьшие искажения.
hfvt = fvtool(dbutter,dcheby1,dcheby2,dellip,'Analysis','grpdelay'); legend(hfvt,'Butterworth', 'Chebyshev Type I',... 'Chebyshev Type II','Elliptic')

В этом примере вы научились использовать designfilt для получения множества низкочастотных фильтров FIR и IIR с различными ограничениями и методами проектирования. designfilt может также использоваться, чтобы получить highpass, полосно-пропускающий, bandstop, произвольная величина, дифференциатор и проекты Хилберта. Дополнительные сведения обо всех доступных параметрах см. в разделе Фильтрация коллекции конструкторов.
Дополнительные сведения о проектировании и анализе фильтров см. в документации по программному обеспечению Signal Processing Toolbox ®. Дополнительные сведения о применении фильтров см. в разделе Практическое введение в цифровую фильтрацию.
designfilt | filtord | FVTool