Как использовать фильтр Lazy_LPC (Z Transform) для прогнозирования - PullRequest
1 голос
/ 02 октября 2019

Я хочу использовать LPC (Linear Predictive Coding) в Python, чтобы предсказать следующее значение некоторых данных. Я использовал пакет audiolazy и получил уравнение Z-фильтра следующим образом: 1 - 0,625 * z ^ -1 + 0,25 * z ^ -2 + 0,125 * z ^ -3

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

Я нашел определение объекта фильтра A Zfilter (seq, memory = None,ноль = 0.0)

  • seq - любая итерация, которая будет выглядеть как входной поток для фильтра.

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

  • ноль - значение для заполнения памяти, когда это необходимо, и для отображения в качестве предыдущего ввода при наличиизадержка. По умолчанию 0.0.

  • Возвращает : поток, в котором отфильтрованы данные из входной последовательности.

У меня естьЗдесь 2 вопроса:

  1. У меня есть массив OriginData: d = [1,2,3,4], и я хочу предсказать следующее значение. Правильно ли вводить inputDta = [1,2,3,4,0] в качестве входных данных для Z-фильтра?
  2. Я не понимаю параметра памяти. Не могли бы вы объяснить это простыми примерами?

Вот мой код:

from audiolazy import *
d=[-0.94,  0.18, -0.34,0.57, -0.36,  1.23] # this is the origin data
acdata = acorr(d)                          # auto correlation
filt=levinson_durbin(acdata,3)             #obtain Z Filter
p=list(filt([ 0.57, -0.36,  1.23, 0]))     # [ 0.57, -0.36,  1.23, 0] is the input data to the 
                                             filter, I want to use 3 past data to predict the next 
                                             one


import matplotlib.pyplot as plt
d.append(p[-1])
plt.plot((adjdata['delta'][-7:]).values)
plt.plot(d)
plt.ylabel('some numbers')
plt.show()

введите описание изображения здесь

...