Фильтрация данных

Фильтрация разностного уравнения

Фильтры являются методами обработки данных, которые могут сгладить высокочастотные колебания данных или удалить периодические тренды определенной частоты от данных. В MATLAB® функция filter фильтрует вектор данных x согласно следующему разностному уравнению, которое описывает фильтр на линии задержки с отводами.

a(1)y(n)=b(1)x(n)+b(2)x(n1)++b(Nb)x(nNb+1)                 a(2)y(n1)a(Na)y(nNa+1)

В этом уравнении a и b являются векторами коэффициентов фильтра, Na является порядком фильтра обратной связи, и Nb является порядком фильтра feedforward. n является индексом текущего элемента x. Вывод y (n) является линейной комбинацией текущих и предыдущих элементов x и y.

Функция filter использует заданные векторы коэффициентов a и b, чтобы отфильтровать входные данные x. Для получения дополнительной информации о разностных уравнениях, описывающих фильтры, см. [1].

Фильтр скользящего среднего значения данных трафика

Функция filter является одним способом реализовать фильтр скользящего среднего значения, который является общими данными, сглаживающими метод.

Следующее разностное уравнение описывает фильтр, который усредняет зависящие от времени данные относительно текущего часа и трех предыдущих часов данных.

y(n)=14x(n)+14x(n-1)+14x(n-2)+14x(n-3)

Импортируйте данные, которые описывают поток трафика в зависимости от времени, и присвойте первый столбец количеств автомобиля к векторному x.

load count.dat
x = count(:,1);

Создайте векторы коэффициентов фильтра.

a = 1;
b = [1/4 1/4 1/4 1/4];

Вычислите 4-часовое скользящее среднее значение данных и отобразите на графике и исходные данные и отфильтрованные данные.

y = filter(b,a,x);

t = 1:length(x);
plot(t,x,'--',t,y,'-')
legend('Original Data','Filtered Data')

Изменение амплитуды данных

Этот пример показывает, как изменить амплитуду вектора данных путем применения передаточной функции.

В цифровой обработке сигналов фильтры часто представляются передаточной функцией. Z-преобразование разностного уравнения

a(1)y(n)=b(1)x(n)+b(2)x(n-1)+...+b(Nb)x(n-Nb+1)-a(2)y(n-1)-...-a(Na)y(n-Na+1)

следующая передаточная функция.

Y(z)=H(z-1)X(z)=b(1)+b(2)z-1+...+b(Nb)z-Nb+1a(1)+a(2)z-1+...+a(Na)z-Na+1X(z)

Используйте передаточную функцию

H(z-1)=b(z-1)a(z-1)=2+3z-11+0.2z-1

изменить амплитуду данных в count.dat.

Загрузите данные и присвойте первый столбец векторному x.

load count.dat
x = count(:,1);

Создайте векторы коэффициентов фильтра согласно передаточной функции H(z-1).

a = [1 0.2];
b = [2 3];

Вычислите отфильтрованные данные и отобразите на графике и исходные данные и отфильтрованные данные. Этот фильтр, в основном, изменяет амплитуду исходных данных.

y = filter(b,a,x);

t = 1:length(x);
plot(t,x,'--',t,y,'-')
legend('Original Data','Filtered Data')

Ссылки

[1] Оппенхейм, Алан V, Рональд В. Шафер и Джон Р. Бак. Обработка сигналов дискретного времени. Верхний Сэддл-Ривер, NJ: Prentice Hall, 1999.

Смотрите также

| | | |

Похожие темы