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

freqz

Частотная характеристика цифрового фильтра.

Библиотека

EngeeDSP

Синтаксис

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

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

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

  • h,w = freqz((B,A,g),ctf=true,n) — возвращает n-точечную частотную характеристику цифрового фильтра в формате CTF. Укажите фильтр с коэффициентами числителя B, коэффициентами знаменателя A и масштабными значениями g по секциям фильтра.

  • h,w = freqz(sos,n) — возвращает n-точечную комплексную частотную характеристику, соответствующую матрице секций второго порядка sos.

  • h,w = freqz(___,n,"whole") — возвращает n-точечную частотную характеристику выборки по всей единичной окружности.

  • h,f = freqz(___,n,fs) — возвращает вектор частотной характеристики h и соответствующий вектор физических частот f для цифрового фильтра, предназначенного для фильтрации сигналов, дискретизированных с частотой fs.

  • h,f = freqz(___,n,"whole",fs) — возвращает вектор частот в n точках в диапазоне от 0 до fs.

  • h = freqz(___,w) — возвращает вектор частотной характеристики h, вычисленный на нормализованных частотах, заданных во входном аргументе w.

  • h = freqz(___,f,fs) — возвращает вектор частотной характеристики h, вычисленный на физических частотах, заданных во входном аргументе f.

  • freqz(___,out=:plot) — строит график частотной характеристики фильтра.

Аргументы

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

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

Details

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

Типы данных

Float64, Float32

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

Да

# n — количество частотных точек, по которым оценивается характеристика
512 (по умолчанию) | положительное целое число

Details

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

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

Details

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

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

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

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

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

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

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

Float64, Float32

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

Да

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

Details

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

Функция freqz применяет усиление к секциям фильтра с помощью функции 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

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

Да

# fs — частота дискретизации
скаляр

Details

Частота дискретизации, заданная как положительный скаляр. Если единицей времени являются секунды, то fs выражается в Гц.

Типы данных

Float64

# w — угловые частоты
вектор

Details

Угловые частоты, заданные как вектор, единицы измерения — рад/отсчет. Вектор w должен содержать не менее двух элементов, иначе функция интерпретирует его как n. Значение аргумента w = π соответствует частоте Найквиста.

# f — частоты
вектор

Details

Частоты, заданные как вектор. Вектор f должен содержать не менее двух элементов, иначе функция интерпретирует его как n. Если единицей времени являются секунды, то f выражается в Гц.

Типы данных

Float64

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

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

# ctf — каскадная передаточная функция
false (по умолчанию) | true

Details

Формат вывода частотной характеристики:

  • false — функция возвращает частотную характеристику цифрового фильтра;

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

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

Типы данных

Bool

# out — тип выходных данных
:data (по умолчанию) | :plot

Details

Тип выходных данных:

  • :data — функция возвращает данные;

  • :plot — функция возвращает график.

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

# h — частотная характеристика
вектор

Details

Частотная характеристика, возвращаемая в виде вектора. Если аргумент n задан, то вектор h имеет длину n. Если n не задан или задан как пустой вектор, то длина вектора h равна 512.

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

# w — угловые частоты
вектор

Details

Угловые частоты, возвращаемые в виде вектора. Значение аргумента w варьируется от 0 до . Если в качестве входных данных задан аргумент "whole", то значения в векторе w будут варьироваться от 0 до . Если задан аргумент n, вектор w имеет длину n. Если n не задан или задан как пустой вектор, то длина вектора w равна 512.

# f — частоты
вектор

Details

Частоты, возвращаемые в виде вектора и выраженные в Гц. Аргумент f принимает значения от 0 до fs/2 Гц. Если в качестве входных данных задан аргумент "whole", то значения в векторе f будут находиться в диапазоне от 0 до fs Гц. Если задан аргумент n, вектор f имеет длину n. Если n не задан или задан как пустой вектор, то длина вектора f равна 512.

Примеры

Частотная характеристика передаточной функции

Details

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

Выразим числитель и знаменатель в виде полиномиальных сверток. Найдем частотную характеристику в 2001 точке, охватывающей всю единичную окружность.

import EngeeDSP.Functions: conv, freqz

b0 = 0.05634
b1 = [1  1]
b2 = [1 -1.0166 1]
a1 = [1 -0.683]
a2 = [1 -1.4461 0.7957]

b = b0 * conv(b1, b2)
a = conv(a1, a2)

h, w = freqz(b, a, "whole", 2001)

Построим график амплитудно-частотной характеристики, выраженной в дБ.

plot(w./(maximum(w)/2), 20*log10.(abs.(h)),
     xlabel = "Normalized Frequency (×π rad/sample)",
     ylabel = "Magnitude (dB)",
     legend = false,
     ylims = (-100, 20))

freqz 1

Частотная характеристика КИХ-фильтра

Details

Спроектируем КИХ-фильтр нижних частот 80-го порядка, используя окно Кайзера с . Зададим нормированную частоту среза рад/отсчет. Отобразим амплитудно-частотную и фазовую характеристики фильтра.

import EngeeDSP.Functions: fir1, kaiser, freqz

b = fir1(80, 0.5, kaiser(81, 8))

freqz(b, 1, out = :plot)

freqz 2

Частотная характеристика секций второго порядка

Details

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

Выразим передаточную функцию через секции второго порядка. Найдем частотную характеристику в 2001 точке, охватывающей всю единичную окружность.

import EngeeDSP.Functions: freqz

b0 = 0.05634
b1 = [1  1]
b2 = [1 -1.0166 1]
a1 = [1 -0.683]
a2 = [1 -1.4461 0.7957]

sos1 = [b0*[b1 0] [a1 0]]
sos2 = [b2 a2]

h, w = freqz([sos1; sos2], "whole", 2001)

Построим график амплитудно-частотной характеристики, выраженной в дБ.

plot(w./(maximum(w)/2), 20*log10.(abs.(h)),
     xlabel = "Normalized Frequency (×π rad/sample)",
     ylabel = "Magnitude (dB)",
     legend = false,
     ylims = (-100, 20))

freqz 3

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

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

Details

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

butter ru

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

Details

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Алгоритмы

Частотную характеристику цифрового фильтра можно интерпретировать как передаточную функцию, вычисленную в точке [1].

Функция freqz определяет передаточную функцию из заданных вами полиномов числителя и знаменателя (вещественных или комплексных) и возвращает комплексную частотную характеристику цифрового фильтра. Частотная характеристика вычисляется в точках выборки, определяемых используемым вами синтаксисом.

Функция freqz обычно использует алгоритм БПФ для вычисления частотной характеристики, если в качестве входного аргумента не указан вектор частот. Она вычисляет частотную характеристику как отношение преобразованных коэффициентов числителя и знаменателя, дополненных нулями до нужной длины.

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

Литература

  1. Oppenheim, Alan V., and Ronald W. Schafer, with John R. Buck. Discrete-Time Signal Processing. 2nd Ed. Upper Saddle River, NJ: Prentice Hall, 1999.

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