
Хотелось бы из него сделать что-то близкое к синусоиде. Для этого пропускаю его через фильтр НЧ.
Код фильтра был сгенерирован калькулятором ЗДЕСЬ для параметров:
-тип - Баттерворт
-порядок - 4
-сэмплинг - 11025
-частота среза - 5500
Код
#define NZEROS 4
#define NPOLES 4
#define GAIN 1.009351158e+00
static float xv[NZEROS+1], yv[NPOLES+1];
static void filterloop()
{ for (;;)
{ xv[0] = xv[1]; xv[1] = xv[2]; xv[2] = xv[3]; xv[3] = xv[4];
xv[4] = next input value / GAIN;
yv[0] = yv[1]; yv[1] = yv[2]; yv[2] = yv[3]; yv[3] = yv[4];
yv[4] = (xv[0] + xv[4]) + 4 * (xv[1] + xv[3]) + 6 * xv[2]
+ ( -0.9815567827 * yv[0]) + ( -3.9444991525 * yv[1])
+ ( -5.9443270236 * yv[2]) + ( -3.9813846512 * yv[3]);
next output value = yv[4];
}
}
#define NPOLES 4
#define GAIN 1.009351158e+00
static float xv[NZEROS+1], yv[NPOLES+1];
static void filterloop()
{ for (;;)
{ xv[0] = xv[1]; xv[1] = xv[2]; xv[2] = xv[3]; xv[3] = xv[4];
xv[4] = next input value / GAIN;
yv[0] = yv[1]; yv[1] = yv[2]; yv[2] = yv[3]; yv[3] = yv[4];
yv[4] = (xv[0] + xv[4]) + 4 * (xv[1] + xv[3]) + 6 * xv[2]
+ ( -0.9815567827 * yv[0]) + ( -3.9444991525 * yv[1])
+ ( -5.9443270236 * yv[2]) + ( -3.9813846512 * yv[3]);
next output value = yv[4];
}
}
Перевёл код в Матлаб

Но результат не понятен (верх - исходный,низ - результат):

Почему не получилась синусоида?
Я не правильно применил фильтр?
Я ошибся в коде Матлаба?