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

isstable

Определяет, является ли фильтр устойчивым.

Библиотека

EngeeDSP

Синтаксис

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

  • flag = isstable(b,a) — возвращает логический выходной сигнал, равный true, если указанный фильтр является устойчивым. Укажите фильтр с коэффициентами числителя b и коэффициентами знаменателя a.

  • flag = isstable((B,A,g),"ctf") — возвращает true, если фильтр, заданный как каскадная передаточная функция с коэффициентами числителя B, коэффициентами знаменателя A и масштабным значением g, является устойчивым.

  • flag = isstable(sos) — возвращает true, если фильтр, заданный матрицей секций второго порядка sos, является устойчивым.

Аргументы

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

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

Details

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

Типы данных

Float64, Float32

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

Да

# B,A — коэффициенты каскадной передаточной функции
скаляры | векторы | матрицы

Details

Коэффициенты каскадной передаточной функции, заданные как скаляры, векторы или матрицы. В матрицах B и A перечислены коэффициенты числителя и знаменателя каскадной передаточной функции соответственно.

Матрица B должна иметь размер на , а матрица A на , где

  • — количество секций фильтра;

  • — порядок числителей фильтра;

  • — порядок знаменателей фильтра.

Дополнительную информацию о формате каскадной передаточной функции и матрицах коэффициентов см. в разделе Задание цифровых фильтров в формате CTF.

Если какой-либо элемент матрицы A[:,1] не равен единице, то функция isstable нормализует коэффициенты фильтра по A[:,1]. В этом случае A[:,1] должно быть ненулевым.
Типы данных

Float64, Float32

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

Да

# g — масштабные значения
скаляр | вектор

Details

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

Функция isstable применяет усиление к секциям фильтра с помощью функции scaleFilterSections в зависимости от способа задания аргумента g:

  • скаляр — функция равномерно распределяет усиление по всем секциям фильтра;

  • вектор — функция применяет первые значений усиления к соответствующим секциям фильтра и равномерно распределяет последнее значение усиления по всем секциям фильтра.

Типы данных

Float64, Float32

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

Details

Представление секций второго порядка, заданное как матрица размером , где — количество секций второго порядка. Матрица

представляет собой секции второго порядка функции :

Типы данных

Float64, Float32

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

Да

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

# flag — флаг устойчивости фильтра
true | false

Details

Флаг устойчивости фильтра, возвращаемый в виде логического значения. Если полюса лежат на окружности или за ее пределами, функция возвращает false. Если полюса находятся внутри окружности, функция возвращает true.

Типы данных

Bool

Примеры

Устойчивость фильтра

Details

Спроектируем фильтр верхних частот Баттерворта шестого порядка с использованием секций второго порядка. Зададим нормализованную частоту среза 0.7. Определим, является ли фильтр устойчивым.

import EngeeDSP.Functions: butter, zp2sos, isstable

z,p,k = butter(6,0.7,"high", out=3)
SOS = zp2sos(z,p,k)
flag = isstable(SOS)
true
plt = plot(aspect_ratio=:equal, xlims=(-1.1, 1.1), ylims=(-1.1, 1.1),
           title="Zero-Pole Plot", xlabel="Real", ylabel="Imag")

theta = range(0, 2π, length=100)
plot!(cos.(theta), sin.(theta), color=:black, linestyle=:dash, label="Unit Circle")

scatter!(real(z), imag(z), marker=:circle, color=:blue, label="Zeros", markersize=8)
scatter!(real(p), imag(p), marker=:x, color=:red, label="Poles", markersize=8)

isstable

Создадим фильтр и определим его устойчивость при двойной и одинарной точности.

b = [1 -0.5]
a = [1 -0.999999999]
act_flag1 = isstable(b,a)
true
act_flag2 = isstable(Float32.(b),Float32.(a))
false

Дополнительно

Каскадные передаточные функции

Details

Разбиение цифрового БИХ-фильтра на каскадные секции повышает его численную устойчивость и снижает восприимчивость к ошибкам квантования коэффициентов. Каскадная форма передаточной функции , выраженная через передаточных функций , имеет вид

butter ru

Задание цифровых фильтров в формате CTF

Details

В формате CTF можно проектировать цифровые фильтры для анализа, визуализации и фильтрации сигналов. Фильтр задается путем перечисления его коэффициентов B и A. Также можно указать коэффициент масштабирования фильтра по секциям, задав скалярную или векторную величину g.

Коэффициенты фильтра

При задании коэффициентов в виде -строчных матриц

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

где порядок числителя фильтра, а порядок знаменателя.

  • Если и заданы как векторы, предполагается, что базовая система представляет собой односекционный БИХ-фильтр ( ), где представляет собой числитель передаточной функции, а — ее знаменатель.

  • Если — скаляр, предполагается, что фильтр представляет собой каскад всеполюсных БИХ-фильтров, причем общий коэффициент усиления системы каждой секции равен .

  • Если — скаляр, предполагается, что фильтр представляет собой каскад КИХ-фильтров, причем общий коэффициент усиления системы каждой секции равен .

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

  • Для преобразования представления фильтра с нулями, полюсами и коэффициентом усиления в каскадные передаточные функции используйте функцию zp2ctf.

Коэффициенты и усиление

Если есть общий масштабный коэффициент усиления или несколько масштабных коэффициентов усиления, вынесенных за пределы значений коэффициентов фильтра, вы можете указать коэффициенты и усиление в виде кортежа (B, A, g). Масштабирование секций фильтра особенно важно при работе с арифметикой с фиксированной точкой, чтобы гарантировать, что выходные сигналы каждой секции фильтра имеют схожие уровни амплитуды, что помогает избежать неточностей в частотной характеристике фильтра из-за ограниченной точности вычислений.

Коэффициент усиления может быть скалярным общим коэффициентом усиления или вектором коэффициентов усиления секций.

  • Если коэффициент усиления скалярный, его значение применяется равномерно ко всем секциям каскадного фильтра.

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

Если вы зададите матрицы коэффициентов фильтра и вектор коэффициентов усиления в виде

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

Литература

  1. Lyons, Richard G. Understanding Digital Signal Processing. Upper Saddle River, NJ: Prentice Hall, 2004.