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

tf2sos

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

Библиотека

EngeeDSP

Синтаксис

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

  • sos,g = tf2sos(b,a) — находит матрицу секций второго порядка sos с коэффициентом усиления g, эквивалентную цифровому фильтру, представленному векторами коэффициентов передаточной функции b и a.

  • sos,g = tf2sos(b,a,order) — задает порядок строк в аргументе sos.

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

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

Аргументы

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

# b,a — коэффициенты передаточной функции
векторы

Details

Коэффициенты передаточной функции, заданные как векторы. Выражение передаточной функции через b и a записывается следующим образом:

Типы данных

Float64

# order — порядок строк
"up" (по умолчанию) | "down"

Details

Порядок строк, заданный одним из следующих способов:

  • "up" — упорядочить секции таким образом, чтобы первая строка аргумента sos содержала полюса, наиболее удаленные от единичной окружности;

  • "down" — упорядочить секции таким образом, чтобы первая строка аргумента sos содержала полюса, наиболее близкие к единичной окружности.

Типы данных

String

# scale — масштабирование коэффициентов усиления и числителя
"none" (по умолчанию) | "inf" | "two"

Details

Масштабирование коэффициентов усиления и числителя, заданное одним из следующих способов:

  • "none" — масштабирование не применяется;

  • "inf" — масштабирование по бесконечной норме;

  • "two" — масштабирование по второй норме.

Использование масштабирования по бесконечной норме с порядком "up" минимизирует вероятность переполнения в реализации. Использование масштабирования по второй норме с порядком "down" минимизирует пиковый шум округления.

Масштабирование по бесконечной норме и по второй норме подходит только для реализаций в прямой форме II.
Типы данных

String

# gain_out — количество выходных переменных
false (по умолчанию) | true

Details

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

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

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

Типы данных

Bool

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

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

Details

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

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

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

Details

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

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

Встраивание коэффициента усиления в первую секцию при масштабировании структуры прямой формы II не рекомендуется и может привести к нестабильному масштабированию. Чтобы избежать встраивания коэффициента усиления, используйте tf2sos с двумя выходными аргументами.

Примеры

Система «масса-пружина»

Details

Одномерная дискретная колебательная система состоит из единичной массы , прикрепленной к стене пружиной с единичной упругой постоянной . Датчик регистрирует ускорение массы с частотой Гц.

tf2sos

Сгенерируем 50 периодов дискретизации. Определим интервал дискретизации .

Fs = 5
dt = 1 / Fs
N = 50
t = dt * (0:N-1)
u = [1.0; zeros(N-1)]

Передаточная функция системы имеет аналитическое выражение:

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

import EngeeDSP.Functions: filter

bf = [1.0, -(1+cos(dt)), cos(dt)]
af = [1.0, -2*cos(dt), 1.0]
yf = filter(bf, af, u)
plot(t, yf,
     seriestype = :stem,
     marker = :circle,
     markerstrokecolor = 1,
     markercolor = :white,
     markersize = 5,
     xlabel = "t", legend = false)

tf2sos 1

Вычислим зависящее от времени ускорение, используя представление передаточной функции в виде секций второго порядка для фильтрации входного сигнала. Построим график результата. Результат одинаков в обоих случаях.

import EngeeDSP.Functions: tf2sos, sosfilt

sos = tf2sos(bf, af)
yt = sosfilt(sos, u)
plot(t, yt, seriestype = :stem, marker = :circle, legend = false)

tf2sos 2

Алгоритмы

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

  1. Она находит полюса и нули системы, заданные параметрами b и a.

  2. Использует функцию zp2sos, которая сначала группирует нули и полюса в комплексно сопряженные пары с помощью функции cplxpair. Затем zp2sos формирует секции второго порядка, сопоставляя пары полюсов и нулей в соответствии со следующими правилами:

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

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

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

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

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

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

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

Литература

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

  2. Mitra, S. K. 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.