Практическое введение в создание цифровых фильтров

Этот пример показывает, как разработать КИХ и БИХ-фильтры на основе спецификаций частотной характеристики с помощью функции designfilt в продукте Signal Processing Toolbox®. Концентраты в качестве примера на фильтрах lowpass, но большинстве результатов применяются к другим типам ответа также.

Этот пример фокусируется на проекте цифровых фильтров, а не на их приложениях. Если вы хотите узнать больше о цифровых приложениях фильтра, смотрите Практическое Введение в Цифровой пример Фильтрации.

КИХ-проект фильтра

Спецификации фильтра Lowpass

Идеал lowpass фильтр является тем, который оставляет все частотные составляющие без изменений сигнала ниже обозначенной частоты среза, ωc, и отклонения все компоненты выше ωc. Поскольку импульсный ответ, требуемый реализовывать идеал lowpass фильтр, бесконечно долог, невозможно разработать идеального КИХ lowpass фильтр. Конечные приближения длины к идеальному импульсному ответу приводят к присутствию пульсаций в обоих полосу пропускания (ω<ωc) и полоса задерживания (ω>ωc) из фильтра, а также к ненулевой ширине перехода между полосой пропускания и полосой задерживания.

И пульсации полосы пропускания/полосы задерживания и ширина перехода являются нежелательными но неизбежными отклонениями от ответа идеала 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®. Для получения дополнительной информации о фильтре приложения видят Практическое Введение в Цифровой пример Фильтрации.