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

impzlength

Длительность импульсной характеристики.

Библиотека

EngeeDSP

Синтаксис

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

  • len = impzlength(b,a) — возвращает длительность импульсной характеристики указанного цифрового фильтра. Укажите причинный дискретный фильтр с рациональной системной функцией, заданной полиномами от в числителе b и знаменателе a. Для стабильных БИХ-фильтров len — эффективная длина последовательности импульсной характеристики. Члены импульсной характеристики БИХ-фильтра, следующие после члена len, практически равны нулю.

  • len = impzlength(B,A,"ctf") — возвращает эффективную длительность импульсной характеристики цифрового фильтра, представленного в виде каскадных передаточных функций (Cascaded Transfer Functions, CTF) с коэффициентами числителя B и коэффициентами знаменателя A.

  • len = impzlength((B,A,g),"ctf") — возвращает эффективную длительность импульсной характеристики цифрового фильтра в формате CTF. Укажите фильтр с коэффициентами числителя B, коэффициентами знаменателя A и масштабными значениями g по секциям фильтра.

  • len = impzlength(sos) — возвращает длительность импульсной характеристики БИХ-фильтра, заданного матрицей секций второго порядка sos. Аргумент sos — это матрица размером на , где число секций должно быть больше или равно 2. Если число секций меньше 2, функция impzlength обрабатывает входные данные как вектор числителей b. Каждая строка sos соответствует коэффициентам фильтра второго порядка (биквадратного); -я строка sos соответствует [bi[1] bi[2] bi[3] ai[1] ai[2] ai[3]].

  • len = impzlength(___,tol) — задает допуск для оценки эффективной длительности импульсной характеристики БИХ-фильтра. По умолчанию значение аргумента tol равно 5e−5. Увеличение значения tol позволяет оценить меньшую эффективную длительность импульсной характеристики БИХ-фильтра. Уменьшение значения tol приводит к увеличению эффективной длительности импульсной характеристики БИХ-фильтра.

Аргументы

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

# b — коэффициенты числителя
вектор | скаляр

Details

Коэффициенты числителя, заданные как вектор или скаляр («идеальный» фильтр с одними полюсами).

Типы данных

Float32, Float64

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

Да

# a — коэффициенты знаменателя
вектор | скаляр

Details

Коэффициенты знаменателя, заданные как вектор или скаляр (КИХ-фильтр).

Типы данных

Float32, Float64

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

Да

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

Details

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

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

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

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

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

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

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

Float32, Float64

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

Да

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

Details

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

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

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

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

Типы данных

Float64, Float32

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

Details

Матрица секций второго порядка, заданная как матрица размером на . Системная функция -го биквадратного фильтра имеет рациональное Z-преобразование

Коэффициенты в -й строке матрицы sos упорядочены следующим образом:

Частотная характеристика фильтра представляет собой системную функцию, вычисленную на единичной окружности с помощью формулы

Входные аргументы «имя-значение»

Укажите необязательные пары аргументов в виде Name=Value, где Name — имя аргумента, а Value — соответствующее значение.

# tol — допуск для эффективной длительности импульсной характеристики БИХ-фильтра
5e−5 (по умолчанию) | скаляр

Details

Допуск для эффективной длительности импульсной характеристики БИХ-фильтра, заданный как положительный скаляр. Допуск определяет член абсолютно суммируемой последовательности, после которого последующие члены считаются равными 0. Значение допуска по умолчанию равно 5e−5. Увеличение допуска приводит к уменьшению эффективной длительности последовательности импульсной характеристики. Уменьшение допуска приводит к увеличению эффективной длительности последовательности импульсной характеристики.

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

# len — длительность импульсной характеристики
положительное целое число

Details

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

Примеры

Эффективная длительность импульсной характеристики БИХ-фильтра — Коэффициенты

Details

Создадим «идеальный» (с одними полюсами) БИХ-фильтр нижних частот с полюсом на частоте 0.9. Рассчитаем эффективную длительность импульсной характеристики. Получим импульсную характеристику. Построим график результата.

import EngeeDSP.Functions: impzlength

b = [1]
a = [1 -0.9]
len = impzlength(b, a)
93
import EngeeDSP.Functions: impz

h, t = impz(b, a)

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

impzlength 1

h[len]
6.170365191715192e-5

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

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

Details

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

butter ru

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

Details

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Алгоритмы

Для вычисления импульсной характеристики КИХ-фильтра функция impzlength использует длину аргумента b.

Для БИХ-фильтров функция сначала находит полюса передаточной функции с помощью функции roots.

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

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

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

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

    • Пять периодов самых медленных колебаний;

    • Момент, в котором член, обусловленный наибольшим полюсом, в tol раз превышает исходную амплитуду.

Литература

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