Я пытаюсь обернуть голову вокруг линейного предсказания и решил, что я напишу базовый пример на Python, чтобы проверить мое понимание. Идея, лежащая в основе кодирования с линейным предсказанием, заключается в оценке будущих выборок сигнала на основе линейных комбинаций предыдущих выборок.
Я использую модуль lpc в scikits.talkbox, поэтому мне не нужно самому писать какой-либо алгоритм. Вот мой код:
import math
import numpy as np
from scikits.talkbox.linpred.levinson_lpc import levinson, acorr_lpc, lpc
x = np.linspace(0,11,12)
order = 5
"""
a = solution of the inversion
e = prediction error
k = reflection coefficients
"""
(a,e,k) = lpc(x,order,axis=-1)
recon = []
for i in range(order,len(x)):
sum = 0
for j in range(order):
sum += -k[j]*x[i-j-1]
sum += math.sqrt(e)
recon.append(sum)
print(recon)
print(x[order:len(x)])
, который дает вывод
[5.618790615323507, 6.316875690307965, 7.0149607652924235,
7.713045840276882, 8.411130915261339, 9.109215990245799, 9.807301065230257,
10.505386140214716]
[ 4. 5. 6. 7. 8. 9. 10. 11.]
Меня беспокоит то, что я как-то неправильно это реализую, потому что я подумал, что если мой входной массив является линейным сигналом, у него не должно возникнуть проблем с предсказанием будущих значений на основе прошлых значений. Тем не менее, он, кажется, имеет особенно высокую ошибку, особенно для первых нескольких значений. Может ли кто-нибудь сказать мне, правильно ли я это реализую, или указать несколько примеров, где это делается в Python? Любая помощь с благодарностью, спасибо!