Оптимальный БИХ с предписанной групповой задержкой
[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.