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

ss2sos

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

Библиотека

EngeeDSP

Синтаксис

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

  • sos,g = ss2sos(A,B,C,D) — возвращает матрицу секций второго порядка sos с коэффициентом усиления g, эквивалентную системе состояний, представленной входными аргументами A, B, C и D. Входная система состояний должна быть одновыходной и вещественной.

  • sos,g = ss2sos(A,B,C,D,iu) — задает индекс iu, указывающий, какой вход системы состояний A, B, C, D функция использует при преобразовании.

  • sos,g = ss2sos(A,B,C,D,order) — задает порядок строк в матрице sos с помощью аргумента order.

  • sos,g = ss2sos(A,B,C,D,iu,order) — задает как индекс iu, так и порядок строк order.

  • sos,g = ss2sos(A,B,C,D,iu,order,scale) — задает желаемое масштабирование коэффициента усиления и коэффициентов числителя всех секций второго порядка.

  • sos = ss2sos(___) — встраивает общий коэффициент усиления системы g в первую секцию. Можно указать комбинацию входных аргументов любого из предыдущих синтаксисов.

Аргументы

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

# A — матрица состояния
матрица

Details

Матрица состояния, заданная как матрица. Если система имеет входов и выходов и описывается переменными состояния, то матрица A имеет размер на .

# B — матрица входа
матрица

Details

Матрица входа, заданная как матрица. Если система имеет входов и выходов и описывается переменными состояния, то матрица B имеет размер на .

# C — матрица выхода
матрица

Details

Матрица выхода, заданная как матрица. Если система имеет входов и выходов и описывается переменными состояния, то матрица C имеет размер на .

# D — матрица сквозной передачи
матрица

Details

Матрица сквозной передачи, заданная как матрица. Если система имеет входов и выходов и описывается переменными состояния, то матрица D имеет размер на .

# iu — индекс
1 (по умолчанию) | целое число

Details

Индекс, заданный как целое число.

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

Details

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

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

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

Нули сопоставляются с полюсами, наиболее близкими к ним.

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

Details

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

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

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

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

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

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

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

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

Details

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

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

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

Details

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

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

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

Примеры

Представление фильтра в виде секций второго порядка

Details

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

import EngeeDSP.Functions: butter, ss2sos

A, B, C, D = butter(5, 0.2, out = 4)
sos, g = ss2sos(A, B, C, D)
println("sos = ", sos)
sos = [1.0 1.0004631991200947 0.0 1.0 -0.5095254494944288 0.0; 1.0 1.9995370439927413 0.9995370439927413 1.0 -1.0965794655679613 0.35544676217239035; 1.0 1.999999756887197 0.9999999713279842 1.0 -1.3693171946832927 0.6925691353878634]
import EngeeDSP.Functions: freqz

freqz(sos, out = :plot)

ss2sos

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

Details

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

tf2sos

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

Fs = 5
dt = 1 / Fs
N = 50
t = dt * (0:N-1)

Осциллятор можно описать уравнениями пространства состояний:



где — вектор состояния, и — соответственно положение и скорость массы, а матрицы

A = [cos(dt) sin(dt); -sin(dt) cos(dt)]
B = [1 - cos(dt); sin(dt)]
C = [-1 0]
D = 1

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

u = [1; zeros(N-1)]

x = [0.0; 0.0]
y = zeros(N)

for k = 1:N
    y[k] = (C * x)[1] + D * u[k]
    global x = A * x + B * u[k]
end

Построим график зависимости ускорения массы от времени.

plot(t, y,
     seriestype = :stem,
     marker = :circle,
     legend = false)

ss2sos 1

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

import EngeeDSP.Functions: ss2sos, sosfilt

sos = ss2sos(A, B, C, D)
yt = sosfilt(sos[1], u)
plot(t, yt,
     seriestype = :stem,
     marker = :circle,
     legend = false)

ss2sos 2

Алгоритмы

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

  1. Она находит полюса и нули системы, заданные параметрами A, B, C и D.

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

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

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

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

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

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

  4. Функция ss2sos масштабирует секции по норме, указанной в аргументе 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.