如何使用滤波器去除信号中的颠簸?

信息处理 matlab 过滤器 过滤器设计 低通滤波器 数字滤波器
2022-02-24 00:48:37

我只想拥有信号的斜率。我能怎么做?我曾尝试应用一些过滤器,但到目前为止,我还不能一针见血。我用matlab。 在此处输入图像描述

1个回答

像这样的隆起很可能是宽带的,尤其是在急剧发作的情况下。另外,这条线在傅里叶域中可能很难处理。因此,用经典的线性滤波器去除组合是复杂的。这个问题非常类似于基线、背景或趋势移除,在此处的其他地方进行了回答。

有几个选项是可能的,例如:

  • 使用基于中值或最小/最大统计的非线性滤波器,
  • 使用形态算子:一个滚动的球,很多直线段等。
  • 使用有关数据模型的知识,例如线性方程:y=ax+b,或者凸起在“上方”的事实,
  • 使用适当的数据保真度和惩罚将上述内容组合成一个变分公式。

在您的示例中,我怀疑具有稳健距离(如最小绝对失真)的经典线性拟合可以完成这项工作。我将调用所有上述过滤器,从广义上讲,您将根据其他某种组合替换一个值。

您也可以将以下稳健回归称为 LAD 拟合。工作中的一个例子:

在线上牢固安装的凸块

% Standard and Robust fit of a degree 1 polynomial w/ a bump
nSample = 1000;
% Create a similar composite signal
time = linspace(0,5,nSample)';
polyCoef = [0.2  0];
dataLine = polyval(polyCoef,time);
dataParabola = -8*(time-2).*(time-3);
dataParabola(dataParabola < 0) = 0;
data = dataLine+dataParabola;

% Use Matlab curve fitting toolbox
optsRobust = fitoptions('Method','LinearLeastSquares','Robust','LAR');
[fitObject,gof] = fit(time,data,'poly1',optsRobust);
h1=plot(fitObject,time,data);
grid on