Нужда заставила заняться меня цифровыми фильтрами. Скачал я програмку для расчёта фильтров "Filter Solutions V8" она ещё и генерирует код на С для реализации фильтра, который я и использовал для экспериментов.
Режекторные фильтры на 50 и 100 Гц работают просто замечательно. А вот с полосовым проблемма.
Вот фильтр:
Butterworth 1 порядка, с центральной частотой 20 Гц, полосой пропускания 10 Гц. Частота дискретизации 1024 Гц. программа расчитала мне следующую передаточную функцию:
Нажмите для просмотра прикрепленного файла
Получилась вот такая расчётная АЧХ:
Нажмите для просмотра прикрепленного файла
Код фильтра:
####################################################################
double sumnum, sumden; int i;
static double delay[4] = {0.0,0.0,0.0,0.0};
static double znum[4] = {
0.0,
-3.453957173e-02,
0.0,
3.453957173e-02
};
static double zden[3] = {
.1504718423,
.6323120647,
-1.765855935
};
float Loop(float invar)
{
sumden=0.0;
sumnum=0.0;
for (i=0;i<=2;i++){
delay[i] = delay[i+1];
sumden += delay[i]*zden[i];
sumnum += delay[i]*znum[i];
}
delay[3] = invar-sumden;
sumnum += delay[3]*znum[3];
return sumnum;
}
###################################################################
При проверке на Atmega128 в Протеусе получил вот такое:
Нажмите для просмотра прикрепленного файла
Входная синусойда 20 Гц - резонансная частота фильтра (вверху), внизу выходной сигнал фильтра.
В чём может быть причина такого поведения фильтра?
Помогите пожалуйста, сам пока не додумался.

Спасибо!