какой цифровой фильтр этот анализирующий код

Я прохожу программу с нулевыми комментариями.
Это фильтр сигналов, и я хотел бы знать, какой это тип
Пока у меня есть это:
массивы (длина = порядок):

  • X: содержит предыдущие входные значения фильтра
  • Y: содержит предыдущие выходные значения фильтра
  • A: содержит коэффициенты
  • B: содержит коэффициенты

Шаги фильтра:

  • формула примерно:
    OUT = SUM (i = 0 по порядку) (X [i] * B [i] — Y [i] * A [i])

  • смещение окна: все X и Y перемещаются на одну позицию, удаляя самые старые значения и добавляются новые входные и выходные значения.

Я попытался найти, какой это фильтр, но я немного застрял, особенно обратная связь с предыдущими выходами — это то, чего я раньше не видел (раньше я использовал только очень и очень простые фильтры).

source:

`float_type floatFilter::addPoint(float_type P)
{
//P is sample value`

if (_pfilterCoefs == NULL) return P;

//
if (_reset)
{
for (uint16_t i=0;i<_pfilterCoefs->order;i++)
{
*(_Ys+i)= _pfilterCoefs->lowpass ? P : 0;
*(_Xs+i)= _pfilterCoefs->lowpass ? P : 0;
}

_reset=false;
}

//calculate output
float_type Y = ((*_pfilterCoefs->Bs)) * P;
for (uint16_t i=0; i<_pfilterCoefs->order; i++)
{
Y+=(*(_Xs+i)) *  (*(_pfilterCoefs->Bs + (_pfilterCoefs->order-i))) -
(*(_Ys+i)) *  (*(_pfilterCoefs->As + (_pfilterCoefs->order-1-i)));
}

//move filter one step (
for (uint16_t i = 0; i<(_pfilterCoefs->order-1);i++)
{
*(_Ys+i)=*(_Ys+i+1);
*(_Xs+i)=*(_Xs+i+1);
}
*(_Xs + _pfilterCoefs->order - 1) = P; //the most recent input is added in the end
*(_Ys + _pfilterCoefs->order - 1) = Y; //the most recent output is added in the endreturn *(_Ys + _pfilterCoefs->order-1); //this is the most recent output.

2

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …