designfilt

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

Описание

пример

d = designfilt(resp,Name,Value) проектирует digitalFilter объект, d, с типом отклика resp. Задайте фильтр далее, используя набор Name,Value пар. Разрешенные наборы спецификаций зависят от типа отклика, resp, и состоят из комбинаций:

  • Частотные ограничения соответствуют частотам, на которых фильтр показывает желаемое поведение. Примеры включают 'PassbandFrequency' и 'CutoffFrequency'. (Полный список см. в разделе Аргументы в виде пар имя-значение.) Необходимо всегда задавать частотные ограничения.

  • Ограничения величины описывают поведение фильтра в конкретных частотных областях значений. Примеры включают 'PassbandRipple' и 'StopbandAttenuation'. (Полный список см. в разделе Аргументы в виде пар имя-значение.) designfilt задает значения по умолчанию для ограничений величины, не заданных. В проектах произвольной амплитуды вы должны всегда задавать векторы желаемых амплитуд.

  • 'FilterOrder'. Некоторые методы проекта позволяют вам задать порядок. Другие производят проекты минимального порядка. То есть они генерируют наименьшие фильтры, которые удовлетворяют заданным ограничениям.

  • 'DesignMethod' - алгоритм, используемый для разработки фильтра. Примеры включают методы наименьших квадратов с ограничениями ('cls') и Кайзер оконная ('kaiserwin'). Для некоторых наборов спецификаций существует несколько методов проекта, доступных для выбора. В других случаях можно использовать только один метод, чтобы соответствовать желаемым спецификациям.

  • Опции проекта являются параметрами, специфичными для данного метода проектирования. Примеры включают 'Window' для 'window' метод и ' оптимизацииWeights' для проектов равнодействия произвольной величины. (Полный список см. в разделе Аргументы в виде пар имя-значение.) designfilt задает значения по умолчанию для опций проекта, не заданных.

  • 'SampleRate' - частота, с которой работает фильтр. designfilt имеет частоту выборки по умолчанию 2 Гц. Использование этого значения эквивалентно работе с нормированными частотами.

Примечание

Если вы задаете неполный или несогласованный набор пар "имя-значение" в командной строке, designfilt предлагает открыть ассистента по созданию фильтра. Помощник помогает вам проектировать фильтр и паст исправленный MATLAB® код в командной строке.

Если вы звоните designfilt из скрипта или функции с неправильным набором спецификаций, designfilt выдает сообщение об ошибке со ссылкой для открытия помощника по созданию фильтра. Ассистент помогает вам проектировать фильтр, комментирует неисправный код в функции или скрипте и вставляет исправленный код MATLAB в следующую линию.

  • Использовать filter в форме dataOut = filter(d,dataIn) для фильтрации сигнала с помощью digitalFilter, d. Для БИХ, filter функция использует реализацию II прямой формы.

  • Используйте FVTool, чтобы визуализировать digitalFilter, d.

  • Тип d.Coefficients для получения коэффициентов digitalFilter, d. Для БИХ коэффициенты выражаются как секции второго порядка.

  • См. digitalFilter список функций фильтрации и анализа, доступных для использования с digitalFilter объекты.

designfilt(d) позволяет редактировать существующий цифровой фильтр, d. Откроется помощник по созданию фильтра, заполненный спецификациями фильтра, которые можно затем изменить. Это единственный способ редактирования digitalFilter объект. Его свойства в противном случае доступны только для чтения.

Примеры

свернуть все

Проектируйте lowpass конечную импульсную характеристику фильтр минимального порядка с нормализованной частотой полосы пропускания 0.25π рад/с, частота диапазона остановок 0.35π рада/с, неравномерность в полосе пропускания 0,5 дБ и затухание в полосе задерживания 65 дБ. Для разработки фильтра используйте окно Кайзера. Визуализируйте его величину ответ. Используйте его для фильтрации вектора случайных данных.

lpFilt = designfilt('lowpassfir','PassbandFrequency',0.25, ...
         'StopbandFrequency',0.35,'PassbandRipple',0.5, ...
         'StopbandAttenuation',65,'DesignMethod','kaiserwin');
fvtool(lpFilt)

Figure Filter Visualization Tool - Magnitude Response (dB) contains an axes and other objects of type uitoolbar, uimenu. The axes with title Magnitude Response (dB) contains 2 objects of type line.

dataIn = rand(1000,1);
dataOut = filter(lpFilt,dataIn);

Проектируйте lowpass БИХ фильтр с порядком 8, частотой полосы пропускания 35 кГц и неравномерность в полосе пропускания 0,2 дБ. Задайте частоту дискретизации 200 кГц. Визуализируйте амплитудную характеристику фильтра.

