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

poly2rc

Преобразование полинома фильтра прогнозирования в коэффициенты отражения.

Библиотека

EngeeDSP

Синтаксис

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

  • k,r0,errorFlag = poly2rc(a) — возвращает вектор k коэффициентов отражения решетчатой структуры, полученный из вектора a коэффициентов фильтра прогнозирования.

  • k,r0,errorFlag = poly2rc(a,eFinal) — также возвращает автокорреляцию с нулевой задержкой r0, основанную на итоговой ошибке прогнозирования eFinal, и логический флаг ошибки errorFlag, возможной при выполнении функции.

Аргументы

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

# a — коэффициенты фильтра прогнозирования
вектор

Details

Коэффициенты фильтра прогнозирования, заданные как вектор.

Значение аргумента a имеет следующие ограничения:

  • a[1] не может быть равно 0;

  • Если a[1] не равно 1, функция poly2rc нормализует полином фильтра прогнозирования на a[1].

Типы данных

Float32, Float64

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

Да

# eFinal — итоговая мощность ошибки прогнозирования
0 (по умолчанию) | скаляр

Details

Итоговая мощность ошибки прогнозирования, заданная как скаляр.

Типы данных

Float32, Float64

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

Да

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

# k — коэффициенты отражения
вектор

Details

Список коэффициентов отражения, возвращаемый в виде вектора-столбца длиной , где — количество элементов вектора a.

# r0 — автокорреляция с нулевой задержкой
скаляр

Details

Автокорреляция с нулевой задержкой, возвращаемая в виде скаляра.

# errorFlag — логический флаг ошибки
логическое значение

Details

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

  • errorFlag = false — ошибок не обнаружено, вычисления выполнены корректно.

  • errorFlag = true — при выполнении алгоритма возникла ошибка.

Примеры

Определение коэффициентов отражения по полиному фильтра прогнозирования

Details

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

import EngeeDSP.Functions: poly2rc

a = [1.0000 0.6149 0.9899 0.0000 0.0031 -0.0082]
efinal = 0.2
k, r0, errorFlag = poly2rc(a, efinal)

println("k = ", k, "\nr0 = ", r0)
k = [0.3090263579569403; 0.9800673984772592; 0.0031104252264590976; 0.008142727516998243; -0.0082;;]
r0 = 5.603228924655311

Ограничения

Если abs(k[i]) == 1 для любого i, то нахождение коэффициентов отражения является плохо обусловленной задачей. Функция poly2rc возвращает некоторые значения NaN и выдает предупреждение в таких случаях.

Советы

Простой и быстрый способ проверить, лежат ли все корни числа a внутри единичной окружности, — это проверить, имеют ли все элементы вектора k величину меньше 1.

stable = all(abs.(poly2rc(a)) .< 1)

Алгоритмы

Функция poly2rc реализует следующее рекурсивное соотношение:



Это соотношение основано на рекурсии Левинсона [1]. Для его реализации функция poly2rc проходит цикл по вектору a в обратном порядке после отбрасывания его первого элемента. Для каждой итерации i цикла функция:

  1. Приравнивает k[i] к a[i].

  2. Применяет второе соотношение, описанное выше, к элементам с 1 по i вектора a.

    a = (a - k[i] * reverse(a)) / (1 - k[i]^2)

Литература

  1. Kay, Steven M. Modern Spectral Estimation. Englewood Cliffs, NJ: Prentice-Hall, 1988.