Этот пример показов, как спроектировать конечную импульсную характеристику и БИХ фильтры на основе спецификаций частотной характеристики, используя designfilt
функция в продукте Signal Processing Toolbox ®. Пример концентрируется на lowpass, но большинство результатов применяются и к другим типам отклика.
Этот пример фокусируется на проекте цифровых фильтров, а не на их приложениях. Если вы хотите узнать больше о приложениях цифровых фильтров, см. Практическое введение в цифровую фильтрацию.
Lowpass фильтра Спецификаций
Идеальный фильтр lowpass является таким, который оставляет неизменными все частотные составляющие сигнала ниже заданной частоты отключения, , и отклоняет все компоненты выше . Поскольку импульсная характеристика, необходимая для реализации идеального lowpass фильтра, бесконечно длинна, невозможно спроектировать идеальную конечную импульсную характеристику lowpass фильтр. Приближения конечной длины к идеальной импульсной характеристике приводят к наличию рябей в обеих полосах пропускания () и полосу упора () фильтра, а также ненулевой ширины перехода между полосой пропускания и полосой упора.
И ширина полосы пропускания/полосы упора, и ширина перехода являются нежелательными, но неизбежными отклонениями от отклика идеального lowpass при аппроксимации с конечной импульсной характеристикой. Эти отклонения изображены на следующем рисунке:
Практические конечные импульсные характеристики проектов обычно состоят из фильтров, которые имеют ширину перехода и максимальную полосу пропускания и полосу упора, которые не превышают допустимых значений. В дополнение к этим проектным спецификациям необходимо выбрать порядок фильтра или, что эквивалентно, длину усеченной импульсной характеристики.
Полезная метафора спецификаций проекта в создание фильтра состоит в том, чтобы думать о каждой спецификации как об одном из углов в треугольнике, показанном на рисунке ниже.
Треугольник используется, чтобы понять степени свободы, доступные при выборе спецификаций проекта. Поскольку сумма углов фиксирована, можно самое большее выбрать значения двух спецификаций. Третья спецификация будет определяться конкретным алгоритмом проекта. Более того, как и с углами в треугольнике, если сделать одну из спецификаций больше/меньше, это повлияет на одну или обе другие спецификации.
Конечная импульсная характеристика очень привлекательны, потому что они по своей сути стабильны и могут быть спроектированы, чтобы иметь линейную фазу. Тем не менее, эти фильтры могут иметь длинные переходные процессы и могут оказаться вычислительно дорогими в некоторых приложениях.
Конечные импульсные характеристики минимального порядка
Проекты минимального порядка получают путем определения частот полосы пропускания и полосы остановки, а также неравномерности в полосе пропускания и затухания в полосе задерживания. Затем алгоритм проекта выбирает минимальную длину фильтра, которая соответствует спецификациям.
Спроектируйте lowpass конечную импульсную характеристику фильтр минимального порядка с частотой полосы пропускания 0,37 * pi рад/образец, частотой полосы стоп-сигнала 0,43 * pi рад/образец (следовательно, ширина перехода равна 0,06 * pi рад/образец), неравномерностью в полосе пропускания 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 '
The designfilt
функция выбирает алгоритм проекта equiripple по умолчанию. Линейно-фазовые фильтры равновесия желательны, потому что для заданного порядка они имеют наименьшее возможное максимальное отклонение от идеального фильтра.
Обратите внимание, однако, что проекты минимального порядка также могут быть получены с помощью окна Кайзера. Несмотря на то, что метод окна Кайзера приводит к большему порядку фильтра для тех же спецификаций, алгоритм является менее в вычислительном отношении дорогим и с меньшей вероятностью имеет проблемы сходимости, когда спецификации проекта очень строгие. Это может произойти, если приложению требуется очень узкая ширина перехода или очень большое затухание в полосе задерживания.
Спроектируйте фильтр с теми же спецификациями, что и выше, используя метод Окна Кайзера и сравните его реакцию на фильтр 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);
Фиксированный Порядок, Фиксированная Ширина Перехода
Проекты с фиксированным порядком полезны для приложений, которые чувствительны к вычислительной нагрузке или накладывают предел на количество коэффициентов фильтра. Опция состоит в том, чтобы фиксировать ширину перехода за счет управления над неравномерность в полосе пропускания/ затухание в полосе задерживания.
Рассмотрим lowpass конечная импульсная характеристика 30-го порядка с частотой полосы пропускания 370 Гц, частотой полосы остановки 430 Гц и частотой дискретизации 2 кГц. Существует два метода проекта для этого конкретного набора спецификаций: equiripple и методом наименьших квадратов. Давайте спроектируем один фильтр для каждого метода и сравним результаты.
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')
Фиксированный Порядок, Фиксированная Частота Отсечения
Вы можете проектировать фильтры с фиксированным порядком фильтра и частотой отключения с помощью метода проекта окна.
Можно использовать различные окна, чтобы управлять затуханием в полосе задерживания, сохраняя порядок фильтра неизменным.
Для примера рассмотрим lowpass конечной импульсной характеристики фильтр 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')
Существуют и другие способы задать фильтр с фиксированным порядком: фиксированная частота отключения, неравномерности в полосе пропускания и затухания в полосе задерживания; фиксированная ширина перехода; и фиксированную полустепень (3dB).
Одним из недостатков конечной импульсной характеристики фильтров является то, что они требуют большого порядка фильтров, чтобы соответствовать некоторым проектом спецификациям. Если рябь сохранена постоянной, порядок фильтра увеличивается обратно пропорционально ширине перехода. При помощи обратной связи возможно соответствовать набору проекта спецификаций с гораздо меньшим порядком фильтра. Это идея, лежащая в основе БИХ создания фильтра. Термин «бесконечная импульсная характеристика» (БИХ) вытекает из того, что, когда импульс прикладывается к фильтру, выход никогда не разрушается до нуля.
БИХ применяются, когда вычислительные ресурсы находятся на уровне premium. Однако стабильный причинно-следственный БИХ фильтры не могут иметь идеально линейную фазу. Избегайте проектов БИХ в случаях, когда линейность фазы является требованием.
Другой важной причиной использования БИХ является их небольшая групповая задержка относительно конечная импульсная характеристика, что приводит к более короткому переходному процессу.
Фильтры Баттерворта
Фильтры Баттерворта являются максимально плоским БИХ фильтрами. Плоскостность в полосе пропускания и полосе упора заставляет полосу перехода быть очень широкой. Большие порядки требуются для получения фильтров с узкими ширинами переходов.
Спроектируйте фильтр Баттерворта минимального порядка с частотой полосы пропускания 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');
Фильтры Чебышевский Тип 1
Фильтры Чебышевский Тип 1 достигаете меньших ширин перехода, чем Фильтры Баттерворта того же порядка, позволяя для неравномерности в полосе пропускания.
Фильтры Чебышевский Тип 1 имеют максимально плоские полосы упоров. Для заданного порядка фильтра компромисс находится между неравномерностью в полосе пропускания и шириной перехода.
Спроектируйте фильтр Чебышевский Тип 1 с теми же спецификациями, что и фильтр Баттерворта выше.
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]);
Соответствие точно спецификациям Passband или Stop Band
С проектами минимального порядка идеальный порядок должен быть округлён до следующего целого числа. Этот дополнительный дробный порядок позволяет алгоритму фактически превысить спецификации.
Используйте 'MatchExactly'
параметр для ограничения алгоритма проекта, чтобы точно соответствовать одной полосе. Другая полоса превышает его спецификацию.
По умолчанию проекты Chebyshev Type 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
получить различные lowpass конечные импульсные характеристики и БИХ фильтры с различными ограничениями и методами проекта. designfilt
может также использоваться для получения проектов highpass, bandpass, bandstop, произвольной величины, дифференциатора и Гильберта. Чтобы узнать больше обо всех доступных опциях, выберите Filter Design Gallery.
Для получения дополнительной информации о разработке и анализе фильтра смотрите документацию по программному обеспечению Signal Processing Toolbox ®. Для получения дополнительной информации о приложениях фильтра смотрите Практическое введение в цифровую фильтрацию.
designfilt
| filtord
| FVTool