lpFilt = designfilt('lowpassiir','FilterOrder',8, ...
         'PassbandFrequency',35e3,'PassbandRipple',0.2, ...
         'SampleRate',200e3);
fvtool(lpFilt)

Figure Filter Visualization Tool - Magnitude Response (dB) contains an axes and other objects of type uitoolbar, uimenu. The axes with title Magnitude Response (dB) contains 2 objects of type line.

Используйте фильтр, который вы разработали, чтобы фильтровать 1000-выборочный случайный сигнал.

dataIn = randn(1000,1);
dataOut = filter(lpFilt,dataIn);

Вывод коэффициентов фильтра, выраженных как секции второго порядка.

sos = lpFilt.Coefficients
sos = 4×6

    0.2666    0.5333    0.2666    1.0000   -0.8346    0.9073
    0.1943    0.3886    0.1943    1.0000   -0.9586    0.7403
    0.1012    0.2023    0.1012    1.0000   -1.1912    0.5983
    0.0318    0.0636    0.0318    1.0000   -1.3810    0.5090

Спроектируйте фильтр конечной импульсной характеристики high-pass минимального порядка с нормализованной частотой полосы остановок 0.25π рад/с, частота полосы пропускания 0.35π рада/с, неравномерность в полосе пропускания 0,5 дБ и затухание в полосе задерживания 65 дБ. Для разработки фильтра используйте окно Кайзера. Визуализируйте его величину ответ. Используйте его для фильтрации 1000 выборок случайных данных.

hpFilt = designfilt('highpassfir','StopbandFrequency',0.25, ...
         'PassbandFrequency',0.35,'PassbandRipple',0.5, ...
         'StopbandAttenuation',65,'DesignMethod','kaiserwin');
fvtool(hpFilt)

Figure Filter Visualization Tool - Magnitude Response (dB) contains an axes and other objects of type uitoolbar, uimenu. The axes with title Magnitude Response (dB) contains 2 objects of type line.

dataIn = randn(1000,1);
dataOut = filter(hpFilt,dataIn);

Проектируйте высокочастотный БИХ-фильтр с 8 порядка, частотой полосы пропускания 75 кГц и неравномерность в полосе пропускания 0,2 дБ. Задайте частоту дискретизации 200 кГц. Визуализируйте величину ответ фильтра. Применить фильтр к 1000-выборочному вектору случайных данных.

hpFilt = designfilt('highpassiir','FilterOrder',8, ...
         'PassbandFrequency',75e3,'PassbandRipple',0.2, ...
         'SampleRate',200e3);
fvtool(hpFilt)

Figure Filter Visualization Tool - Magnitude Response (dB) contains an axes and other objects of type uitoolbar, uimenu. The axes with title Magnitude Response (dB) contains 2 objects of type line.

dataIn = randn(1000,1);
dataOut = filter(hpFilt,dataIn);

Проектируйте полосно- конечную импульсную характеристику фильтр 20-го порядка с более низкой частотой отключения 500 Гц и более высокой частотой отключения 560 Гц. Частота дискретизации составляет 1500 Гц. Визуализируйте амплитудную характеристику фильтра. Используйте его для фильтрации случайного сигнала, содержащего 1000 выборки.

bpFilt = designfilt('bandpassfir','FilterOrder',20, ...
         'CutoffFrequency1',500,'CutoffFrequency2',560, ...
         'SampleRate',1500);
fvtool(bpFilt)

Figure Filter Visualization Tool - Magnitude Response (dB) contains an axes and other objects of type uitoolbar, uimenu. The axes with title Magnitude Response (dB) contains 2 objects of type line.

dataIn = randn(1000,1);
dataOut = filter(bpFilt,dataIn);

Вывод коэффициентов фильтра.

b = bpFilt.Coefficients
b = 1×21

   -0.0113    0.0067    0.0125   -0.0445    0.0504    0.0101   -0.1070    0.1407   -0.0464   -0.1127    0.1913   -0.1127   -0.0464    0.1407   -0.1070    0.0101    0.0504   -0.0445    0.0125    0.0067   -0.0113

Проектируйте полосно- БИХ фильтр 20-го порядка с более низкой частотой 3-dB 500 Гц и более высокой частотой 3-dB 560 Гц. Частота дискретизации составляет 1500 Гц. Визуализируйте частотную характеристику фильтра. Используйте его для фильтрации 1000-выборочного случайного сигнала.

bpFilt = designfilt('bandpassiir','FilterOrder',20, ...
         'HalfPowerFrequency1',500,'HalfPowerFrequency2',560, ...
         'SampleRate',1500);
fvtool(bpFilt)

