Документация Engee

firgr

Проектирование обобщенного КИХ-фильтра Ремеза.

Библиотека

EngeeDSP

Синтаксис

Вызов функции

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

  • b,err,res = firgr(m,f,a,r) — повторно проектирует фильтры до тех пор, пока не будет найден фильтр минимального порядка, указанного в m и соответствующий аргументам f и a. Аргумент m может принимать одно из значений: "minorder", "mineven" или "minodd". Аргумент r — это вектор, содержащий пиковую пульсацию для каждой полосы частот, его необходимо задать. При указании "mineven" или "minodd" функция находит фильтр минимального четного или нечетного порядка.

  • b,err,res = firgr((m,ni),f,a,r) — в качестве начальной оценки порядка фильтра используется ni. Аргумент ni не является обязательным для типовых конструкций фильтров, но его необходимо указывать для конструкций, в которых невозможно использовать firpmord, например при проектировании дифференциаторов или преобразователей Гильберта.

  • b,err,res = firgr(n,f,a,w,e) — задает независимые ошибки аппроксимации для разных полос. Используйте этот синтаксис для проектирования фильтров с дополнительной пульсацией или максимальной пульсацией. Эти фильтры обладают интересными свойствами, такими как минимальная ширина перехода. Аргумент e — это вектор строк, задающий ошибки аппроксимации, которые следует использовать. Его длина должна равняться количеству полос.

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

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

    b,err,res = 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,err,res = firgr(___,type) — проектирует фильтр, тип которого задается в аргументе type. Аргумент type задается как "1" — симметричный фильтр четного порядка, "2" — симметричный фильтр нечетного порядка, "3" — антисимметричный фильтр четного порядка или "4" — антисимметричный фильтр нечетного порядка. Обратите внимание, что для КИХ-фильтров типов "2", "3" и "4" существуют ограничения по значениям амплитуды a. Для фильтров типов "2" и "3" амплитуда должна быть равна 0 на частотах f = 0 и f = 1, а для фильтра типа "4" амплитуда должна быть равна 0 на частоте f = 0.

  • b,err,res = firgr(___,mp) — проектирует КИХ-фильтр с минимальной или максимальной фазой в зависимости от значения аргумента mp.

  • b,err,res = firgr(___,"check") — возвращает предупреждение при обнаружении аномалии переходной зоны.

  • b,err,res = firgr(___,(lgrid,)) — задает плотность частотной сетки (lgrid,) в виде количества отсчетов, используемых вдоль оси частот.

  • b,err,res = firgr(___,hd) — проектирует фильтр, четность которого определяется аргументом hd.

Аргументы

Входные аргументы

# n — порядок фильтра
скаляр

Details

Порядок фильтра, заданный как целое число, не меньше 3.

Типы данных

Int64

# f — нормированные частоты
вектор

Details

Нормированные частотные точки, заданные как вектор вещественных значений. Значение аргумента должно находиться в диапазоне [0, 1], где 1 соответствует частоте Найквиста. Длина вектора f должна быть четной. Частоты должны быть упорядочены по возрастанию.

Типы данных

Float64

# a — желаемые амплитуды на указанных точках частот
вектор

Details

Желаемые амплитуды в точках, указанных в f, заданные как вектор. Векторы f и a должны иметь одинаковую длину. Длина a должна быть четной.

Типы данных

Float64

# w — коэффициенты аппроксимации внутри полос частот
вектор

Details

Весовые коэффициенты, используемые для корректировки аппроксимации в каждой частотной полосе, заданные как вектор вещественных значений. Длина w составляет половину длины f и a, поэтому на каждую полосу приходится ровно один вес.

Типы данных

Float64

# ftype — тип фильтра
"hilbert" | "differentiator"

Details

Тип фильтра для линейно-фазовых фильтров с нечетной симметрией (тип III и тип IV), заданный одним из следующих значений:

  • "hilbert" — коэффициенты на выходе в b подчиняются соотношению . К этому классу фильтров относится преобразователь Гильберта, который имеет заданную амплитуду, равную 1, во всей полосе частот.

    Например,

    b = firgr(30,[0.1 0.9],[1 1],"hilbert");

    проектирует приближенный КИХ-преобразователь Гильберта длиной 31.

  • "differentiator" — для полос с ненулевой амплитудой фильтр взвешивает погрешность с коэффициентом , так что погрешность на низких частотах значительно меньше, чем на высоких. Для КИХ-дифференциаторов, амплитудная характеристика которых пропорциональна частоте, эти фильтры минимизируют максимальную относительную погрешность (максимальное значение отношения погрешности к желаемой амплитуде).

Типы данных

String

# m — тип задания минимального порядка фильтра
"minorder" | "mineven" | "minodd"

