firgr

Фильтр конечной импульсной характеристики Паркса-Макклеллана

Синтаксис

b = firgr(n,f,a,w)
b = firgr(n,f,a,'hilbert')
b = firgr(m,f,a,r),
b = firgr({m,ni},f,a,r)
b = firgr(n,f,a,w,e)
b = firgr(n,f,a,s)
b = firgr(n,f,a,s,w,e)
b = firgr(...,'1')
b = firgr(...,'minphase')
b = firgr(..., 'check')
b = firgr(...,{lgrid}),
[b,err] = firgr(...)
[b,err,res] = firgr(...)
b = firgr(n,f,fresp,w)
b = firgr(n,f,{fresp,p1,p2,...},w)
b = firgr(n,f,a,w)

Описание

firgr - алгоритм создания минимаксного фильтра, который вы используете для разработки следующих типов реальных конечных импульсных характеристик:

  • Типы 1-4 линейной фазы:

    • Тип 1 четный порядок, симметричный

    • Тип 2 нечетный порядок, симметричный

    • Тип 3 ровный порядок, антисимметричный

    • Тип 4 нечетный порядок, антисимметричный

  • Минимальная фаза

  • Максимальная фаза

  • Минимальный порядок (четный или нечетный)

  • Дополнительная рябь

  • Максимальная пульсация

  • Ограниченная рябь

  • Одноточечная полоса (надрез и пик)

  • Принудительный коэффициент усиления

  • Произвольные фильтры кривой частотной характеристики формы

b = firgr(n,f,a,w) возвращает длину n+ 1 линейный КИХ-фильтр фазы, который имеет лучшее приближение к желаемой частотной характеристике, описанной f и a в минимаксном смысле. w - вектор весов, по одному на полосу. Когда опускаешь wвсе полосы весятся одинаково. Для получения дополнительной информации о входных параметрах см. firpm в Signal Processing Toolbox™ Руководства пользователя.

b = firgr(n,f,a,'hilbert') и b = firgr(n,f,a,'differentiator') проект конечной импульсной характеристики трансформаторов Гильберта и дифференциаторов. Для получения дополнительной информации о разработке этих фильтров см. firpm в Руководстве пользователя Signal Processing Toolbox.

b = firgr(m,f,a,r), где m является одним из 'minordermineven'или' minodd', проектирует фильтры неоднократно до фильтра минимального порядка, как указано в m, который соответствует спецификациям найден. r - вектор, содержащий пиковую пульсацию на полосу. Вы должны задать r. Когда вы задаете 'mineven'или' minodd', найден минимальный фильтр четного или нечетного порядка.

b = firgr({m,ni},f,a,r) где m является одним из 'minordermineven'или' minodd', использует ni как начальная оценка порядка фильтра. ni опционально для типичных созданий фильтра, но это должно быть задано для проектов, в которых firpmord не может использоваться, например, при разработке дифференциаторов или трансформаторов Гильберта.

b = firgr(n,f,a,w,e) задает независимые ошибки приближения для различных полос. Используйте этот синтаксис для разработки дополнительных фильтров пульсации или максимальной пульсации. Эти фильтры имеют интересные свойства, такие как минимальная ширина перехода. e - массив ячеек из векторов символов, задающий используемые ошибки приближения. Его длина должна равняться количеству полос. Записи e должно быть в форме 'e#'где # указывает, какую ошибку приближения использовать для соответствующей полосы значений. Для примера, когда e = {'e1','e2','e1'}первая и третья полосы используют ту же ошибку приближения 'e1' и вторая полоса использует другой 'e2'. Обратите внимание, что, когда все полосы используют одну и ту же ошибку приближения, например {'e1','e1','e1',...}, это эквивалентно опусканию e, как в b = firgr(n,f,a,w).

b = firgr(n,f,a,s) используется для разработки фильтров со специальными свойствами в определенных частотных точках. s является массивом ячеек из векторов символов и должна быть такой же длины, как и f и a. Записи s должен быть одним из:

  • 'n' - нормальная частотная точка.

  • 's' - одноточечная полоса. Частота «полоса» задается одной точкой. Соответствующий коэффициент усиления в этой частотной точке должен быть задан в a.

  • 'f' - принудительная частотная точка. Заставляет коэффициент усиления в заданной полосе частот быть заданным значением.

  • 'i' - неопределенная частотная точка. Используйте этот аргумент, когда смежные полосы упираются друг в друга (без переходной области).