Figure Filter Visualization Tool - Magnitude Response (dB) contains an axes and other objects of type uitoolbar, uimenu. The axes with title Magnitude Response (dB) contains 2 objects of type line.

dataIn = randn(1000,1);
dataOut = filter(bpFilt,dataIn);

Проектируйте полосно-заграждающий конечная импульсная характеристика 20-го порядка с более низкой частотой отключения 500 Гц и более высокой частотой отключения 560 Гц. Частота дискретизации составляет 1500 Гц. Визуализируйте амплитудную характеристику фильтра. Используйте его для фильтрации 1000 выборок случайных данных.

bsFilt = designfilt('bandstopfir','FilterOrder',20, ...
         'CutoffFrequency1',500,'CutoffFrequency2',560, ...
         'SampleRate',1500);
fvtool(bsFilt)

Figure Filter Visualization Tool - Magnitude Response (dB) contains an axes and other objects of type uitoolbar, uimenu. The axes with title Magnitude Response (dB) contains 2 objects of type line.

dataIn = randn(1000,1);
dataOut = filter(bsFilt,dataIn);

Проектируйте полосно-заграждающий БИХ 20-го порядка с более низкой частотой 3-dB 500 Гц и более высокой частотой 3-dB 560 Гц. Частота дискретизации составляет 1500 Гц. Визуализируйте амплитудную характеристику фильтра. Используйте его для фильтрации 1000 выборок случайных данных.

bsFilt = designfilt('bandstopiir','FilterOrder',20, ...
         'HalfPowerFrequency1',500,'HalfPowerFrequency2',560, ...
         'SampleRate',1500);
fvtool(bsFilt)

Figure Filter Visualization Tool - Magnitude Response (dB) contains an axes and other objects of type uitoolbar, uimenu. The axes with title Magnitude Response (dB) contains 2 objects of type line.

dataIn = randn(1000,1);
dataOut = filter(bsFilt,dataIn);

Создайте полнополосный дифференцирующий фильтр порядка 7. Отобразите его нулевую фазовую характеристику. Используйте его, чтобы фильтровать 1000-выборочный вектор случайных данных.

dFilt = designfilt('differentiatorfir','FilterOrder',7);
fvtool(dFilt,'MagnitudeDisplay','Zero-phase')

Figure Filter Visualization Tool - Zero-phase Response contains an axes and other objects of type uitoolbar, uimenu. The axes with title Zero-phase Response contains 2 objects of type line.

dataIn = randn(1000,1);
dataOut = filter(dFilt,dataIn);

Проектируйте трансформатор Гильберта порядка 18. Задайте нормированную ширину перехода 0.25π рад/с. Отображение в линейном режиме модулей величины характеристику фильтра. Используйте его, чтобы фильтровать 1000-выборочный вектор случайных данных.

hFilt = designfilt('hilbertfir','FilterOrder',18,'TransitionWidth',0.25);
fvtool(hFilt,'MagnitudeDisplay','magnitude')

Figure Filter Visualization Tool - Magnitude Response contains an axes and other objects of type uitoolbar, uimenu. The axes with title Magnitude Response contains 2 objects of type line.

dataIn = randn(1000,1);
dataOut = filter(hFilt,dataIn);

Выдается сигнал, дискретизированный с частотой дискретизации 1 кГц. Создайте фильтр, который останавливает частоты от 100 Гц до 350 Гц и частоты более 400 Гц. Задайте порядок фильтра 60. Визуализируйте частотную характеристику фильтра. Используйте его для фильтрации 1000-выборочного случайного сигнала.

mbFilt = designfilt('arbmagfir','FilterOrder',60, ...
         'Frequencies',0:50:500,'Amplitudes',[1 1 1 0 0 0 0 1 1 0 0], ...
         'SampleRate',1000);
fvtool(mbFilt)

Figure Filter Visualization Tool - Magnitude Response (dB) contains an axes and other objects of type uitoolbar, uimenu. The axes with title Magnitude Response (dB) contains 2 objects of type line.

dataIn = randn(1000,1);
dataOut = filter(mbFilt,dataIn);

Входные параметры

свернуть все

Фильтруйте ответ и тип, заданные как вектор символов или строковый скаляр. Щелкните одно из возможных значений resp чтобы развернуть таблицу допустимых наборов спецификаций.

 'lowpassfir'

 'lowpassiir'

 'highpassfir'

 'highpassiir'

 'bandpassfir'

 'bandpassiir'

 'bandstopfir'

 'bandstopiir'

 'differentiatorfir'

 'hilbertfir'

 'arbmagfir'

Типы данных: char | string

Цифровой фильтр, заданный как digitalFilter объект, сгенерированный designfilt. Используйте этот вход для изменения спецификаций существующего digitalFilter.

Аргументы в виде пар имя-значение

