Преобразование параметров фильтра с нулями, полюсами и коэффициентом усиления в форму секций второго порядка.
Библиотека
EngeeDSP
Синтаксис
Вызов функции
sos,g = zp2sos(z,p,k) — находит матрицу секций второго порядка sos с коэффициентом усиления g, эквивалентную передаточной функции , нулей, полюсов и скалярный коэффициент усиления которой заданы в аргументах z, p и k:
Скалярный коэффициент усиления системы, заданный как скаляр.
Типы данных
Float64
#direction_flag —
порядок строк
"up" (по умолчанию) | "down"
Details
Порядок строк задается одним из следующих способов:
"up" — упорядочить секции таким образом, чтобы первая строка аргумента sos содержала полюса, наиболее удаленные от единичной окружности;
"down" — упорядочить секции таким образом, чтобы первая строка аргумента sos содержала полюса, наиболее близкие к единичной окружности.
Типы данных
String
#scale —
масштабирование коэффициентов усиления и числителя
"none" (по умолчанию) | "inf" | "two"
Details
Масштабирование коэффициентов усиления и числителя, заданное одним из следующих способов:
"none" — масштабирование не применяется;
"inf" — масштабирование по бесконечной норме;
"two" — масштабирование по второй норме.
Использование масштабирования по бесконечной норме с порядком "up" минимизирует вероятность переполнения в реализации. Использование масштабирования по второй норме с порядком "down" минимизирует пиковый шум округления.
Масштабирование по бесконечной норме и по второй норме подходит только для реализаций в прямой форме II.
Типы данных
String
#zeroflag —
упорядочивание вещественных нулей
false (по умолчанию) | true
Details
Упорядочивание вещественных нулей, являющихся противоположными друг другу, заданных как логический скаляр:
false — функция упорядочит эти нули в соответствии с их близостью к полюсам;
true — функция сохранит эти нули вместе. Эта опция приводит к тому, что числитель будет иметь средний коэффициент, равный нулю.
Типы данных
Bool
#gain_out —
количество выходных переменных
false (по умолчанию) | true
Общий коэффициент усиления системы, возвращаемый в виде вещественного скаляра.
Если вызвать функцию zp2sos с одним выходным аргументом, то функция встроит общий коэффициент усиления системы в первую секцию , так что
Встраивание коэффициента усиления в первую секцию при масштабировании структуры прямой формы II не рекомендуется и может привести к нестабильному масштабированию. Чтобы избежать встраивания коэффициента усиления, используйте zp2sos с двумя выходными аргументами.
Примеры
Формирование секций второго порядка на основе нулей, полюсов и коэффициента усиления
Details
Разработаем фильтр нижних частот Баттерворта 5-го порядка, используя функцию butter, с выходными данными, выраженными в форме с нулями, полюсами и коэффициентом усиления. Зададим частоту среза равной одной пятой частоты Найквиста. Преобразуем результат в секции второго порядка. Визуализируем частотную характеристику.
import EngeeDSP.Functions: butter, zp2sos
z, p, k = butter(5, 0.2, out = 3)
sos = zp2sos(z, p, k)
import EngeeDSP.Functions: freqz
freqz(sos, out = :plot)
Алгоритмы
Функция zp2sos использует четырехэтапный алгоритм для определения представления секции второго порядка для входной системы с нулями, полюсами и коэффициентом усиления:
Она группирует нули и полюса в комплексно сопряженные пары элементов с помощью функции cplxpair.
Формирует вторую секцию путем сопоставления пар полюсов и нулей в соответствии со следующими правилами:
Сопоставить полюса, ближайшие к единичной окружности, с нулями, ближайшими к этим полюсам.
Сопоставить полюса, следующие по близости к единичной окружности, с нулями, ближайшими к этим полюсам.
Продолжать, пока не будут сопоставлены все полюса и нули.
Функция zp2sos группирует вещественные полюса в секции, где вещественные полюса находятся ближе всего друг к другу по абсолютному значению. То же правило действует и для вещественных нулей.
Упорядочивает секции в соответствии с близостью пар полюсов к единичной окружности. Обычно zp2sos упорядочивает секции с полюсами, наиболее близкими к единичной окружности, последними в каскаде. Можно указать функции zp2sos, чтобы она упорядочила секции в обратном порядке, используя аргумент direction_flag.
Функция zp2sos масштабирует секции по норме, указанной в аргументе scale. Для произвольной функции масштабирование определяется следующим образом:
где может быть либо бесконечностью, либо 2. Это масштабирование является попыткой минимизировать переполнение или пиковый шум округления в реализациях фильтров с фиксированной точкой.
Литература
Jackson, L. B. Digital Filters and Signal Processing. 3rd ed. Boston: Kluwer Academic Publishers, 1996.
Mitra, Sanjit Kumar. Digital Signal Processing: A Computer-Based Approach. 3rd ed. New York: McGraw-Hill Higher Education, 2006.
Vaidyanathan, P. P. «Robust Digital Filter Structures.» Handbook for Digital Signal Processing (S. K. Mitra and J. F. Kaiser, eds.). New York: John Wiley & Sons, 1993.