Код фильтра и теста
Вначале представим то, что можно быстро скопировать и вставить. Структура и функция расчёта одной итерации фильтра:
typedef struct FirFrac15 {
int16_t x, x_1, y, y_1;
} FirFrac15;
#define N 3 //задание полосы пропускания (целое число)
void FirFrac15Calc(FirFrac15 *Filter) {
register int32_t Acc;
register int16_t xAcc = Filter->x + Filter->x_1;
Acc = (((int32_t)Filter->y_1 << (N + 1)) - ((int32_t)Filter->y_1 << 1) + (int32_t)xAcc) >> (N + 1);
Filter->y = (int16_t)Acc;
Filter->x_1 = Filter->x; // входной отсчёт и запаздывающий на один
Filter->y_1 = Filter->y; // выходной отсчёт и запаздывающий на один
}
Скетч для тестирования:
Читать полностью »



