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

isminphase

Определяет, является ли фильтр минимально-фазовым.

Библиотека

EngeeDSP

Синтаксис

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

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

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

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

  • flag = isminphase(___,tol) — задает допуск tol, который определяет, насколько близкими должны быть два числа, чтобы их можно было считать равными.

Аргументы

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

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

Details

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

Типы данных

Float64, Float32

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

Да

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

Details

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

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

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

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

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

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

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

Float64, Float32

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

Да

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

Details

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

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

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

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

Типы данных

Float64, Float32

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

Details

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

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

Типы данных

Float64, Float32

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

Да

# tol — допуск
e2/3 | скаляр

Details

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

Типы данных

Float32, Float64

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

# flag — флаг минимально-фазового фильтра
true | false

Details

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

Типы данных

Bool

Примеры

Минимально-фазовый фильтр

Details

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

import EngeeDSP.Functions: butter, zp2sos, isminphase

z,p,k = butter(6,0.15, out=3)
SOS = zp2sos(z,p,k)
min_flag = isminphase(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)

isminphase

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

b = Float32.([1 1.00001])
a = Float32.([1 0.45])
min_flag1 = isminphase(b,a)
false
min_flag2 = isminphase(b,a,1e-3)
true

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

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

Details

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

butter ru

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

Details

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Литература

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