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')

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 и возвратите 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 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]-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 является порядком фильтра прямого распространения. Из-за нормализации, примите 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] Оппенхейм, Алан V, Рональд В. Шафер и Джон Р. Бак. Обработка сигналов дискретного времени. Верхний Сэддл-Ривер, NJ: Prentice Hall, 1999.

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

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

|

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