Details

Тип задания минимального порядка фильтра, заданный как "minorder", "mineven" или "minodd". При указании "mineven" или "minodd" функция проектирует фильтр минимального четного или минимального нечетного порядка.

Типы данных

String

# type — номер типа фильтра
"1" | "2" | "3" | "4"

Details

Тип фильтра, заданный одним из следующих значений:

  • "1" — симметричный фильтр четного порядка;

  • "2" — симметричный фильтр нечетного порядка;

  • "3" — антисимметричный фильтр четного порядка;

  • "4" — антисимметричный фильтр нечетного порядка.

Типы данных

String, Char

# mp — выбор между фильтром с минимальной или максимальной фазой
"minphase" | "maxphase"

Details

Выбор между фильтром с минимальной "minphase" или максимальной "maxphase" фазой.

Типы данных

String

# r — пиковые пульсации внутри полос частот
вектор

Details

Пиковые пульсации внутри полос частот, заданные как вектор вещественных значений. Длина r составляет половину длины f и a, поэтому на каждую полосу приходится одно значение пиковой пульсации.

Типы данных

Float64

# ni — начальная оценка порядка фильтра
скаляр

Details

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

Типы данных

Int64

# e — независимые ошибки аппроксимации для полос частот
вектор | кортеж

Details

Независимые ошибки аппроксимации, используемые для разных полос, заданные как вектор строк или кортеж. Длина e должна равняться количеству полос. Элементы e должны иметь вид "e#", где # указывает, какую ошибку аппроксимации следует использовать для соответствующей полосы. Например, когда e = ["e1","e2","e1"], первая и третья полоса используют одну и ту же ошибку аппроксимации "e1", а вторая полоса — другую "e2". Когда все полосы используют одну и ту же ошибку аппроксимации, например ["e1","e1","e1",…​], это эквивалентно пропуску e, как в синтаксисе b,err,res = firgr(n,f,a,w).

Типы данных

String

# s — спецификация точек частот
вектор | кортеж

Details

Особые свойства в определенных точках частоты, заданные как вектор или кортеж символов. Аргумент s должен иметь ту же длину, что и f и a. Элементы s должны иметь одно из следующих значений:

  • 'n' — обычная частотная точка.

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

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

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

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

b,err,res = 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 является неопределенным, поскольку первые две полосы фактически соприкасаются. Остальные края полос являются нормальными.

b,err,res = firgr(82,[0 0.055 0.06 0.1 0.15 1],[0 0 0 0 1 1],['n' 'i' 'f' 'n' 'n' 'n'])
Типы данных

String, Char

# lgrid — плотность частотной сетки
кортеж

Details

Управляет плотностью частотной сетки, которая имеет примерно (lgrid*n)/(2*bw) частотных точек, где bw — доля общего интервала полосы частот [0, 1], покрываемого f. Чем выше значение lgrid, тем точнее фильтр приближается к эталонному фильтру с равномерными пульсациями, но такие вычисления занимают больше времени. Значение по умолчанию 16 — это минимальное значение, которое следует задавать для lgrid.

Типы данных

Int64

# hd — четность фильтра
"h" | "d" | 'h' | 'd'

Details

Четность фильтра, заданная как "h", "d", 'h' или 'd'.

Типы данных

String, Char

Выходные аргументы

# b — коэффициенты фильтра
вектор

Details

Коэффициенты фильтра, возвращаемые в виде вектора длиной n + 1.

Функция firgr использует минимаксный алгоритм проектирования для следующих типов вещественных КИХ-фильтров:

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

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

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

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

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

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

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

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

  • Дополнительная пульсация.

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

  • Пульсация с ограничениями.

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

  • Принудительное усиление.

# err — величина невзвешенной погрешности аппроксимации
скаляр | вектор

Details

Величины невзвешенных ошибок аппроксимации, возвращаемые в виде скаляра или вектора. Массив err содержит по одному элементу для каждой независимой ошибки аппроксимации, возвращаемой функцией.

# res — частотная характеристика
структура

Details

Частотная характеристика, возвращаемая в виде структуры. Структура res содержит следующие поля:

Поле структуры Содержимое

res.fgrid

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

res.des

Желаемый отклик на fgrid.

res.wt

Весовые коэффициенты fgrid.

res.H

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

res.error

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

res.iextr

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

res.fextr

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

res.order

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

res.edge_check

Проверка аномалий в переходной зоне. По одному элементу на каждый край полосы. Элементы имеют следующие значения: 1 — без аномалий, 0 — вероятная аномалия в переходной зоне, −1 — край не проверен. Вычисляется для синтаксиса b,err,res=firgr(___,"check").

res.iterations

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

res.evals

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