Оптимальный фильтр БИХ с заданной групповой задержкой
[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 IIR порядка 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 используется в алгоритме наименьших pth. 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., Digital Filters: Analysis, Design, and Applications, Second Edition, McGraw-Hill, Inc. 1993.