Этот пример показывает, как разработать КИХ и БИХ-фильтры на основе спецификаций частотной характеристики с помощью функции 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 '
'Stopband Atten. : 30 dB '
'Passband Ripple : 1 dB '
'Stopband Edge : 0.43 '
'Passband Edge : 0.37 '
Функция designfilt
выбирает алгоритм проекта equiripple по умолчанию. Линейная фаза equiripple фильтры желательна, потому что для данного распоряжения у них есть самое маленькое максимальное отклонение от идеального фильтра.
Обратите внимание, однако, что проекты минимального заказа могут также быть получены с помощью окна Kaiser. Даже при том, что метод окна Kaiser приводит к большему порядку фильтра для тех же спецификаций, алгоритм является менее в вычислительном отношении дорогим и менее вероятным иметь проблемы сходимости, когда спецификации проекта являются очень строгими. Это может произойти, если приложение требует очень узкой ширины перехода или очень большого затухания полосы задерживания.
Разработайте фильтр с теми же спецификациями как выше использования метода окна Kaiser и сравните его ответ на фильтр 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
Определение параметров частоты в герц
Если вы знаете частоту дискретизации, на уровне которой будет действовать фильтр, можно задать частоту дискретизации и частоты в герц. Перепроектируйте минимальный заказ equiripple фильтр для частоты дискретизации 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);
Фиксированный порядок, фиксированная ширина перехода
Проекты фиксированного порядка полезны для приложений, которые чувствительны к вычислительной загрузке или накладывают ограничение на количество коэффициентов фильтра. Опция должна зафиксировать ширину перехода за счет управления затуханием пульсации/полосы задерживания полосы пропускания.
Считайте 30-й порядок lowpass КИХ-фильтром с частотой полосы пропускания 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')
Фиксированный порядок, фиксированная частота среза
Можно разработать фильтры с фиксированным порядком фильтра и частотой среза с помощью метода разработки окна.
Можно использовать различные окна, чтобы управлять затуханием полосы задерживания при хранении порядка фильтра неизменным.
Например, считайте 100-й порядок lowpass КИХ-фильтром с частотой среза 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 фильтруют, у обоих есть максимально плоские полосы задерживания. Для данного распоряжения фильтра компромисс между пульсацией полосы пропускания и шириной перехода.
Разработайте Чебышевский Тип, который я фильтрую с теми же спецификациями как Фильтр Баттерворта выше.
dcheby1 = designfilt('lowpassiir','PassbandFrequency',Fp,... 'StopbandFrequency',Fst,'PassbandRipple',Ap,... 'StopbandAttenuation',Ast,'SampleRate',Fs,'DesignMethod','cheby1');
Чебышевские фильтры типа II
Чебышевские фильтры Типа II имеют максимально плоские полосы пропускания и equiripple полосы задерживания.
Поскольку чрезвычайно большие затухания обычно не требуются, мы можем смочь достигнуть необходимой ширины перехода с относительно маленьким порядком путем обеспечения некоторой пульсации полосы задерживания.
Разработайте минимальный заказ фильтр Типа 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'
, чтобы ограничить алгоритм проекта совпадать с одной полосой точно. Другая полоса превышает свою спецификацию.
По умолчанию Чебышевский Тип, который я разрабатываю, совпадает с полосой пропускания, Баттерворт и Чебышевский Тип 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, полосу пропускания, bandstop, произвольное значение, дифференциатор и Гильбертовы проекты. Смотрите пример галереи Filter Design и документацию, чтобы узнать больше обо всех доступных параметрах.
Для получения дополнительной информации о проекте фильтра и анализе, см. документацию программного обеспечения Signal Processing Toolbox®. Для получения дополнительной информации о фильтре приложения видят Практическое Введение в Цифровой пример Фильтрации.