firgr

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

Синтаксис

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 линейный фильтр фазы FIR, который имеет наилучшее приближение к желаемой частотной характеристике, описанной 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 является одним из 'minorder', 'mineven' или 'minodd', неоднократно разрабатывает фильтры, пока фильтр минимального заказа, как задано в m, который соответствует спецификациям, не найден. r является вектором, содержащим пиковую пульсацию на диапазон частот. Необходимо задать r. Когда вы задаете 'mineven' или 'minodd', минимум даже или нечетный фильтр порядка найдены.

b = firgr({m,ni},f,a,r) то, где m является одним из 'minorder', 'mineven' или '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'}) разрабатывает фильтр highpass с усилением в 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', чтобы разработать максимальный фильтр фазы FIR.

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'});

Разработайте фильтр highpass, усиление которого в 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'});

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

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');

Ссылки

Shpak, Д.Дж. и А. Антонайоу, “Обобщенный метод Remez для проекта КИХ цифровые фильтры”, IEEE® Trans. Схемы и Системы, стр 161-174, февраль 1990.

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

Смотрите также

| | | | | | | |

Введенный в R2011a