filter

Функция одномерной цифровой фильтрации массива

Синтаксис:

y = filter(b,a,x);
y = filter(b,a,x,zi);
y = filter(b,a,M,zi,dim);

Аргументы:

b - массив коэффициентов числителя передаточной функции фильтра;

a - массив коэффициентов знаменателя передаточной функции фильтра;

x - вектор или матрица, составляющие массив значений идного или нескольких фильтруемых сигналов;

zi - вектор или матрица, содержит начальные значения задержек фильтра для одного или нескольких фильтруемых сигналов;

dim - целое число 1 или 2, обозначающее направление, вдоль которого производится фильтрация матрицы; 1 - по столбцам, 2 - по строкам.

Описание:

filter(b,a,x) – функция производит фильтрацию сигнала x, с помощью цифрового фильтра, заданного коэффициентами числителя и знаменателя a и b передаточной функции; x может быть вектором или матрицей, содержащими один или несколько фильтруемых сигналов; сигналы упоковываются в матрицы по стролбцам;

filter(b,a,x,zi) - функция производит фильтрацию сигнала x, используя начальные значения задержек фильтра zi; если x - вектор, то zi должно иметь размерность равную max(cols(a), cols(b))-1; если x - матрица, то zi должно быть матрицей, с количеством столбцов, равным количеству фильтруемых сигналов и количеством строк, равным max(cols(a), cols(b))-1;

filter(b,a,M,zi,dim) - функция производит фильтрацию матрицы M, вдоль размерности dim (1 - фильтрация по столбцам, 2 - фильтрация по строкам); матрица zi может быть пустой [[]].

Результат:

Функция возвращает массив или матрицу, в зависимости от типа входного сигнала.

Пример:

initialization
t = vector(101);
x1 = vector(101);
y33 = vector(101);
y44 = vector(101);

for (i=2,101)        // массив аргументов
t[i] = t[i-1]+0.1;

b = [0.2 0.2 0.2];     // коэфиициенты фильтра
a = [1, 0.2];

b2 = [0.4 0.4 0.4];   // ненормированные коэфиициенты фильтра
a2 = [2, 0.4];

zi2 = [5 4];            // начальные условия запаздываний фильтра (zi)
zi4 = [[5 5 5];[4 4 4]];
end;

// на каждом шаге:
// формируем массив данных для фильтрации
for (i=1,101)
x1[i] = sin(1+5*sin(time/10)*t[i]) + 0.4*rand;
		
// формируем матрицы данных для фильтрации
x2 = [fliplr(x1),x1,x1];
x3 = transp(x2);		

// фильтруем
y1 = filter(b,a,x1);          // вектор
y12 = filter(b2,a2,x1);       // вектор с ненормированными коэффициентами фильтра
y2 = filter(b,a,x1,zi2);      // вектор с zi
y3 = filter(b,a,x3);          // матрицу по столбцам
y4 = filter(b,a,x3,zi4);      // матрицу по столбцам с zi
y5 = filter(b,a,x2,[[]],2);   // матрицу по строкам (zi - пустая матрица)

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