filter

1-D цифровой фильтр

Описание

пример

y = filter(b,a,x) фильтрует входные данные x использование рациональной передаточной функции, заданной коэффициентами числителя и знаменателя b и a.

Если a(1) не равно 1, затем filter нормализует коэффициенты фильтра по a(1). Поэтому a(1) должно быть ненулевым.

  • Если x является вектором, тогда filter возвращает отфильтрованные данные в виде вектора того же размера, что и x.

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

  • Если x является многомерным массивом, затем filter действует вдоль первого измерения массива, размер которого не равен 1.

пример

y = filter(b,a,x,zi) использует начальные условия zi для задержек фильтра. Длина zi должен равняться max(length(a),length(b))-1.

пример

y = filter(b,a,x,zi,dim) действует вдоль размерной dim. Для примера, если x является матрицей, тогда filter(b,a,x,zi,2) возвращает отфильтрованные данные для каждой строки.

пример

[y,zf] = filter(___) также возвращает конечные условия zf из задержек фильтра, с использованием любого из предыдущих синтаксисов.

Примеры

свернуть все

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

Создайте вектор-строку 1 на 100 синусоидальных данных, который поврежден случайным шумом.

t = linspace(-pi,pi,100);
rng default  %initialize random number generator
x = sin(t) + 0.25*rand(size(t));

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

y(n)=1windowSize(x(n)+x(n-1)+...+x(n-(windowSize-1))).

Для размера окна 5 вычислите коэффициенты числителя и знаменателя для рациональной передаточной функции.

windowSize = 5; 
b = (1/windowSize)*ones(1,windowSize);
a = 1;

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

y = filter(b,a,x);

plot(t,x)
hold on
plot(t,y)
legend('Input Data','Filtered Data')

Figure contains an axes. The axes contains 2 objects of type line. These objects represent Input Data, Filtered Data.

Этот пример фильтрует матрицу данных со следующей рациональной передаточной функцией.

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

Создайте матрицу 2 на 15 случайных входных данных.

rng default  %initialize random number generator
x = rand(2,15);

Задайте коэффициенты числителя и знаменателя для рациональной передаточной функции.

b = 1;
a = [1 -0.2];

Примените передаточную функцию ко второму измерению x и возвращает 1-D цифровой фильтр каждой строки. Постройте график первой строки исходных данных относительно отфильтрованных данных.

y = filter(b,a,x,[],2);

t = 0:length(x)-1;  %index vector

plot(t,x(1,:))
hold on
plot(t,y(1,:))
legend('Input Data','Filtered Data')
title('First Row')

Figure contains an axes. The axes with title First Row contains 2 objects of type line. These objects represent Input Data, Filtered Data.

Постройте график второй строки входных данных относительно отфильтрованных данных.

figure
plot(t,x(2,:))
hold on
plot(t,y(2,:))
legend('Input Data','Filtered Data')
title('Second Row')

Figure contains an axes. The axes with title Second Row contains 2 objects of type line. These objects represent Input Data, Filtered Data.

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

Сгенерируйте большую случайную последовательность данных и разделите ее на два сегмента, x1 и x2.

x = randn(10000,1);

x1 = x(1:5000);
x2 = x(5001:end);

Вся последовательность, x, является вертикальной конкатенацией x1 и x2.

Задайте коэффициенты числителя и знаменателя для рациональной передаточной функции,

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

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

Фильтрация подпоследовательностей x1 и x2 по одному за раз. Вывод конечных условий из фильтрации x1 чтобы сохранить внутреннее состояние фильтра в конце первого сегмента.

[y1,zf] = filter(b,a,x1);

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

y2 = filter(b,a,x2,zf);

y1 - отфильтрованные данные из x1, и y2 - отфильтрованные данные из x2. Вся отфильтрованная последовательность является вертикальной конкатенацией y1 и y2.

Фильтрация всей последовательности одновременно для сравнения.

y = filter(b,a,x);

isequal(y,[y1;y2])
ans = logical
   1

Входные параметры

свернуть все

Коэффициенты числителя рациональной передаточной функции, заданные как вектор.

Типы данных: double | single | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | logical
Поддержка комплексного числа: Да

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

Типы данных: double | single | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | logical
Поддержка комплексного числа: Да

Входные данные, заданные как вектор, матрица или многомерный массив.

Типы данных: double | single | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | logical
Поддержка комплексного числа: Да

