При попытке написать Фильтр Бесселя, вычисляю передаточную ф-цю на s плоскости, сравниваю с результатами пакета Filter Solutions - получаю совпадения.
При переходе к z плоскости получаю очень небольшие отличия - но результат начинает расходится.
Если взять коэффициенты из Filter Solutions результат правдоподобный.
H(s) = d0/Bn(s) - n - порядок фильтра; Bn = SUMMA(0-n)dk*s^k; dk = (2n-k)!/2^(n-k)/k!/(n-k)!;
H(z) = |
|s=(1-z)/(1+z)
М.б. кто подскажет, где я наврал?
[quote name='sgkha' date='Jan 13 2006, 13:23' post='77701']
При попытке написать фильтр Бесселя, по-видимому где-то вру (с завидной регулярностью) при переходе на z плоскость:
// coeffbin - вычисление биноминальных коэффициентыов
// o - нормированная частота
for (k = 0; k <= N; k++) b[k] = coeffbin(N, k)*o;
for (k = 0; k <= N; k++) {
for (l = 0; l <= k; l++) {
for(j = 0; j <= (N - k); j++) {
q = l + j;
x = pow(-1,l)*coeffbin(k, l)*coeffbin(N - k, j);
x *= d[k];
x *= pow(y,k);
a[q] += x;
}
}
}
//d[k] - коэффициенты передаточной ф-ции H(s) = d0/Bn(s) - n - порядок
//фильтра; Bn = SUMMA(0-n)dk*s^k; dk = (2n-k)!/2^(n-k)/k!/(n-k)!;
//b и a - коэфф. передат. ф-ции
//H(z) = (b[0]+ b[1]*z...b[n]*z^n)/(a[0]+a[1]*z+...a[n]*z^n)