[an error occurred while processing this directive]
|
Вот уже на компе имеется такой дубовый алгоритм, осталось разве что на деревянных счетах считать:
B0 = (__int32) 1072470442;
B1 = (__int32) -2144940883;
B2 = (__int32) 1072470442;
A1 = (__int32) -2144939378;
A2 = (__int32) 1071200564;
x_n = Sample;
y_n = (__int64) B0 * (__int64) x_n;
y_n += (__int64) B1 * (__int64) x_n_1;
y_n += (__int64) B2 * (__int64) x_n_2;
y_n -= (__int64) A1 * (__int64) y_n_1;
y_n -= (__int64) A2 * (__int64) y_n_2;
x_n_2 = x_n_1;
x_n_1 = x_n;
y_n_2 = y_n_1;
y_n_1 = (__int32) ((y_n+0x20000000)>>30);
Sample = y_n_1;
Все имеет 32-х битную разрядность кроме y_n = 64 бита...
И Вы будете смеяться - не работает! :-(( То есть фильтрует и все-такое, но как только уровень сигнала подать с амплитудой меньше 2^12-2^11 - начинает возбуждаться и вырастает постоянка опять...
Если не опускаться ниже этих значений - все зашибись... :-/ Может просто глаз "замылился" на ощибки - ничего не могу понять...
Или может тут я округление не так делаю... Не знаю даже, вообще до базовых вещей спустился уже...