То есть z -1 означает задержку в одну единицу.
Давайте возьмем H p = (1-p) / (1-pz -1 ).
Если мы будем следовать условию «x» для входа и «y» для выхода, передаточная функция H = y / x (= выход / вход)
, поэтому мы получаем y / x = (1-p) / (1-pz -1 )
или (1-p) x = (1-pz -1 ) y
(1-p) x [n] = y [n] - py [n-1]
или: y [n] = py [n-1] + (1-p) x [n]
В коде C это может быть реализовано
y += (1-p)*(x-y);
без какого-либо дополнительного состояния, кроме использования выходного "y" в качестве самой переменной состояния. Или вы можете пойти на более буквальный подход:
y_delayed_1 = y;
y = p*y_delayed_1 + (1-p)*x;
Что касается других уравнений, то все они являются типичными уравнениями, за исключением того второго уравнения, которое выглядит, возможно, как способ выбора либо H & Beta; = 1-z -1 ИЛИ 1-z -2 . (что такое N?)
Фильтры немного расплывчаты, и вам будет сложнее с ними работать, если вы не найдете несколько предварительно упакованных фильтров. В общем они имеют вид
H = H0 * (1 + az -1 + bz -2 + cz -3 ...) / (1 + rz -1 + SZ -2 + * TZ +1053 * -3 * * ... тысяча пятьдесят-четыре) * +1055 *
и все, что вы делаете, это записываете H = y / x, перемножайте, чтобы получить
H0 * (1 + az -1 + bz -2 + cz -3 ...) * x = (1 + rz -1 + sz -2 + tz -3 ...) * y
, а затем изолируйте «y», делая выход «y» линейной функцией различных задержек самого себя и входа.
Но разработка фильтров (выбор a, b, c и т. Д.) Сложнее, чем их реализация, по большей части.