Фильтр конечной импульсной характеристики Паркса-Макклеллана
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'})
проектирует высокочастотный фильтр с коэффициентом усиления 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 | Желаемый ответ на |
res.wt | Веса на |
res.h | Фактическая частотная характеристика на частотной сетке |
res.error | Ошибка в каждой точке (желаемая характеристика - фактическая характеристика) на частотной сетке |
res.iextr | Вектор индексов в |
res.fextr | Вектор внешних частот |
res.order | Порядок фильтрации |
res.edgecheck | Проверка аномалии переходной области. Один элемент на ребро полосы. Значения элемента имеют следующие значения: 1 = OK, 0 = вероятная аномалия переходной области, -1 = ребро не проверен. Вычисляется, когда вы задаете |
res.iterations | Количество |
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
.
Шпак, Д.Ж. и А. Антониу, «Обобщенный метод Ремеза для проекта конечной импульсной характеристики цифровых фильтров», IEEE® Trans. Circuits and Systems, pp. 161-174, Feb. 1990.