Фильтр нижних частот Matlab

Есть ли способ в Matlab создать фильтр нижних частот, я знаю, что могу использовать функцию фильтра, но не уверен, как ее использовать, мне дали следующую формулу для моего фильтра нижних частот H (z) = 1 (1 - z^-4)^2 / 16 (1 - z^-1)^2 с частотой среза 20 Гц


person rjs    schedule 02.12.2011    source источник
comment
Вы можете, но вам нужен Signal Processing Toolbox. В противном случае вам придется проектировать его вручную.   -  person Phonon    schedule 02.12.2011
comment
@Phonon - добавил это к моему ответу, я забыл об этом. Спасибо.   -  person mtrw    schedule 02.12.2011
comment
Вы уверены, что это правильный H(z)? Это больше похоже на гребенчатый фильтр, чем на фильтр нижних частот.   -  person mtrw    schedule 03.12.2011
comment
да, знаете ли вы, как бы я использовал эту формулу в моем фильтре нижних частот?   -  person rjs    schedule 03.12.2011


Ответы (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 есть обзор различные методы проектирования цифровых фильтров.

person mtrw    schedule 02.12.2011
comment
Я новичок в обработке сигналов, мне дали следующую формулу для моего фильтра нижних частот H (z) = 1 (1 - z ^ -4) ^ 2 / 16 (1 - z ^ -1) ^ 2, вы можете скажите мне, как я могу его использовать, я понятия не имею, все, что мне сказали, это то, что мне нужно создать фильтр нижних частот с частотой среза 20 Гц - person rjs; 02.12.2011

Формула, которую вы дали: 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)

Надеюсь, это помогло.

person André Bergner    schedule 03.12.2011