h,t = impz(b,a) — возвращает импульсную характеристику указанного цифрового фильтра. Укажите цифровой фильтр с коэффициентами числителя b и коэффициентами знаменателя a. Функция выбирает отсчеты времени и возвращает коэффициенты характеристики в выходном аргументе h и периоды дискретизации в выходном аргументе t.
h,t = impz(B,A,"ctf") — возвращает импульсную характеристику цифрового фильтра, представленную в виде каскадных передаточных функций (Cascaded Transfer Functions, CTF) с коэффициентами числителя B и коэффициентами знаменателя A.
h,t = impz((B,A,g),"ctf") — возвращает импульсную характеристику цифрового фильтра в формате CTF. Укажите фильтр с коэффициентами числителя B, коэффициентами знаменателя A и масштабными значениями g по секциям фильтра.
h,t = impz(sos) — возвращает импульсную характеристику фильтра, заданного матрицей секций второго порядка sos.
h,t = impz(___,n) — задает количество отсчетов импульсной характеристики для вычисления. Можно указать фильтр, используя любой из предыдущих синтаксисов.
h,t = impz(___,n,fs) — возвращает вектор t с последовательными отсчетами, расположенными на расстоянии 1/fs единиц друг от друга.
impz(___,out=:plot) — строит график импульсной характеристики фильтра.
Коэффициенты каскадной передаточной функции, заданные как скаляры, векторы или матрицы. В матрицах B и A перечислены коэффициенты числителя и знаменателя каскадной передаточной функции соответственно.
Матрица B должна иметь размер на , а матрица A — на , где
Если какой-либо элемент матрицы A[:,1] не равен 1, то функция impz нормализует коэффициенты фильтра по A[:,1]. В этом случае A[:,1] должен быть ненулевым.
Масштабные значения, заданные как вещественный скаляр или вектор с вещественными значениями, содержащий элемент, где — количество секций каскадной передаточной функции. Масштабные значения представляют собой распределение усиления фильтра по секциям представления каскадного фильтра.
Функция impz применяет усиление к секциям фильтра с помощью функции scaleFilterSections в зависимости от способа задания аргумента g:
скаляр — функция равномерно распределяет усиление по всем секциям фильтра;
вектор — функция применяет первые значений усиления к соответствующим секциям фильтра и равномерно распределяет последнее значение усиления по всем секциям фильтра.
Типы данных
Float64, Float32
#sos —
коэффициенты секций второго порядка
матрица
Details
Коэффициенты секций второго порядка, заданные как матрица. Аргумент sos — это матрица размером на , где число секций должно быть больше или равно 2. Если число секций меньше 2, функция обрабатывает входные данные как вектор числителей. Каждая строка sos соответствует коэффициентам фильтра второго порядка (биквадратного фильтра); -я строка sos соответствует [bi[1] bi[2] bi[3] ai[1] ai[2] ai[3]].
Типы данных
Float64, Float32
Поддержка комплексных чисел
Да
#n —
количество точек, по которым оценивается характеристика
положительное целое число | вектор неотрицательных целых чисел | []
Details
Количество точек, по которым оценивается характеристика, заданное как положительное целое число, вектор неотрицательных целых чисел или пустой вектор.
Если аргумент n — положительное целое число, функция impz вычисляет первые n отсчетов импульсной характеристики и возвращает t как [0:n−1]'.
Если n — вектор неотрицательных целых чисел, функция impz вычисляет импульсную характеристику в точках, указанных в векторе.
Если n — пустой вектор, функция impz вычисляет количество отсчетов автоматически. См. раздел Алгоритмы для получения дополнительной информации.
Спроектируем эллиптический фильтр нижних частот четвертого порядка с нормированной частотой полосы пропускания 0.4 рад/отсчет. Зададим пульсацию в полосе пропускания 0.5 дБ и затухание в полосе подавления 20 дБ. Построим график первых 50 отсчетов импульсной характеристики.
import EngeeDSP.Functions: ellip, impz
b, a = ellip(4, 0.5, 20, 0.4)
impz(b, a, 50, out = :plot)
Спроектируем КИХ-фильтр верхних частот 18-го порядка, используя окно Кайзера с . Зададим частоту дискретизации 100 Гц и частоту среза 30 Гц. Отобразим импульсную характеристику фильтра.
import EngeeDSP.Functions: fir1, kaiser, impz
b = fir1(18, 30/(100/2), kaiser(19, 4), "high")
impz(b, 1, [], 100, out = :plot)
Расчет импульсной характеристики для каскадных передаточных функций
Details
Спроектируем цифровой фильтр нижних частот Чебышева II типа 40-го порядка с граничной частотой в полосе заграждения 0.4 и затуханием в полосе заграждения 50 дБ. Построим график первых 64 отсчетов импульсной характеристики фильтра, используя коэффициенты фильтра в формате CTF.
import EngeeDSP.Functions: impz, cheby2
B, A = cheby2(40, 50, 0.4)
impz(B, A, 64, out = :plot)
Дополнительно
Каскадные передаточные функции
Details
Разбиение цифрового БИХ-фильтра на каскадные секции повышает его численную устойчивость и снижает восприимчивость к ошибкам квантования коэффициентов. Каскадная форма передаточной функции , выраженная через передаточных функций , имеет вид
Задание цифровых фильтров в формате CTF
Details
В формате CTF можно проектировать цифровые фильтры для анализа, визуализации и фильтрации сигналов. Фильтр задается путем перечисления его коэффициентов B и A. Также можно указать коэффициент масштабирования фильтра по секциям, задав скалярную или векторную величину g.
Коэффициенты фильтра
При задании коэффициентов в виде -строчных матриц
предполагается, что фильтр задан как последовательность из каскадных передаточных функций, так что полная передаточная функция фильтра имеет вид
где — порядок числителя фильтра, а — порядок знаменателя.
Если и заданы как векторы, предполагается, что базовая система представляет собой односекционный БИХ-фильтр (), где представляет собой числитель передаточной функции, а — ее знаменатель.
Если — скаляр, предполагается, что фильтр представляет собой каскад БИХ-фильтров с полюсами, причем общий коэффициент усиления системы каждого каскада равен .
Если — скаляр, предполагается, что фильтр представляет собой каскад КИХ-фильтров, причем общий коэффициент усиления системы каждого каскада равен .
Для преобразования матриц секций второго порядка в каскадные передаточные функции используйте функцию sos2ctf.
Для преобразования представления фильтра с нулями, полюсами и коэффициентом усиления в каскадные передаточные функции используйте функцию zp2ctf.
Коэффициенты и усиление
Если есть общий масштабный коэффициент усиления или несколько масштабных коэффициентов усиления, вынесенных за пределы значений коэффициентов фильтра, вы можете указать коэффициенты и усиление в виде кортежа (B, A, g). Масштабирование секций фильтра особенно важно при работе с арифметикой с фиксированной точкой, чтобы гарантировать, что выходные сигналы каждой секции фильтра имеют схожие уровни амплитуды, что помогает избежать неточностей в частотной характеристике фильтра из-за ограниченной точности вычислений.
Коэффициент усиления может быть скалярным общим коэффициентом усиления или вектором коэффициентов усиления секций.
Если коэффициент усиления скалярный, его значение применяется равномерно ко всем секциям каскадного фильтра.
Если коэффициент усиления является вектором, он должен содержать на один элемент больше, чем количество секций фильтра в каскаде. Каждое из первых масштабных значений применяется к соответствующей секции фильтра, а последнее значение применяется равномерно ко всем секциям каскадного фильтра.
Если вы зададите матрицы коэффициентов фильтра и вектор коэффициентов усиления в виде
то предполагается, что передаточная функция системы фильтра имеет вид
Алгоритмы
Функция impz фильтрует последовательность импульсов длиной n с помощью
filter(b, a, [1 zeros(n-1)])
и строит график результата, используя stem.
Если входные данные для функции impz имеют одинарную точность, функция вычисляет импульсную характеристику, используя арифметику одинарной точности, и возвращает результат в формате одинарной точности.
Когда функция impz вычисляет n автоматически, алгоритм зависит от свойств фильтра:
БИХ-фильтры — функция impz сначала находит полюса передаточной функции с помощью функции roots.
Если фильтр неустойчив, n выбирается как точка, в которой член, обусловленный наибольшим полюсом, достигает -кратного увеличения своего исходного значения.
Если фильтр устойчив, n выбирается как точка, в которой член, обусловленный полюсом с наибольшей амплитудой, в раз превышает свою исходную амплитуду.
Если фильтр является осциллирующим и имеет полюса только на единичной окружности, функция impz вычисляет пять периодов самых медленных колебаний.
Если фильтр имеет как осциллирующие, так и затухающие члены, n — это большее из пяти периодов самых медленных колебаний или точка, в которой член, обусловленный наибольшим полюсом, в раз превышает свою исходную амплитуду.
Функция impz также допускает наличие задержек в полиноме числителя. Количество задержек учитывается при вычислении количества отсчетов.
Литература
Lyons, Richard G. Understanding Digital Signal Processing. Upper Saddle River, NJ: Prentice Hall, 2004.