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

zp2sos

Преобразование параметров фильтра с нулями, полюсами и коэффициентом усиления в форму секций второго порядка.

Библиотека

EngeeDSP

Синтаксис

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

  • sos,g = zp2sos(z,p,k) — находит матрицу секций второго порядка sos с коэффициентом усиления g, эквивалентную передаточной функции , нулей, полюсов и скалярный коэффициент усиления которой заданы в аргументах z, p и k:

  • sos,g = zp2sos(z,p,k,direction_flag,scale) — задает масштабирование коэффициентов усиления и числителя всех секций второго порядка.

  • sos,g = zp2sos(z,p,k,direction_flag,scale,zeroflag) — задает обработку вещественных нулей, являющихся противоположными друг другу.

  • sos = zp2sos(___,gain_out) — встраивает общий коэффициент усиления системы в первую секцию.

Аргументы

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

# z — нули
вектор

Details

Нули системы, заданные как вектор. Нули должны быть вещественными или представлять собой комплексно сопряженные пары.

Типы данных

Float64

Поддержка комплексных чисел

Да

# p — полюса
вектор

Details

Полюса системы, заданные как вектор. Полюса должны быть вещественными или представлять собой комплексно сопряженные пары.

Типы данных

Float64

Поддержка комплексных чисел

Да

# k — скалярный коэффициент усиления
скаляр

Details

Скалярный коэффициент усиления системы, заданный как скаляр.

Типы данных

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

Details

Количество выходных переменных, заданное как:

  • false — функция возвращает одну переменную sos;

  • true — функция возвращает кортеж из двух переменных (sos,g).

Типы данных

Bool

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

# sos — представление секции второго порядка
матрица

Details

Представление секции второго порядка, возвращаемое в виде матрицы. Аргумент sos — это матрица размером

строки которой содержат коэффициенты числителя и знаменателя и секций второго порядка функции :

Если передаточная функция имеет нулей и полюсов, то — ближайшее целое число, большее или равное .

# g — общий коэффициент усиления системы
скаляр

Details

Общий коэффициент усиления системы, возвращаемый в виде вещественного скаляра.

Если вызвать функцию 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)
3×6 Matrix{Float64}:
 0.00128258  0.00128258  0.0  1.0  -0.509525  0.0
 1.0         2.0         1.0  1.0  -1.09658   0.355447
 1.0         2.0         1.0  1.0  -1.36932   0.692569
import EngeeDSP.Functions: freqz

freqz(sos, out = :plot)

zp2sos

Алгоритмы

Функция zp2sos использует четырехэтапный алгоритм для определения представления секции второго порядка для входной системы с нулями, полюсами и коэффициентом усиления:

  1. Она группирует нули и полюса в комплексно сопряженные пары элементов с помощью функции cplxpair.

  2. Формирует вторую секцию путем сопоставления пар полюсов и нулей в соответствии со следующими правилами:

    1. Сопоставить полюса, ближайшие к единичной окружности, с нулями, ближайшими к этим полюсам.

    2. Сопоставить полюса, следующие по близости к единичной окружности, с нулями, ближайшими к этим полюсам.

    3. Продолжать, пока не будут сопоставлены все полюса и нули.

    Функция zp2sos группирует вещественные полюса в секции, где вещественные полюса находятся ближе всего друг к другу по абсолютному значению. То же правило действует и для вещественных нулей.

  3. Упорядочивает секции в соответствии с близостью пар полюсов к единичной окружности. Обычно zp2sos упорядочивает секции с полюсами, наиболее близкими к единичной окружности, последними в каскаде. Можно указать функции zp2sos, чтобы она упорядочила секции в обратном порядке, используя аргумент direction_flag.

  4. Функция zp2sos масштабирует секции по норме, указанной в аргументе scale. Для произвольной функции масштабирование определяется следующим образом:

    где может быть либо бесконечностью, либо 2. Это масштабирование является попыткой минимизировать переполнение или пиковый шум округления в реализациях фильтров с фиксированной точкой.

Литература

  1. Jackson, L. B. Digital Filters and Signal Processing. 3rd ed. Boston: Kluwer Academic Publishers, 1996.

  2. Mitra, Sanjit Kumar. Digital Signal Processing: A Computer-Based Approach. 3rd ed. New York: McGraw-Hill Higher Education, 2006.

  3. 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.