exponenta event banner

firgr

Фильтр FIR Паркса-Макклеллана

Синтаксис

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 - алгоритм конструирования фильтров minimax, используемый для конструирования следующих типов реальных фильтров FIR:

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

    • Тип 1 четный, симметричный

    • Тип 2 нечетный, симметричный

    • Тип 3 четный, антисимметричный

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

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

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

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

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

  • Максимальная рябь

  • Ограниченная пульсация

  • Одноточечная полоса (выемка и пик)

  • Форсированный выигрыш

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

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

b = firgr(n,f,a,'hilbert') и b = firgr(n,f,a,'differentiator') проектирование трансформаторов и дифференциаторов FIR Hilbert. Дополнительные сведения о проектировании этих фильтров см. в разделе firpm в руководстве пользователя панели инструментов обработки сигналов.

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'}) создает фильтр верхних частот с коэффициентом усиления 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 для фильтров FIR типов 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 проектирует симметричные (четные) фильтры FIR. '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.

Примеры

свернуть все

Сконструируйте фильтр FIR с двумя однополосными вырезами 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.

Ссылки

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

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

.

См. также

| | | | | | | |

Представлен в R2011a