Есть ли способ в Matlab создать фильтр нижних частот, я знаю, что могу использовать функцию фильтра, но не уверен, как ее использовать, мне дали следующую формулу для моего фильтра нижних частот H (z) = 1 (1 - z^-4)^2 / 16 (1 - z^-1)^2 с частотой среза 20 Гц
Фильтр нижних частот Matlab
Ответы (2)
Функция filter
позволяет применить фильтр к вектору. Вам все еще нужно предоставить коэффициенты фильтра. Если вы посмотрите на документацию по фильтру, вы увидите, что вам нужно задайте два вектора b
и a
, элементами которых являются коэффициенты z в убывающих степенях, где 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), указанный выше, определенно не является фильтром нижних частот. Это больше похоже на какой-то странный каскад гребенчатого фильтра сам с собой.
Если вы хотите создать свой собственный фильтр и при условии, что у вас есть набор инструментов для обработки сигналов, самое простое, что можно сделать, — это разработать фильтр с помощью 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 есть обзор различные методы проектирования цифровых фильтров.
Формула, которую вы дали: H (z) = 1 (1 - z ^ -4) ^ 2 / 16 (1 - z ^ -1) ^ 2 является Z-преобразованием фильтра. Это рациональная функция, что означает, что ваш фильтр является рекурсивным (БИХ) фильтром. В Matlab есть функция filter(b,a,X)
. b - коэффициенты числителя с убывающей степенью z, т.е. в вашем случае: (1*z^-0 + 0*z^-1 + 0*z^-2 + 0*z^-3 + 0*z^-4)^2, вы можете использовать conv()
для квадрата количества :
b = [1 0 0 0 -1]
b = conv(b,b)
а коэффициенты при знаменателе:
a = [1 -1]
a = 16 * conv(a,a)
Затем вы вызываете фильтр y = filter(b,a,x)
, где x
— ваши входные данные.
Вы также можете проверить частотную характеристику вашего фильтра с помощью freqz(b,a)
Надеюсь, это помогло.
H(z)
? Это больше похоже на гребенчатый фильтр, чем на фильтр нижних частот. - person mtrw   schedule 03.12.2011