Оптимальный БИХ с предписанной групповой задержкой
[num,den] = iirgrpdelay(n,f,edges,a)
[num,den] = iirgrpdelay(n,f,edges,a,w)
[num,den] = iirgrpdelay(n,f,edges,a,w,radius)
[num,den] = iirgrpdelay(n,f,edges,a,w,radius,p)
[num,den] = iirgrpdelay(n,f,edges,a,w,radius,p,dens)
[num,den] = iirgrpdelay(n,f,edges,a,w,radius,p,dens,initden)
[num,den] = iirgrpdelay(n,f,edges,a,w,radius,p,dens,initden,tau)
[num,den,tau] = iirgrpdelay(n,f,edges,a,w)
[num,den] = iirgrpdelay(n,f,edges,a)
возвращает allpass БИХ фильтр порядка n
(n
должно быть четным), что является лучшим приближением к относительной групповой задержке, описанной f
и a
в наименьшем смысле. f
является вектором частот от 0 до 1 и a
указывается в выборках. Векторная edges
задает диапазонные частоты для многодиапазонных проектов. iirgrpdelay
использует ограниченный алгоритм Ньютона. Всегда проверяйте полученный фильтр с помощью grpdelay
или freqz
.
[num,den] = iirgrpdelay(n,f,edges,a,w)
использует веса в w
для взвешивания ошибки. w
имеет один вход на точку частоты и должна быть такой же длины, как и f
и a
). Записи в w
сказать iirgrpdelay
сколько акцента делать на минимизации ошибки в окрестности каждой заданной частотной точки относительно других точек.
f
и a
должно иметь одинаковое количество элементов. f
и a
может содержать больше элементов, чем вектор edges
содержит. Это позволяет использовать f
и a
чтобы задать фильтр, который имеет любой контур задержки группы в каждой полосе.
[num,den] = iirgrpdelay(n,f,edges,a,w,radius)
возвращает фильтр с максимальным радиусом полюса, равным radius
, где 0 < radius
<1. radius
значение по умолчанию 0.999999. Фильтры, радиус полюса которых, который вы ограничиваете, меньше 1,0, могут лучше сохранить точность передаточной функции после квантования.
[num,den] = iirgrpdelay(n,f,edges,a,w,radius,p)
, где p
является двухэлементным вектором [pmin pmax
], позволяет вам определить минимальное и максимальное значения p
используется в алгоритме наименьших чисел. p
по умолчанию равен [2 128], что приводит к фильтрам, очень похожим на норму L-бесконечности, или Чебышева. pmin
и pmax
должен быть ровным. Если p
является 'inspect'
, оптимизация не происходит. Можно использовать эту функцию для проверки начального положения полюса/нуля.
[num,den] = iirgrpdelay(n,f,edges,a,w,radius,p,dens)
задает плотность сетки dens
используется в процессе оптимизации. Количество точек сетки (dens*(n+1))
. Значение по умолчанию является 20. dens
может быть задан как одноэлементный массив ячеек. Сетка не разделена равными интервалами.
[num,den] = iirgrpdelay(n,f,edges,a,w,radius,p,dens,initden)
позволяет вам задать начальную оценку коэффициентов знаменателя в векторе initden
. Это может быть полезно для сложных задач оптимизации. Редактор нули полюсов в Signal Processing Toolbox™ программном обеспечении может использоваться для генерации initden
.
[num,den] = iirgrpdelay(n,f,edges,a,w,radius,p,dens,initden,tau)
позволяет задавать начальную оценку смещения задержки группы значением tau
, в выборках.
[num,den,tau] = iirgrpdelay(n,f,edges,a,w)
возвращает результат смещения задержки группы. Во всех случаях полученный фильтр имеет групповую задержку, которая аппроксимируется [a + tau
]. Фильтры Allpass могут иметь только положительную групповую задержку, и ненулевое значение tau учитывает любую дополнительную групповую задержку, которая необходима для соответствия форме контура, заданной (f,a)
. Значение по умолчанию для tau
является max
(a
).
Подсказка: Если нули или полюса объединяются, то порядок фильтра может быть слишком низким, или радиус полюса может быть слишком маленьким (слишком ограничен). Попробуйте увеличить n
или radius
.
Для эквализации с групповой задержкой БИХ вычислите a
путем вычитания задержки группы фильтра из его максимальной задержки группы. Для примера,
[be,ae] = ellip(4,1,40,0.2); f = 0:0.001:0.2; g = grpdelay(be,ae,f,2); % Equalize only the passband. a = max(g)-g; [num,den]=iirgrpdelay(8, f, [0 0.2], a);
Antoniou, A., Цифровые Фильтры: Analysis, Design, and Applications, Second Edition, McGraw-Hill, Inc. 1993.