Вот тебе формула, как получить АЧХ и ФЧХ приведенного выше фильтра, зная его коэффициенты:
H(z) = (b0 + b1*z) / (1 + a1*z)
H(z) называется передаточной функцией фильтра. Это функция комплексного переменного z, принимающая также комплексные значения. Чтобы получить АЧХ по мощности, нужно найти квадрат модуля H(z), а чтобы получить ФЧХ - нужно найти аргумент H(z).
Переменная z зависит от интересующей частоты следующим образом:
z = exp(j*w*T),
где j - мнимая единица,
w = 2*pi*f - циклическая частота, которая равна обычной частоте f, умноженной на 2*pi,
T = 1/fs - период дискретизации, который равен обратной величине от частоты дискретизации.
Имея приведенные выше формулы и требуемые частоты среза, можно составить систему из двух уравнений, решив которую, найти искомые коэффициенты. Это прямой путь, хотя он практически никогда не используется для синтеза фильтров ввиду своей сложности.
Обычно цифровые фильтры синтезируются на основе аналоговых прототипов, которые имеют передаточную функцию вида:
H(s) = (b0 + b1*s) / (1 + a1*s)
Где s = j*w - произведение циклической частоты на мнимую единицу.
Как видно, эта формула намного проще, в ней нет комплексных экспонент, и уравнения на ее основе решаются напрямую (в случае фильтра первого порядка) или рядом точных методов (в случае фильтров высоких порядков).
Когда известны коэффициенты аналогового фильтра-прототипа, применяют билинейное преобразование и получают коэффициенты цифрового фильтра.
Реализовывать методы синтеза фильтров в каждой программе, использующей фильтры, нецелесообразно. Особенно если менять параметры этих фильтров по ходу работы программы не требуется. Есть пакеты для синтеза фильтров, например к Matlab идет Signal Processing Toolbox, которая содержит мощное приложение fdatool, которым я, собственно, и рассчитал приведенный в предыдущем посте фильтр.
Программа, которая может сама рассчитать необходимые для своей работы фильтры, более гибка. Но следует учитывать, что это срабатывает только в ряде простых случаев. Иногда расчет фильтров для конкретных применений является итеративным процессом, требующим присутствие человека для принятия компромиссных решений. Кроме того, некоторые методы расчета фильтров не сходятся гарантированно или требуют слишком много ресурсов для своей работы. В этих случаях также гораздо надежнее иметь заранее рассчитанный фильтр (или их набор), чем нести риск наткнуться на отказ алгоритма.
Рекомендую книгу на английском языке: D. Schlichthaerle "Digital filters: basics and design". Очень доходчиво написано, по сравнению с другими источниками.