Задайте необязательные разделенные разделенными запятой парами Name,Value аргументы. Name - имя аргумента и Value - соответствующее значение. Name должны находиться внутри кавычек. Можно задать несколько аргументов в виде пар имен и значений в любом порядке Name1,Value1,...,NameN,ValueN.

Пример: 'FilterOrder',20,'CutoffFrequency',0.4 достаточно, чтобы задать lowpass конечную импульсную характеристику фильтр.

Не все комбинации Name,Value пары действительны. Допустимые комбинации зависят от нужной характеристики фильтра и от ограничений частоты и величины вашего проекта.

Порядок фильтрации

свернуть все

Порядок фильтра, заданный как разделенная разделенными запятой парами, состоящая из 'FilterOrder' и положительный целочисленный скаляр.

Типы данных: double

Порядок числителя БИХ проекта, заданный как разделенная запятой пара, состоящий из 'NumeratorOrder' и положительный целочисленный скаляр.

Типы данных: double

Порядок знаменателя проекта БИХ, заданный как разделенная разделенными запятой парами, состоящая из 'DenominatorOrder' и положительный целочисленный скаляр.

Типы данных: double

Частотные ограничения

свернуть все

Частота полосы пропускания, заданная как разделенная разделенными запятой парами, состоящая из 'PassbandFrequency' и положительная скалярная величина. Значение частоты должно находиться в области значений Найквиста.

'PassbandFrequency1' - нижняя ширина полосы пропускания для проекта полосы пропускания или полосы пропускания.

'PassbandFrequency2' - более высокая ширина полосы пропускания для проекта полосы пропускания или полосы пропускания.

Типы данных: double

Частота стоп-полосы, заданная как разделенная разделенными запятой парами, состоящая из 'StopbandFrequency' и положительная скалярная величина. Значение частоты должно находиться в области значений Найквиста.

'StopbandFrequency1' - нижняя частота полосы остановки для проекта полосы пропускания или полосы пропускания

'StopbandFrequency2' - более высокая частота полосы остановки для проекта полосы пропускания или полосы пропускания.

Типы данных: double

6-dB частота, заданная как разделенная запятой пара, состоящая из 'CutoffFrequency' и положительная скалярная величина. Значение частоты должно находиться в области значений Найквиста.

'CutoffFrequency1' - более низкая частота 6-dB для проекта полосы пропускания или полосы пропускания.

'CutoffFrequency2' - более высокая частота 6-dB для проекта полосы пропускания или полосы пропускания.

Типы данных: double

3-dB частота, заданная как разделенная запятой пара, состоящая из 'HalfPowerFrequency' и положительная скалярная величина. Значение частоты должно находиться в области значений Найквиста.

'HalfPowerFrequency1' - более низкая частота 3-dB для проекта полосы пропускания или полосы пропускания.

'HalfPowerFrequency2' - более высокая частота 3-dB для проекта полосы пропускания или полосы пропускания.

Типы данных: double

Ширина переходной области между полосой пропускания и полосой упора для трансформатора Гильберта, заданная как разделенная разделенными запятой парами, состоящая из 'TransitionWidth' и положительная скалярная величина.

Типы данных: double

Частоты отклика, заданные как разделенная разделенными запятой парами, состоящая из 'Frequencies' и вектор. Используйте эту переменную, чтобы перечислить частоты, на которых фильтр произвольной величины отклика имеет желаемые амплитуды. Частоты должны быть монотонно увеличены и лежать в области значений Найквиста. Первый элемент вектора должен быть либо 0, либо - fs/2, где fs - частота дискретизации, а его последний элемент должен быть fs/2. Если вы не задаете частоту дискретизации, designfilt использует значение по умолчанию 2 Гц.

Типы данных: double

Количество полос в многодиапазонном проекте, заданное как разделенная разделенными запятой парами, состоящая из 'NumBands' и положительный целочисленный скаляр не более 10.

Типы данных: double

Многополосные частоты отклика, заданные как разделенные запятыми пары, состоящие из 'BandFrequenciesi' и числовой вектор. 'BandFrequenciesi', где i проходит от 1 до NumBands, - вектор, содержащий частоты, на которых i-й полоса многодиапазонного проекта имеет желаемые значения, 'BandAmplitudesi'. NumBands может быть самое большее 10. Частоты должны лежать в области значений Найквиста и должны быть заданы в монотонно увеличивающемся порядке. Смежные полосы частот должны иметь одинаковую амплитуду при их соединении.

Типы данных: double

Ограничения величины

свернуть все

Неравномерность в полосе пропускания, заданная как разделенная запятой пара, состоящая из 'PassbandRipple' и положительная скалярная величина, выраженная в децибелах.

