poly2rc
Преобразование полинома фильтра прогнозирования в коэффициенты отражения.
| Библиотека |
|
Аргументы
Входные аргументы
#
a —
коэффициенты фильтра прогнозирования
вектор
Details
Коэффициенты фильтра прогнозирования, заданные как вектор.
|
Значение аргумента
|
| Типы данных |
|
| Поддержка комплексных чисел |
Да |
#
eFinal —
итоговая мощность ошибки прогнозирования
0 (по умолчанию) | скаляр
Details
Итоговая мощность ошибки прогнозирования, заданная как скаляр.
| Типы данных |
|
| Поддержка комплексных чисел |
Да |
Выходные аргументы
#
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 цикла функция:
-
Приравнивает
k[i]кa[i]. -
Применяет второе соотношение, описанное выше, к элементам с
1поiвектораa.a = (a - k[i] * reverse(a)) / (1 - k[i]^2)