Функция filter
позволяет применять фильтр к вектору.Вам все еще нужно предоставить коэффициенты фильтра.Если вы посмотрите на документацию по фильтру , вы увидите, что вам нужно указать два вектора b
и a
, элементами которых являются коэффициенты z в убывающих степенях, где z - переменная частотной области вг-преобразования.Поскольку у вас есть выражение для вашего фильтра, заданное как z-преобразование, коэффициенты легко найти.Сначала напишем числитель вашего фильтра:
(1/16)*(1 - z^-4)^2 = (1/16)*(1 - 2z^-4 + z^-16)
= (1/16)*(1 + 0z^-1 + 0z^-2 + 0z^-3 - 2z^-4 + 0z^5 + 0z^-6 ... + z^-16)
Итак, вектор b
равен b = (1/16)*[1 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 1]
.Аналогично, вектор a
равен a = [1 -2 1]
.Так что теперь вы можете отфильтровать вектор данных x
, чтобы получить результат y
, просто выполнив y = filter(b,a,x);
.
Сказав все это, указанная выше H (z) определенно не является низкочастотнымфильтр.Это больше похоже на какой-то странный каскад гребенчатого фильтра с самим собой.
Если вы хотите спроектировать свой собственный фильтр и предположить, что у вас есть набор инструментов для обработки сигналов, то самое простое, что нужно сделать, это спроектировать фильтр с использованием Matlab fir1
функция:
h = fir1(N, 20/(Fs/2)); %# N is filter length, Fs is sampling frequency (Hz)
, которую вы затем можете использовать в функции filter
:
y = filter(h, 1, x); %# second param is 1 because this is an FIR filter
Вам нужно будет выбрать N самостоятельно.Как правило, большие значения N обеспечивают лучшие фильтры, где лучше = отклоняет больше частот выше 20 Гц.Если ваше значение N начинает становиться настолько большим, что вызывает странное поведение (вычислительные ошибки, медленные реализации, недопустимые переходные процессы запуска / завершения в результирующих данных), вы можете рассмотреть более сложную конструкцию фильтра.Документация Mathworks содержит обзор различных методов проектирования цифровых фильтров.