Рубрика «двоичная арифметика»

Спойлер: только для себя.

Итак: Представьте себе бесконечную влево ленту, на которой записаны нули и единицы, но в любой момент справа идёт конечная часть числа, а левее — бесконечные нули (они не влияют на значение). Всё движение происходит у правого края.

На этой ленте живёт клеточный автомат со следующими правилами:

  • Если крайний правый символ 0 — просто стираем его (равносильно делению на 2).

  • Если крайний правый символ 1 Читать полностью »

Код фильтра и теста

Вначале представим то, что можно быстро скопировать и вставить. Структура и функция расчёта одной итерации фильтра:

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; // выходной отсчёт и запаздывающий на один
}

Скетч для тестирования:

Читать полностью »

https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js