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

yulewalk

Проектирование рекурсивного цифрового фильтра.

Библиотека

EngeeDSP

Синтаксис

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

  • b, a = yulewalk(n, f, m) — возвращает коэффициенты передаточной функции БИХ-фильтра n-го порядка, амплитудно-частотная характеристика которого приблизительно соответствует значениям, заданным в f и m.

Аргументы

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

# n — порядок фильтра
положительный целочисленный скаляр

Details

Порядок фильтра, заданный как положительный целочисленный скаляр.

Типы данных

Float32, Float64

# f — значения частоты
вектор

Details

Значения частоты, заданные как вектор с элементами в диапазоне от 0 до 1, где 1 соответствует частоте Найквиста, или половине частоты дискретизации. Первый элемент f должен быть равен 0, а последний — 1. Все промежуточные элементы должны располагаться в порядке возрастания. Вектор f может иметь повторяющиеся значения частоты, соответствующие ступеням частотной характеристики.

Типы данных

Float32, Float64

# m — амплитудная характеристика
вектор

Details

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

Типы данных

Float32, Float64

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

# b, a — коэффициенты фильтра
векторы-строки

Details

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

Примеры

Проектирование фильтра нижних частот по методу Юла — Уокера

Details

Спроектируем фильтр нижних частот 8-го порядка с нормированной частотой среза 0.6. Построим его частотную характеристику и наложим на нее характеристику соответствующего идеального фильтра.

import EngeeDSP.Functions: yulewalk, freqz

f1 = [0, 0.6, 0.6, 1]
m1 = [1, 1, 0, 0]

b1,a1 = yulewalk(8,f1,m1)
h1,w1 = freqz(b1,a1,128)

p = plot(w1/π, mag2db.(abs.(h1)),
         xlabel = "ω/π",
         ylabel = "Magnitude (dB)",
         grid = true,
         legend = false,
         linecolor = :blue)

vline!(f1[2:3], linestyle = :dash, linecolor = :black)

yulewalk 1

Увеличим затухание в полосе подавления, указав более широкую переходную полосу.

f2 = [0, 0.55, 0.6, 0.65, 1]
m2 = [1, 1, 0.5, 0, 0]

b2,a2 = yulewalk(8,f2,m2);
h2,w2 = freqz(b2,a2,128)

plot!(w2/π, mag2db.(abs.(h2)),
      linecolor = :red)

yulewalk 2

Советы

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

Алгоритмы

Функция yulewalk конструирует рекурсивные цифровые БИХ-фильтры, используя метод наименьших квадратов для аппроксимации к заданной частотной характеристике. Аппроксимация выполняется во временной области.

  • Для вычисления коэффициентов знаменателя функция yulewalk использует модифицированные уравнения Юла — Уокера, коэффициенты корреляции которых вычисляются с помощью обратного преобразования Фурье заданной частотной характеристики.

  • Для вычисления числителя функция yulewalk выполняет следующие шаги:

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

    2. Вычисляет полную частотную характеристику, соответствующую полиномам числителя и знаменателя.

    3. Использует метод спектральной факторизации для получения импульсной характеристики фильтра.

    4. Получает полином числителя путем аппроксимации методом наименьших квадратов этой импульсной характеристики.

Литература

  1. Friedlander, B., and Boaz Porat. The Modified Yule-Walker Method of ARMA Spectral Estimation. IEEE® Transactions on Aerospace Electronic Systems. Vol. AES-20, Number 2, 1984, pp. 158–173.