Фильтры являются методами обработки данных, которые могут сгладить высокочастотные колебания данных или удалить периодические тренды определенной частоты от данных. В MATLAB® функция filter
фильтрует вектор данных x согласно следующему разностному уравнению, которое описывает фильтр на линии задержки с отводами.
В этом уравнении a и b являются векторами коэффициентов фильтра, Na является порядком фильтра обратной связи, и Nb является порядком фильтра feedforward. n является индексом текущего элемента x. Вывод y (n) является линейной комбинацией текущих и предыдущих элементов x и y.
Функция filter
использует заданные векторы коэффициентов a и b, чтобы отфильтровать входные данные x. Для получения дополнительной информации о разностных уравнениях, описывающих фильтры, см. [1].
Функция filter
является одним способом реализовать фильтр скользящего среднего значения, который является общими данными, сглаживающими метод.
Следующее разностное уравнение описывает фильтр, который усредняет зависящие от времени данные относительно текущего часа и трех предыдущих часов данных.
Импортируйте данные, которые описывают поток трафика в зависимости от времени, и присвойте первый столбец количеств автомобиля к векторному 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-преобразование разностного уравнения
следующая передаточная функция.
Используйте передаточную функцию
изменить амплитуду данных в count.dat
.
Загрузите данные и присвойте первый столбец векторному x
.
load count.dat
x = count(:,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.
conv
| filter
| filter2
| movmean
| smoothdata