Фильтр низких частот Matlab - PullRequest
       18

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

1 голос
/ 02 декабря 2011

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

Ответы [ 2 ]

3 голосов
/ 02 декабря 2011

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

2 голосов
/ 04 декабря 2011

Формула, которую вы задали: H (z) = 1 (1 - z ^ -4) ^ 2/16 (1 - z ^ -1) ^ 2 - это Z-преобразование фильтра.Это рациональная функция, которая означает, что ваш фильтр является рекурсивным (IIR) фильтром.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)

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

...