滤波是一种信号处理技术。在机器学习中,滤波通常指的是对输入信号进行加工,以消除噪声、平滑信号或突出特定频率范围的信号。简单理解,就是对输入的信号进行过滤,减少数据中的噪声/波动,只留下真实/平稳/符合预期的信号,从而让我们的训练模型获得更好的表现数据预处理过程。
滤波器类型
针对不同类型的数据,我们往往也需要使用不同的手段对数据进行降噪,常见的滤波器有以下几种:
线性滤波器:线性滤波器遵循可加性和比例性,通过卷积运算处理信号。
时域滤波:作用于时间序列信号。比如我们观测某只股票的历史走势,我们会在处理时使用时域滤波,计算某个时间点的股价时,可以结合时间点前后多少时/天的均值,从而可以让数据更加平缓。
频域滤波涉及傅立叶变换,允许选择性增强或抑制特定频率。
低通滤波保留低频,
高通滤波强调高频,
带通滤波则针对特定频率范围。
线性滤波器
线性滤波器的输出是输入信号与滤波器冲击响应之间的线性组合。
假设我们有一个线性滤波器,其冲击响应为 h(t)。如果我们将输入信号 x(t) 与该冲击响应进行卷积,得到输出信号 y(t),即:
$$y(t) = x(t) h(t)$$
`其中, 表示卷积运算。这个公式描述了线性滤波器的输出是输入信号与滤波器冲击响应之间的线性组合。`
简单来说线性滤波器就是 输入信号跟滤波器做卷积。
2.输入信号与滤波器的冲击响应进行卷积操作。线性滤波具有可加性和比例性的特点
可加性: 即 $f(x+y) = f(x) + f(y)$
假设我们有一台收音机,可以接收两个不同的广播电台发出的信号。我们将这两个信号输入到同一个滤波器中进行处理,那么输出信号就等于每个信号单独经过滤波器处理后的输出信号的总和。这意味着,如果我们想要听到两个电台发出的信号,我们可以将它们分别输入到同一个滤波器中进行处理,然后将滤波器的输出信号相加即可得到最终的信号。比例性: 即 $f(cx) = cf(x)$
假设我们有一台音响系统,音量控制旋钮可以调节输出信号的幅度。如果我们将输入信号输入到滤波器中进行处理,那么输出信号的幅度也会受到音量控制旋钮的影响。这意味着,如果我们将旋钮向右旋转,增加音量,那么输出信号的幅度也会相应地增加;如果我们将旋钮向左旋转,减小音量,那么输出信号的幅度也会相应地减小。
时域滤波
时域滤波直接在时间域(针对某个点进行过滤时,会结合这个点的前或后时间点数据)中对信号进行滤波处理。
例如一段音频,录音时有一些杂音干扰进入了录音中。如果你想去除这些杂音,你可以使用一个时域滤波器,例如移动平均滤波器。该滤波器通过在每个时间点上计算当前时刻和前几个时刻的平均值,对音频信号进行平滑处理,从而减少杂音的影响。这种滤波过程直接在时间域中对信号进行操作,从而改变信号的特性。
频域滤波
频域滤波借助频率(机器学习中,可以是任意我们可以界定的数据强度标准)。数据处理过程只和节点数值有关,但是对数值不是简单的线性变换,而是会有非线性的变化。频率滤波基于不同的作用方式,又分为:
- 低通滤波 (Low-Pass Filtering):低通滤波器允许通过低频信号,并削弱或阻止高频信号。它的原理是在频域上去除高频分量,只保留低频分量。低通滤波常用于去除高频噪声或平滑信号。例如,可以使用低通滤波器来平滑图像并去除图像中的细节或噪声。
- 高通滤波 (High-Pass Filtering):高通滤波器允许通过高频信号,并削弱或阻止低频信号。它的原理是在频域上去除低频分量,只保留高频分量。高通滤波常用于强调图像或信号中的边缘、纹理或其他高频特征。例如,可以使用高通滤波器增强图像的边缘。
- 带通滤波 (Band-Pass Filtering):带通滤波器允许通过特定的频率范围内的信号,并削弱或阻止其他频率范围内的信号。它的原理是在频域上选择一个频率范围,去除其他频率范围的分量。带通滤波常用于信号处理中需要提取特定频率范围内的信号或去除其他频率范围的干扰。
上面是滤波的类型,可以看到,滤波的类型,其实主要基于我们要处理的数据情况和整体策略进行划分的,接下来我们就看看常见的几种具体滤波算法。
滤波算法
1. 均值滤波
算术平均滤波是一种最简单常用的数字滤波算法之一,也是一种基于时间域的滤波方法。其原理是将连续采集到的一组数据进行加和,并求出其平均值,以此作为滤波后的输出值。这种方法能够有效平滑信号,去除噪声干扰,同时保留信号的趋势和主要特征。
算术平均滤波的基本原理是取一段时间内的信号值的平均值作为输出。这段时间可以是固定的,也可以是动态调整的,取决于具体的实现。
- 初始化: 设置一个窗口大小(表示取平均的时间范围)和一个缓存区,用于存储窗口内的信号值。
- 输入信号: 在每个时刻,输入一个新的信号值。
- 更新缓存区: 将新的信号值加入缓存区,并去除窗口之外的最早的信号值,以保持窗口大小不变。
- 计算平均值: 对缓存区内的所有信号值取平均值。
- 输出: 将平均值作为输出信号。
算术平均滤波对于平稳的信号非常有效,因为它能够消除瞬时噪声。然而,它对于快速变化的信号响应较慢,因为窗口内的信号值需要时间来适应变化。
2. 一阶滞后滤波
一阶滞后滤波法是一种常见的滤波方法,也被称为指数加权平均滤波。它基于一个简单的思想,即当前的输出值是前一次输出值和当前输入值的加权平均值。这种加权平均值的计算方法使得前一次的输出值在当前输出值中占有一定的比重,从而可以平滑信号,并减小由于突然变化引起的干扰。
一阶滞后滤波的基本原理是通过引入一个时间常数(time constant)来调节滞后程度。时间常数决定了滤波器对信号变化的响应速度。较大的时间常数会导致较慢的响应,更强的平滑效果,但可能较慢地跟踪信号的快速变化;较小的时间常数则会导致较快的响应,但可能对噪声更敏感。
一阶滞后滤波的差分方程可以表示为:
$y[n] = (1-a)\cdot y[n-1]+a\cdot x[n]$y[n] 是当前时刻的输出。
y[n-1] 是上一时刻的输出。
x[n] 是当前时刻的输入。
\alpha 是介于 0 和 1 之间的常数,表示时间常数。
在这个方程中,\alpha 越接近 1,滤波器的响应就越慢,平滑效果越强。
3.限幅消抖滤波
限幅消抖滤波法是一种简单有效的数字滤波算法,常用于对采集到的离散信号进行去抖动处理。它可以去除信号中的瞬时噪声和突发干扰,同时保留信号的主要特征。
限幅消抖滤波法的原理是通过设置一个合适的阈值,将信号限制在一个固定的范围内,并消除信号中的抖动。当信号的变化速度超过阈值时,限制信号的变化幅度,以消除抖动;当信号变化速度较缓时,允许信号在一定范围内波动,以保留信号的主要特征。在实际应用中,通常将限幅消抖滤波法与其他滤波算法结合使用,以进一步提高滤波效果。
限幅(Clipping): 首先,将输入信号限制在一个预定的范围内。这个范围由上下限值确定。如果输入信号超出这个范围,它将被截断或限制在范围的边界上。
消抖(Debouncing): 消抖是指去除输入信号中的瞬时干扰或噪声,以获得更加平滑的输出。这可以通过在一定时间内对输入信号进行平均、滤波或延时来实现。
限幅消抖滤波的应用场景主要涉及那些由于环境原因或传感器特性而引入干扰的系统。例如,当使用传感器测量某个物理量时,由于传感器的特性或环境噪声,可能会产生一些突发的异常值。通过限制幅度和消除瞬时干扰,可以得到更加稳定和可靠的测量结果。在一些要求实时性较高的应用中,可能会选择简单的限幅操作。在对信号平滑性要求较高的场合,可能需要采用更复杂的滤波算法。
4.递推平均滤波
递推平均滤波法,又称为滑动平均滤波法,是一种对于输入信号进行平滑处理的算法。该算法采用一定的方式对一定数量的输入信号进行加权平均,得到一个平滑的输出信号。具体地,递推平均滤波法使用一个固定长度的窗口,每当有新的输入信号到来时,就将窗口内的旧的信号淘汰掉,并将新的信号加入到窗口中,然后重新计算窗口内所有信号的平均值作为当前的输出信号。因此,随着新的信号不断到来,窗口内的信号会不断滑动,而输出信号也会不断变化,从而实现对输入信号的平滑处理。
递推平均滤波法的优点是简单、实时性好,对于周期性的噪声有一定的抑制效果。其缺点是在处理突变的输入信号时,输出信号会有一定的延迟,且在窗口大小不够大的情况下,噪声的抑制效果会比较有限。
下面是递推平均滤波法的算法步骤:
- 定义一个固定长度为 N 的窗口,并初始化窗口内的所有数据为 0。
- 当有新的输入信号 x_i 到来时,将窗口内的第一个信号 x_{i-N} 移除,并将新的信号 x_i 加入到窗口中。
- 计算窗口内所有信号的平均值,作为当前的输出信号 y_i 。
- 返回输出信号 y_i ,并等待下一次输入信号到来。
5.加权递推平均滤波
加权递推平均滤波是一种滤波技术,它对信号的当前值和过去的滤波结果进行加权组合,以获得平滑的输出。与一阶滞后滤波不同,加权递推平均滤波使用多个权重来对不同时刻的输入信号进行加权,以更灵活地调整对历史数据的依赖程度。
$y[n] = \sum _{i=0}^{N}w_i\cdot x[n-1]$
1 | y[n] 是当前时刻的输出。 |
权重系数的选择是加权递推平均滤波的关键,它决定了滤波器对历史数据的关注程度。通常情况下,权重系数越大,对应时刻的输入信号在输出中的影响就越大。这样设计的目的是在保持对当前值敏感的同时,平滑掉噪声或瞬时变化。
6.中值滤波
中值滤波是一种非线性滤波方法,常用于去除信号中的脉冲噪声或椒盐噪声。它的原理是将一组数据排序,然后选择中间位置的值作为滤波结果。中值滤波对于去除离群值(异常值)非常有效,因为它不受异常值的影响。
下面是中值滤波的算法步骤:
- 选择窗口大小: 窗口大小决定了用于计算中值的数据点数量。通常,窗口大小是一个奇数,以确保存在中间位置的值。
- 将窗口内的数据排序: 对窗口内的数据进行排序,确定中间位置的值。
- 选择中值: 选择排序后的数据集的中间位置的值作为输出。
中值滤波的优势在于它能够有效地保留信号的边缘信息,而不像线性滤波那样引入过多的平滑。因此,中值滤波在一些对信号细节要求较高的应用中比较有用。需要注意的是,中值滤波可能会导致信号的某些特征被模糊化,因此在应用中需要谨慎选择邻域大小和形状,以及滤波器的使用场景。
7.中位值平均滤波法
中位值平均滤波法(Median Filtering with Averaging)是一种结合了中值滤波和平均滤波的方法。在这种滤波法中,首先通过中值滤波获得当前时刻的输出,然后将该输出与一定时期内的平均值进行加权平均。这种方法的目的是综合利用中值滤波和平均滤波的优势,对信号进行平滑处理,并能够有效地去除脉冲噪声或其他突发性噪声。
中位值平均滤波法的基本步骤如下:
- 中值滤波: 使用中值滤波器,通过排序窗口内的数据并选择中间值,得到一个初步的滤波结果。
- 平均滤波: 将中值滤波得到的结果与一定时期内的平均值进行加权平均。通常,这里的平均值是使用递推平均滤波法得到的。
- 输出: 输出平均滤波的结果作为最终的滤波输出。
这种滤波法的优势在于中值滤波能够有效去除离群值和脉冲噪声,而平均滤波则能够对信号进行较好的平滑。通过结合这两种方法,中位值平均滤波法在一些特定噪声环境下表现得比单一滤波方法更为鲁棒。
8.一阶低通滤波
低通滤波(Low Pass Filter)用于从一个信号中去除高于某个频率的成分。它的基本原理是,信号中高于某个频率的成分在信号传输或接收过程中会发生衰减,而低于该频率的成分则不受影响。因此,通过将信号通过一个低通滤波器,可以去除高频噪声,保留信号中的低频成分。
一阶低通滤波器是低通滤波的一阶离散形式,用于滤除输入信号中的高频分量,只保留低频分量。它通过减弱高频部分的幅度,从而实现对信号的平滑处理。一阶低通滤波器的基本原理涉及限制信号的变化速率,对快速变化的信号进行衰减,而对缓慢变化的信号保留。
一阶低通滤波的形式与一阶滞后滤波完全相同。倒不如说一阶滞后滤波其实就是一阶低通滤波,只不过当该滤波器用于不同的作用时,我们将其冠以了不同的称呼。
$ y[n] = (1-a)\cdot y[n-1]+a\cdot x[n]$
其中:1
2
3
4y[n] 是当前时刻的输出。
y[n-1] 是上一时刻的输出。
x[n] 是当前时刻的输入。
\alpha 是介于 0 和 1 之间的常数,表示时间常数。
在这个方程中,\alpha 越小,时间常数越大,低通滤波器的截止频率就越低,对高频部分的抑制效果就越强。
一阶低通滤波器常用于需要平滑信号或去除高频噪声的应用场景。它们在信号处理、通信系统、控制系统等领域都有广泛的应用。
9.二阶低通滤波
二阶低通滤波器是低通滤波器的二阶差分形式,用于滤除输入信号中的高频分量,同时保留低频分量。相比于一阶低通滤波器,二阶低通滤波器在频域上更为复杂,具有更陡的滤波特性。它可以更有效地抑制高频噪声,同时允许低频信号通过。
一个常见的二阶低通滤波器可以通过差分方程表示为:
$y[n] = (1-\alpha -\beta)\cdot y[n-2]+2\cdot \alpha \cdot y[n-1]+\beta \cdot x[n]$
其中:
1 | y[n] 是当前时刻的输出。 |
在这个方程中,\alpha 和 \beta 的选择影响了滤波器的频率响应和阶数。较小的时间常数表示较大的截止频率,而较大的时间常数表示较小的截止频率。这样,可以根据具体需求调整时间常数来达到期望的滤波效果。
二阶低通滤波器通常应用于需要更复杂频率响应和更好滤波性能的情况,如音频处理、图像处理和控制系统等领域。
10.一阶高通滤波
高通滤波(High Pass Filter)可以滤除信号中的低频部分,保留高频部分。高通滤波器的应用非常广泛,例如在音频处理中可以用来去除低频噪声、在图像处理中可以用来增强图像的边缘等。
高通滤波算法的基本思想是:将信号分解成高频和低频两部分,去掉低频部分,只保留高频部分。高通滤波的实现可以通过频域方法和时域方法两种方式实现。
频域方法是将信号转换到频域进行处理,常用的有傅里叶变换和小波变换等。通过滤波器在频域中滤除低频成分,然后再将信号转换回时域。
时域方法则是通过差分等方式,直接在时域中滤除低频部分。
一阶高通滤波器是高通滤波的一阶差分形式,用于滤除输入信号中的低频分量,同时保留高频分量。高通滤波器的作用是弱化或消除信号中的低频成分,从而突出高频变化或忽略缓慢变化的部分。一阶高通滤波器的设计原理涉及对低频分量进行衰减,保留高频部分。
一阶高通滤波器的差分方程一般表示为:
$y[n]=\alpha \cdot y[n-1]+\alpha \cdot(x[n] - x[n-1])$
1 | y[n] 是当前时刻的输出。 |
在这个方程中,\alpha 越小,时间常数越大,高通滤波器的截止频率就越低,对低频部分的抑制效果就越弱。
一阶高通滤波器通常应用于需要突出信号中快速变化或高频成分的应用场景。在图像处理、音频处理、传感器信号处理等领域,高通滤波器被广泛用于去除低频噪声或趋势成分。
11.二阶高通滤波
二阶高通滤波器是高通滤波的二阶差分形式,用于滤除输入信号中的低频分量,同时保留高频分量。相较于一阶高通滤波器,二阶高通滤波器在频域上更为复杂,具有更陡的滤波特性。它可以更有效地抑制低频噪声,同时允许高频信号通过。
一个常见的二阶高通滤波器可以通过差分方程表示为:
$y[n] = \alpha \cdot y[n-2] - \beta \cdot x[n-2] + 2\cdot \beta \cdot x[n-1] - \alpha \cdot y[n-1]$
1 | y[n] 是当前时刻的输出。 |
在这个方程中,\alpha 和 \beta 的选择影响了滤波器的频率响应和阶数。较小的时间常数表示较大的截止频率,而较大的时间常数表示较小的截止频率。这样,可以根据具体需求调整时间常数来达到期望的滤波效果。
二阶高通滤波器通常应用于需要更复杂频率响应和更好滤波性能的情况,如音频处理、图像处理和控制系统等领域。