Начальные условия для задержек фильтра, заданные как векторный, матричный или многомерный массив.

  • Если zi является вектором, тогда его длина должна быть max(length(a),length(b))-1.

  • Если zi является матрицей или многомерным массивом, тогда размер начальной размерности должен быть max(length(a),length(b))-1. Размер каждой оставшейся размерности должен совпадать с размером соответствующей размерности x. Например, рассмотрите использование filter по второму измерению (dim = 2) массива 3 на 4 на 5 x. Область массива zi должен иметь размер [max(length(a),length(b))-1] -by-3-by-5.

Значение по умолчанию, заданное как [], инициализирует все задержки фильтра до нуля.

Типы данных: double | single | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | logical
Поддержка комплексного числа: Да

Размерность для работы, заданная как положительный целочисленный скаляр Если значение не задано, то по умолчанию это первое измерение массива, не равный 1.

Рассмотрим двумерный входной массив, x.

  • Если dim = 1, затем filter(b,a,x,zi,1)работает по строкам x и возвращает фильтр, примененный к каждому столбцу.

  • Если dim = 2, затем filter(b,a,x,zi,2) работы вдоль столбцов x и возвращает фильтр, примененный к каждой строке.

Если dim больше ndims(x), затем filter возвращает x.

Типы данных: double | single | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64 | logical

Выходные аргументы

свернуть все

Отфильтрованные данные, возвращенные в виде векторного, матричного или многомерного массива того же размера, что и входные данные, x.

Если x имеет тип single, затем filter natival вычисляет в одинарной точности и y также относится к типу single. В противном случае y возвращается как тип double.

Типы данных: double | single

Окончательные условия для задержек фильтра, возвращенные в виде вектора, матрицы или многомерного массива.

  • Если x является вектором, тогда zf является вектор-столбец длины max(length(a),length(b))-1.

  • Если x является матричным или многомерным массивом, затем zf - массив векторов-столбцов длины max(length(a),length(b))-1, таким образом, чтобы количество столбцов в zf эквивалентно количеству столбцов в x. Например, рассмотрите использование filter по второму измерению (dim = 2) массива 3 на 4 на 5 x. Область массива zf имеет размер [max(length(a),length(b))-1] -by-3-by-5.

Типы данных: double | single

Подробнее о

свернуть все

Рациональная передаточная функция

Область описания операции ввода-вывода filter операция над вектором в области Z-преобразования является рациональной передаточной функцией. Рациональная передаточная функция имеет вид

Y(z)=b(1)+b(2)z1+...+b(nb+1)znb1+a(2)z1+...+a(na+1)znaX(z),

который обрабатывает как конечные импульсные характеристики, так и БИХ [1]. na - порядок фильтра с обратной связью, и nb - порядок фильтра с feedforward. Из-за нормализации примите a (1) = 1 .

Можно также выразить рациональную передаточную функцию как разностное уравнение

a(1)y(n)=b(1)x(n)+b(2)x(n1)+...+b(nb+1)x(nnb)a(2)y(n1)...a(na+1)y(nna).

Кроме того, можно представлять рациональную передаточную функцию с помощью ее транспонированной реализации в прямой форме II, как на следующей схеме. Вот, na = nb.

Область операции filter на выборке m задается разностными уравнениями во временной области

y(m)=b(1)x(m)+w1(m1)w1(m)=b(2)x(m)+w2(m1)a(2)y(m)       =                 wn2(m)=b(n1)x(m)+wn1(m1)a(n1)y(m)wn1(m)=b(n)x(m)a(n)y(m).

Совет

  • Как использовать filter функция со b коэффициенты из конечная импульсная характеристика, используйте y = filter(b,1,x).

  • Если у вас есть Signal Processing Toolbox™, используйте y = filter(d,x) для фильтрации входного сигнала x с digitalFilter (Signal Processing Toolbox) объект d. Чтобы сгенерировать d основываясь на спецификациях частотной характеристики, использование designfilt (Signal Processing Toolbox).

  • Дополнительные сведения о функциях фильтрации см. в разделе Цифровая фильтрация ( Signal Processing Toolbox).

Ссылки

[1] Oppenheim, Alan V., Ronald W. Schafer, and John R. Buck. Обработка сигнала в дискретном времени. Upper Saddle River, NJ: Prentice Hall, 1999.

Расширенные возможности

..
Представлено до R2006a