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

В этом примере показано, как спроектировать КИХ, и БИХ фильтрует на основе спецификаций частотной характеристики с помощью 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 Edge   : 0.43                      '
    'Passband Edge   : 0.37                      '
    'Stopband Atten. : 30 dB                     '
    'Passband Ripple : 1 dB                      '

  • designfilt функция выбирает алгоритм проекта equiripple по умолчанию. Линейная фаза 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

Определение параметров частоты в герц

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