Возможно БИХ-фильтр будет эффективнее в вычислительном плане.
Фильтр можно рассчитать в Matlab. К примеру фильтр Баттерворта:
Код:
close all;
clear all;
% Порядок фильтра
order = 2;
% Нормированная частота среза
% Wn = Fd/(2*Fn), где Fd - частота дискретизации,Fn-частота среза в Гц
Wn = 0.2;
% Расчет фильтр
[b,a] = butter(order,Wn);
%[b,a] = besself(order,Wn);
b
a
% Вывод АЧХ
[h,w]=freqz(b,a);
figure('Name', 'Response');
subplot(211);
plot(w/(pi), abs(h));
subplot(212);
plot(w/(pi), unwrap(angle(h)));
Фильтр Бесселя имеет линейную ФЧХ, поэтому для некоторых задач он будет эффективнее и вносить меньше искажений.
Если Вам просто нужно сгладить сигнал - воспользуйтесь алгоритмом простого скользящего среднего: это просто скользящее усреднение по данным.
Так же для устранения шума подойдет и инерционное звено первого порядка:
y[k] = y[k - 1] + K*( x[k] - y[k-1] );Если вам надо фильтровать сигнал с датчика используйте выраженние
filtered_data += K*(in_data - filtered_data);где K - определяет постоянную времени и подбирается в зависимости от условий и полосы пропускания.
Полезный ресурс
http://dsplib.ru/