Например, следующая команда проектирует полосно-заграждающий фильтр с нулевыми одноточечными полосами упора (узлами) в 0,25 и 0,55.

b = firgr(42,[0 0.2 0.25 0.3 0.5 0.55 0.6 1],...
[1 1 0 1 1 0 1 1],{'n' 'n' 's' 'n' 'n' 's' 'n' 'n'})

b = firgr(82,[0 0.055 0.06 0.1 0.15 1],[0 0 0 0 1 1],...{'n' 'i' 'f' 'n' 'n' 'n'}) проектирует высокочастотный фильтр с коэффициентом усиления 0,06, принудительно равным нулю. Ребро полосы в точке 0,055 неопределено, так как первые две полосы действительно касаются. Другие ребра полосы нормальны.

b = firgr(n,f,a,s,w,e) задает веса и независимые ошибки приближения для фильтров со специальными свойствами. Веса и свойства включены в векторы w и e. Иногда, вам может потребоваться использовать независимые ошибки приближения, чтобы получить проекты с принудительными значениями для сходимости. Для примера,

b = firgr(82,[0 0.055 0.06 0.1 0.15 1], [0 0 0 0 1 1],... 
{'n' 'i' 'f' 'n' 'n' 'n'}, [10 1 1] ,{'e1' 'e2' 'e3'});

b = firgr(...,'1') проектирует фильтр типа 1 (симметричный четного порядка). Можно задать тип 2 (симметричный нечетный порядок), тип 3 (антисимметричный четный порядок) и тип 4 (антисимметричный нечетный порядок) фильтры. Обратите внимание, что ограничения применяются к a при f = 0 или f = 1 для конечной импульсной характеристики типов фильтров 2, 3 и 4.

b = firgr(...,'minphase') проектирует фильтр с минимальной конечной импульсной характеристики фазой. Можно использовать аргумент 'maxphase' для разработки максимальной фазы конечной импульсной характеристики фильтра.

b = firgr(..., 'check') возвращает предупреждение, когда существуют потенциальные аномалии переходной области.

b = firgr(...,{lgrid}), где {lgrid} является скалярным массивом ячеек. Значение скаляра управляет плотностью частотной сетки, задавая количество выборок, используемых вдоль оси частоты.

[b,err] = firgr(...) возвращает невзвешенные величины ошибки приближения. err содержит один элемент для каждой независимой ошибки приближения, возвращаемой функцией.

[b,err,res] = firgr(...) возвращает структуру res содержащий необязательные результаты, вычисленные firgr. res содержит следующие поля.

Структурное поле

Содержание

res.fgrid

Вектор, содержащий частотную сетку, используемую в создании фильтра

res.des

Желаемый ответ на fgrid

res.wt

Веса на fgrid

res.h

Фактическая частотная характеристика на частотной сетке

res.error

Ошибка в каждой точке (желаемая характеристика - фактическая характеристика) на частотной сетке

res.iextr

Вектор индексов в fgrid внешних частот

res.fextr

Вектор внешних частот

res.order

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

res.edgecheck

Проверка аномалии переходной области. Один элемент на ребро полосы. Значения элемента имеют следующие значения: 1 = OK, 0 = вероятная аномалия переходной области, -1 = ребро не проверен. Вычисляется, когда вы задаете 'check' вход в синтаксисе функции.

res.iterations

Количество s итерации для оптимизации

res.evals

Количество вычислений функции для оптимизации

firgr является также «функцией функции», что позволяет вам записать функцию, которая задает желаемую частотную характеристику.

b = firgr(n,f,fresp,w) возвращает длину КИХ-фильтра N + 1, который имеет лучшее приближение к желаемой частотной характеристике, возвращаемой определяемой пользователем функцией fresp. Используйте следующую firgr синтаксис вызова fresp:

[dh,dw] = fresp(n,f,gf,w)

