filter

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

Описание

пример

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

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

  • Если 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')

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

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 и возвратите 1D цифровой фильтр каждой строки. Постройте первую строку исходных данных против отфильтрованных данных.

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
plot(t,x(2,:))
hold on
plot(t,y(2,:))
legend('Input Data','Filtered Data')
title('Second Row')

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

Сгенерируйте большую случайную последовательность данных и разделите ее в два сегмента, 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]-3-на-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 исходно вычисляет в одинарной точности и 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]-3-на-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).

Советы

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

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

  • Смотрите Цифровую Фильтрацию (Signal Processing Toolbox) для больше при фильтрации функций.

Ссылки

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

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

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

|

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