exponenta event banner

фильтр

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] -по-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) z 1 +... + b (nb + 1) z nb1 + a (2) z − 1 +... + a (na + 1) z − naX (z),

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

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

a (1) y (n) = b (1) x (n) + b (2) x (n 1) +... b (nb + 1) x (n nb) a (2) y (n − 1) −... − a (na + 1) y (n − na).

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

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

y (m) = b (1) x (m) + w1 (m 1) w1 (m) = b (2) x (m ) +   w2  (m  −  1 )  −  a  ( 2 )  y  ( m) = ⋮wn−2 (m) = b (n 1) x (m) + wn 1 (m 1) a (n 1) y (m) wn − 1 (m) =

Совет

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

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

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

Ссылки

[1] Оппенгейм, Алан В., Рональд В. Шефер и Джон Р. Бак. Дискретно-временная обработка сигналов. Река Верхнее Седло, Нью-Джерси: Прентис-Холл, 1999.

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

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