'PassbandRipple1' - нижняя полоса неравномерности в полосе пропускания для полосно-заграждающего проекта.

'PassbandRipple2' - более высокий диапазон неравномерности в полосе пропускания для полосно-заграждающего проекта.

Типы данных: double

Затухание в полосе задерживания, заданное как разделенная разделенными запятой парами, состоящая из 'StopbandAttenuation' и положительная скалярная величина, выраженная в децибелах.

'StopbandAttenuation1' - затухание в полосе задерживания нижней полосы для проекта полосы пропускания.

'StopbandAttenuation2' - более высокий диапазон затухания в полосе задерживания для полосно-пропускающего проекта.

Типы данных: double

Желаемые амплитуды отклика фильтра произвольной величины, заданные как разделенная разделенными запятой парами, состоящая из 'Amplitudes' и вектор. Выразите амплитуды в линейных модулях. Вектор должен иметь ту же длину, что и 'Frequencies'.

Типы данных: double

Мультидиапазонные амплитуды отклика, заданные как разделенные запятыми пары, состоящие из 'BandAmplitudesi' и числовой вектор. 'BandAmplitudesi', где i проходит от 1 до NumBands, является вектором, содержащим желаемые амплитуды в i-й полосе многодиапазонного проекта. NumBands может быть самое большее 10. Выразите амплитуды в линейных модулях. 'BandAmplitudesi' должны иметь ту же длину, что и 'BandFrequenciesi'. Смежные полосы частот должны иметь одинаковую амплитуду при их соединении.

Типы данных: double

Метод проекта

свернуть все

Метод проектирования, заданный как разделенная разделенными запятой парами, состоящая из 'DesignMethod' и вектор символов или строковый скаляр. Выбор метода проекта зависит от набора заданных вами ограничений по частоте и величине.

  • 'butter' проектирует фильтр БИХ Butterworth. Фильтры Баттерворта имеют плавную монотонную частотную характеристику, которая максимально плоская в полосе пропускания. Они жертвуют сходом крутизны для плоскостности.

  • 'cheby1' проектирует БИХ фильтр Чебышева I типа. Фильтры Чебышёва I типа имеют частотную характеристику, равновесную в полосе пропускания и максимально плоскую в полосе остановки. Их неравномерность в полосе пропускания увеличения с увеличением крутизны спуска.

  • 'cheby2' проектирует БИХ фильтр Чебышева типа II. Фильтры Чебышёва типа II имеют максимально плоскую частотную характеристику в полосе пропускания и равновесие в полосе остановки.

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

  • 'ellip' проектирует эллиптический БИХ. Эллиптические фильтры имеют частотную характеристику, которая равновесна как в полосе пропускания, так и в полосе упора.

  • 'equiripple' проектирует фильтр конечной импульсной характеристики equiripple с использованием алгоритма Паркса-Макклеллана. Фильтры Equiripple имеют частотную характеристику, которая минимизирует максимальную величину пульсации во всех полосах.

  • 'freqsamp' проектирует конечную импульсную характеристику фильтр с произвольной амплитудной характеристикой путем дискретизации частотной характеристики равномерно и взятия обратного преобразования Фурье.

  • 'kaiserwin' проектирует фильтр конечной импульсной характеристики с помощью метода Окна Кайзера. Метод обрезает импульсную характеристику идеального фильтра и использует окно Кайзера, чтобы ослабить получившиеся усеченные колебания.

  • 'ls' проектирует конечная импульсная характеристика с использованием методом наименьших квадратов. Метод минимизирует расхождение между заданной произвольной кусочно-линейной функцией и характеристикой величины фильтра.

  • 'maxflat' проектирует максимально плоский конечная импульсная характеристика. Эти фильтры имеют гладкую монотонную частотную характеристику, которая максимально плоская в полосе пропускания.

  • 'window' использует приближение методом наименьших квадратов, чтобы вычислить коэффициенты фильтра, а затем сглаживает импульсную характеристику с помощью 'Window'.

Типы данных: char | string

Опции метода проекта

свернуть все

Окно, заданное как разделенная разделенными запятой парами, состоящая из 'Window' и вектор длины N + 1, где N является порядком фильтра. 'Window' можно также использовать в паре с именем окна или указателем на функцию, которая задает функцию, используемую для генерации окна. Любая такая функция должна взять N + 1 как первый вход. Дополнительные входы могут быть переданы путем определения массива ячеек. По умолчанию 'Window' является пустым вектором для 'freqsamp' метод и @hamming проекта для 'window' метод проекта.

Список доступных окон см. в разделе Windows.