где:

  • fresp определяет функцию, которую вы используете, чтобы задать необходимую частотную характеристику фильтра.

  • n - порядок фильтра.

  • f - вектор ребер полосы частот, который должен появляться монотонно между 0 и 1, где 1 - половина частоты дискретизации. Частотные полосы диапазона f(k) на f(k+1) для k нечетный. Интервалы f(k+1) на f(k+2) для k нечетными являются «переходные полосы» или «не заботятся» области во время оптимизации.

  • gf является вектором точек сетки, которые были выбраны для каждого заданной полосы частот firgr, и определяет частоты, на которых firgr оценивает функцию отклика.

  • w является вектором действительных, положительных весов, по одному на полосу, для использования во время оптимизации. w опционально при вызове firgr. Если вы не задаете w, оно устанавливается в единицу взвешивания перед передачей в fresp.

  • dh и dw являются желаемыми векторами частотной характеристики и веса оптимизации, оцениваемыми на каждой частоте в сетке gf.

firgr включает предопределенную функцию частотной характеристики с именем 'firpmfrf2'. Можно написать свой, основанный на более простом 'firpmfrf'. Смотрите справку для private/firpmfrf для получения дополнительной информации.

b = firgr(n,f,{fresp,p1,p2,...},w) задает необязательные аргументы p1, p2..., pn передается в функцию отклика fresp.

b = firgr(n,f,a,w) является синонимом b = firgr(n,f,{'firpmfrf2',a},w), где a - вектор, содержащий указанные амплитуды отклика на каждом ребре полосы f. По умолчанию firgr проектирует симметричные (четные) конечная импульсная характеристика. 'firpmfrf2' является предопределенной функцией частотной характеристики. Если вы не задаете свою собственную функцию частотной характеристики (fresp переменная), firgrиспользует ' firpmfrf2'.

b = firgr(...,'h') и b = firgr(...,'d') проектирование антисимметричных (нечетных) фильтров. Когда вы опускаете 'h' или 'd' аргументы из firgr синтаксис команды, каждая функция частотной характеристики fresp может сказать firgr для разработки четного или нечетного фильтра. Используйте синтаксис команды sym = fresp('defaults',{n,f,[],w,p1,p2,...}).

firgr ожидает fresp для возврата sym = 'even' или sym = 'odd'. Если fresp не поддерживает этот вызов, firgr принимает четную симметрию.

Для получения дополнительной информации о входных параметрах, которые нужно firgr, см. firpm.

Примеры

свернуть все

Спроектируйте конечная импульсная характеристика с двумя однополосными надрезами на 0,25 и 0,55.

b1 = firgr(42,[0 0.2 0.25 0.3 0.5 0.55 0.6 1],[1 1 0 1 1 0 1 1],... 
{'n' 'n' 's' 'n' 'n' 's' 'n' 'n'});

Спроектируйте фильтр высокой частоты, коэффициент усиления которого в 0,06 принудительно равен нулю. Коэффициент усиления в 0,055 неопределен, поскольку он должен упираться в полосу.

b2 = firgr(82,[0 0.055 0.06 0.1 0.15 1],[0 0 0 0 1 1],...
{'n' 'i' 'f' 'n' 'n' 'n'});

Спроектируйте второй фильтр высокой частоты с принудительными значениями и независимыми ошибками приближения.

b3 = firgr(82,[0 0.055 0.06 0.1 0.15 1], [0 0 0 0 1 1], ...
{'n' 'i' 'f' 'n' 'n' 'n'}, [10 1 1] ,{'e1' 'e2' 'e3'});

Используйте инструмент визуализации фильтра, чтобы просмотреть результаты фильтров.

fvtool(b1,1,b2,1,b3,1)
legend('Filter b1','Filter b2','Filter b3');

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 3 objects of type line. These objects represent Filter b1, Filter b2, Filter b3.

Ссылки

Шпак, Д.Ж. и А. Антониу, «Обобщенный метод Ремеза для проекта конечной импульсной характеристики цифровых фильтров», IEEE® Trans. Circuits and Systems, pp. 161-174, Feb. 1990.

Расширенные возможности

.

См. также

| | | | | | | |

Введенный в R2011a