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 КИХ-фильтр линейной фазы, который имеет наилучшее приближение к желаемой частотной характеристике, описанной 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, p2pn быть переданным функции отклика 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