Пример: 'Window',hann(N+1) и 'Window',(1-cos(2*pi*(0:N)'/N))/2 оба задают окно Ханна для использования с фильтром порядка N.

Пример: 'Window','hamming' задает окно Хэмминга необходимого порядка.

Пример: 'Window',@mywindow позволяет вам задать свою собственную оконную функцию.

Пример: 'Window',{@kaiser,0.5} задает окно Кайзера необходимого порядка с параметром формы 0,5.

Типы данных: double | char | string | function_handle | cell

Полоса, точно соответствующий, задаётся как разделенная разделенными запятой парами, состоящая из 'MatchExactly' и любой из них 'stopband', 'passband', или 'both'. 'both' доступен только для метода эллиптического проекта, где это значение по умолчанию. 'stopband' является значением по умолчанию для 'butter' и 'cheby2' методы. 'passband' является значением по умолчанию для 'cheby1'.

Типы данных: char | string

Смещение полосы пропускания, заданное как разделенная разделенными запятой парами, состоящая из 'PassbandOffset' и положительная скалярная величина, выраженная в децибелах. 'PassbandOffset' задает коэффициент усиления фильтра в полосе пропускания.

Пример: 'PassbandOffset',0 приводит к фильтру с единичным усилением в полосе пропускания.

Пример: 'PassbandOffset',2 в результате получают фильтр с коэффициентом усиления полосы пропускания 2 дБ или 1,259.

Типы данных: double

Шкала полосы пропускания, заданное как разделенная разделенными запятой парами, состоящая из 'ScalePassband' и логический скаляр. Когда вы задаете 'ScalePassband' на trueполосу пропускания масштабируют после оконной обработки так, чтобы фильтр имел единичный коэффициент усиления на нулевой частоте.

Пример: 'Window',{@kaiser,0.1},'ScalePassband',true помогают задать фильтр, характеристика величины которого на нулевой частоте составляет в точности 0 дБ. Это не тот случай, когда вы задаете 'ScalePassband',false. Чтобы проверить, визуализируйте фильтр с fvtool и масштабирование.

Типы данных: logical

Нулевая фаза, заданная как разделенная разделенными запятой парами, состоящая из 'ZeroPhase' и логический скаляр. Когда вы задаете 'ZeroPhase' на true, нулевая фазовая характеристика полученного фильтра всегда положительная. Это позволяет вам выполнить спектральное факторизация на результате и получить от него фильтр с минимальной фазой.

Типы данных: logical

Вес оптимизации полосы пропускания, заданный как разделенная разделенными запятой парами, состоящая из 'PassbandWeight' и положительная скалярная величина.

'PassbandWeight1' - вес оптимизации полосы пропускания нижней полосы для полосы пропускания конечной импульсной характеристики проекта.

'PassbandWeight2' - вес оптимизации полосы пропускания более высокой полосы для полосы пропускания конечной импульсной характеристики проекта.

Типы данных: double

Вес оптимизации пробки, заданный как разделенная разделенными запятой парами, состоящая из 'StopbandWeight' и положительная скалярная величина.

'StopbandWeight1' - вес оптимизации полосы стопора нижней полосы для полосы пропускания конечной импульсной характеристики проекта.

'StopbandWeight2' - оптимизационный вес полосы стопора с более высоким диапазоном для полосы пропускания конечной импульсной характеристики проекта.

Типы данных: double

Оптимизационные веса, заданные как разделенная разделенными запятой парами, состоящая из 'Weights' и положительная скалярная величина или вектор той же длины, что и 'Amplitudes'.

Типы данных: double

Многодиапазонные веса, заданные как разделенные запятыми пары, состоящие из 'BandWeightsi' и набор положительных скалярных величин или векторов. 'BandWeightsi', где i проходит от 1 до NumBands, является скаляром или вектором, содержащим оптимизационные веса i-го полосы многодиапазонного проекта. Если задан как вектор, 'BandWeightsi' должны иметь ту же длину, что и 'BandAmplitudesi'.

Типы данных: double

Частота дискретизации

свернуть все

Частота дискретизации, заданная как разделенная разделенными запятой парами, состоящая из 'SampleRate' и положительная скалярная величина, выраженная в герцах. Чтобы работать с нормированными частотами, установите 'SampleRate' в 2, или просто опускать его.

Типы данных: double

Выходные аргументы

свернуть все

Цифровой фильтр, возвращенный как digitalFilter объект.

Подробнее о

свернуть все

Помощник по созданию фильтра

Если вы задаете неполный или несогласованный набор расчётных параметров, designfilt предлагает открыть ассистента по созданию фильтра.

(В описании аргумента для resp существует полный список действительных наборов спецификаций для всех доступных типов отклика.)

Ассистент ведет себя по-разному, если вы вызываете designfilt в командной строке или в рамках скрипта или функции.

Создание фильтра в командной строке

Выдается сигнал, дискретизированный с частотой дискретизации 2 кГц. Вас просят спроектировать lowpass конечная импульсная характеристика, который подавляет частотные составляющие выше 650 Гц. «Частота отсечения» звучит как хороший кандидат для параметра спецификации. В командной строке MATLAB вы вводите следующее.

Fsamp = 2e3;
Fctff = 650;
dee = designfilt('lowpassfir','CutoffFrequency',Fctff, ...
                 'SampleRate',Fsamp);

Что-то кажется неладным, потому что это диалоговое окно появляется на вашем экране.

Вы нажимаете Yes и получаете новое диалоговое окно, которое предлагает сгенерировать код. Вы видите, что переменные, которые вы определили ранее, были вставлены, где ожидалось.

Изучив некоторые предлагаемые опции, вы решите протестировать исправленный фильтр. Вы нажимаете OK и получаете следующий код в командной строке.

dee = designfilt('lowpassfir', 'FilterOrder', 10, ...
                 'CutoffFrequency', Fctff, 'SampleRate', Fsamp);

Ввод имени фильтра повторяет информацию из диалогового окна.

dee
dee = 
 digitalFilter with properties:

    Coefficients: [1x11 double]
   Specifications:
    FrequencyResponse: 'lowpass'
      ImpulseResponse: 'fir'
           SampleRate: 2000
          FilterOrder: 10
      CutoffFrequency: 650
         DesignMethod: 'window'
 Use fvtool to visualize filter
 Use filter function to filter data

Вы вызываете FVTool и получаете график deeчастотная характеристика.

fvtool(dee)

Срез выглядит не особенно остро. Для большинства частот ответ выше 40 дБ. Вы помните, что у ассистента была опция задать «ограничение амплитуды», называемое «ослабление полосы остановки». Откройте ассистента, позвонив designfilt с именем фильтра в качестве входов.

designfilt(dee)

Нажмите на Magnitude constraints раскрывающееся меню и выберите Passband ripple and stopband attenuation. Вы видите, что метод проекта изменился с Window на FIR constrained least-squares. Значение по умолчанию для ослабления составляет 60 дБ, что выше 40. Щелкните OK и визуализируйте полученный фильтр.

dee = designfilt('lowpassfir', 'FilterOrder', 10, ...
                 'CutoffFrequency', Fctff, ...
                 'PassbandRipple', 1, 'StopbandAttenuation', 60, ...
                 'SampleRate', Fsamp);
fvtool(dee)

Срез все еще не выглядит резким. Затухание действительно составляет 60 дБ, но для частот выше 900 Гц.

Снова активируйте designfilt с вашим фильтром в качестве входных данных.

designfilt(dee)

Помощник появляется снова.

Чтобы сузить различие между принятыми и отклоненными частотами, увеличьте порядок фильтра или измените Frequency constraints от Cutoff (6dB) frequency на Passband and stopband frequencies. Если вы измените порядок фильтра с 10 на 50, вы получите более резкий фильтр.

dee = designfilt('lowpassfir', 'FilterOrder', 50, ...
                 'CutoffFrequency', 650, ...
                 'PassbandRipple', 1, 'StopbandAttenuation', 60, ...
                 'SampleRate', 2000);
fvtool(dee)

Небольшие эксперименты показывают, что можно получить подобный фильтр, установив частоты полосы пропускания и полосы остановки на 600 Гц и 700 Гц соответственно.

dee = designfilt('lowpassfir', 'PassbandFrequency', 600, ...
                 'StopbandFrequency', 700, ...
                 'PassbandRipple', 1, 'StopbandAttenuation', 60, ...
                 'SampleRate', 2000);
fvtool(dee)

Создание фильтра Assistant в скрипте или функции

Выдается сигнал, дискретизированный с частотой дискретизации 2 кГц. Вас просят спроектировать фильтр высокой частоты, который останавливает частоты ниже 700 Гц. Вам плевать на фазу сигнала, и нужно работать с фильтром низкого порядка. Таким образом, БИХ представляется адекватным. Вы не уверены, какой порядок фильтра лучше всего, поэтому вы пишете функцию, которая принимает порядок как вход. Откройте РЕДАКТОРА MATLAB и создайте файл.

function dataOut = hipassfilt(N,dataIn)
hpFilter = designfilt('highpassiir','FilterOrder',N);
dataOut = filter(hpFilter,dataIn);
end

Чтобы протестировать свою функцию, создайте сигнал, состоящий из двух синусоидов с частотами 500 и 800 Гц и сгенерируйте выборки для 0,1 с. Фильтр 5-го порядка кажется разумным как исходное предположение. Создайте скрипт под названием driveHPfilt.m.

% script driveHPfilt.m
Fsamp = 2e3;
Fsm = 500;
Fbg = 800;
t = 0:1/Fsamp:0.1;
sgin = sin(2*pi*Fsm*t)+sin(2*pi*Fbg*t);
Order = 5;
sgout = hipassfilt(Order,sgin);

Когда вы запускаете скрипт в командной строке, вы получаете сообщение об ошибке.

Сообщение об ошибке дает вам выбор открытия помощника для исправления кода MATLAB. Нажмите Click here чтобы получить помощника по созданию фильтра на экране.

Вы видите задачу: Вы не указали ограничение частоты. Вы также забыли установить частоту дискретизации. После экспериментов вы обнаруживаете, что можете задать Frequency units как Hz, Passband frequency равен 700 Гц, и Input Fs равен 2000 Гц. Значение Design method изменяется с Butterworth на Chebyshev type I. Вы нажимаете OK и получаете следующее.

Помощник правильно определил файл, куда вы звоните designfilt. Щелкните Yes, чтобы принять изменение. Функция имеет исправленный код MATLAB.

function dataOut = hipassfilt(N,dataIn)
% hpFilter = designfilt('highpassiir','FilterOrder',N);
hpFilter = designfilt('highpassiir', 'FilterOrder', N, ...
                'PassbandFrequency', 700, 'PassbandRipple', 1, ...
                'SampleRate', 2000);
dataOut = filter(hpFilter,dataIn);
end

Теперь можно запустить скрипт с различными значениями порядка фильтра. В зависимости от ограничений проекта, можно изменить набор спецификаций.

Настройки помощника по созданию фильтра

Можно задать designfilt никогда не предлагать помощника по созданию фильтра. Это действие устанавливает выбор MATLAB, которое можно отменить с setpref:

  • Использование setpref('dontshowmeagain','filterDesignAssistant',false) быть предложенным помощником каждый раз. С помощью этой команды можно снова получить помощника после его отключения.

  • Использование setpref('dontshowmeagain','filterDesignAssistant',true) отключение помощника на постоянной основе. Можно также щелкнуть Do not show this message again в начальном диалоговом окне.

Можно задать designfilt всегда исправлять неисправные спецификации, не спрашивая. Это действие устанавливает выбор MATLAB, которое можно отменить при помощи setpref:

  • Использование setpref('dontshowmeagain','filterDesignAssistantCodeCorrection',false) иметь designfilt исправить код MATLAB, не запрашивая подтверждения. Можно также щелкнуть Always accept в диалоговом окне подтверждения.

  • Использование setpref('dontshowmeagain','filterDesignAssistantCodeCorrection',true) для обеспечения того, чтобы designfilt исправляет код MATLAB только тогда, когда вы подтверждаете, что хотите внести изменения. С помощью этой команды можно отменить эффект клика по Always accept в диалоговом окне подтверждения.

Поиск и устранение проблем

Существуют некоторые образцы, в которых, учитывая недопустимый набор спецификаций, designfilt не предлагает помощник по созданию фильтра ни через диалоговое окно, ни через ссылку в сообщении об ошибке.

  • Вам не предлагается помощник, если вы используете оценку секции кода, либо из MATLAB Toolstrip, либо путем нажатия Ctrl+Enter. (Смотрите Разделение файла на Секции кода для получения дополнительной информации.)

  • Если код содержит несколько вызовов для designfilt, по крайней мере, один из этих вызовов является неправильным, и

    • Вы вставляете код в командную строку и выполняете его нажатием Enter.

    • Вы выбираете код в редакторе и выполняете его нажатием F9.

  • Вам не предлагают ассистента, если вы запускаете designfilt использование анонимной функции. (Для получения дополнительной информации см. раздел Анонимные функции.) Для примера этот вход предлагает помощника.

    d = designfilt('lowpassfir','CutoffFrequency',0.6)
    Этот вход не вводится.
    myFilterDesigner = @designfilt;
    d = myFilterDesigner('lowpassfir','CutoffFrequency',0.6)

  • Вам не предлагают ассистента, если вы запускаете designfilt использование eval. Для примера этот вход предлагает помощника.

    d = designfilt('lowpassfir','CutoffFrequency',0.6)
    Этот вход не вводится.
    myFilterDesigner = ...
        sprintf('designfilt(''%s'',''CutoffFrequency'',%f)', ...
                            'lowpassfir',0.6);
    d = eval(myFilterDesigner)

Помощнику по созданию фильтра требуется Java® программное обеспечение и рабочий стол MATLAB для запуска. Он не поддерживается, если вы запускаете MATLAB с -nojvm, -nodisplay, или -nodesktop опции.

Введенный в R2014a