卷积神经网络推导-神经网络卷积运算公式

本文论文来自:

卷积神经网络注释,Jake Bouvrie。

这个主要是一些关于CNN推导和实现的笔记,看这个笔记之前最好先有一些CNN的基础知识,这里也给大家一个可以参考的资源:

[1] 深度学习学习笔记系列(第七部分)

[2]LeNet-5,卷积神经网络

[3] 卷积神经网络

[4]手写数字识别神经网络

[5] 深度学习:三十八(Stacked CNN简单介绍)

[6] 基于梯度的学习应用于文档识别。

[7] 使用深度卷积神经网络进行 Imagenet 分类。

[8]UFLDL中的“卷积特征提取”和“池化”。

[9] 反向传播BP算法

卷积神经网络笔记

1. 简介

本文档讨论了 CNN 的推导和实现。CNN 架构的连接数比权重多得多,这意味着某种形式的正则化。这个特定的网络假设我们想要以数据驱动的方式学习一些过滤器,以此从输入中提取特征。

本文首先描述了训练全连接网络的经典BP算法,然后推导了2D CNN网络的卷积层和下采样层的BP权重更新方法。在推导过程中,我们强调实现的效率,因此会给出一些Matlab代码。最后,我们转而讨论如何自动学习组合前一层的特征图。特别地,我们还学习了特征图的稀疏组合。

2.全连接反向传播算法

在典型的 CNN 中,前几层是交替卷积和下采样,然后最后几层(靠近输出层)都是全连接的一维网络。至此,我们已经将所有二维的 2D 特征图转换为全连接的一维网络的输入。这样,当你准备将最终的 2D 特征图输入到 1D 网络时,一个非常方便的方法就是将所有输出的特征图连接成一个长的输入向量。然后我们回到 BP 算法的讨论。(更详细的基本推导请参考 UFLDL 中的“反向传播算法”)。

2.1 前馈传递

在下面的推导中,我们使用平方误差成本函数。我们正在讨论一个总共有 c 个类和 N 个训练样本的多类问题。

这里

表示第n个样本对应标签的第k维。

表示第n个样本对应的网络输出的第k个输出。对于多分类问题,输出一般以“one-of-c”的形式组织,也就是只有输入对应的类的输出节点是正数,其他类的位或节点都是0或者负数,这取决于你的输出层的激活函数。sigmoid就是0,tanh就是-1。

因为整个训练集上的误差就是每个训练样本的误差之和,所以这里我们先考虑一个样本的BP,第n个样本的误差表示为:

在传统的全连接神经网络中,我们需要按照BP规则计算代价函数E关于网络每个权值的偏导数,我们用l来表示当前层,因此当前层的输出可以表示为:

输出激活函数 f(.) 有很多种,通常是 sigmoid 函数或者双曲正切函数。sigmoid 会将输出压缩到 [0, 1] 之间,所以最终的输出平均值一般会趋向于 0。所以如果我们将训练数据归一化为均值为零、方差为 1,就可以增加梯度下降过程中的收敛性。对于归一化的数据集,双曲正切函数也是一个不错的选择。

2.2 反向传播过程

传播回去的误差可以看成是每个神经元的基的敏感度(敏感度的意思是我们的基b变化多少,误差就会变化多少,也就是误差对于基的变化率,也就是导数),定义如下:(第二个等号是根据链式求导法则得到的)

因为∂u/∂b=1,∂E/∂b=∂E/∂u=δ,这意味着偏差基础∂E/∂b=δ的灵敏度等于误差E对某个节点∂E/∂u的所有输入u的导数。这个导数就是让高层误差反向传播到底层的魔法。反向传播可以用下面的关系来表达:(下面的公式表达了第l层的灵敏度,即)

公式1)

这里的“◦”表示每个元素都相乘。输出层神经元的敏感度不同:

最后,应用delta(或δ)规则更新每个神经元的权重。具体来说,对于给定的神经元,获取其输入,然后使用此神经元的delta(或δ)对其进行缩放。以向量形式表示,对于第l层,该层每个权重(组合成矩阵)的误差的导数是该层的输入(等于前一层的输出)与该层的灵敏度(该层中每个神经元的δ组合成向量)的叉积。然后获得的偏导数乘以负学习率就是该层神经元权重的更新:

公式(2)

偏差基础的更新表达式类似。事实上,每个权重 (W)ij 都有一个特定的学习率 ηIj。

3.卷积神经网络

3.1 卷积层

现在我们重点讨论网络中卷积层的BP更新。在卷积层中,上一层的特征图与一个可学习的卷积核进行卷积,然后经过激活函数得到输出的特征图。每个输出图可能是多个输入图组合的值:

这里 Mj 表示选定的输入图的集合,那么选择哪些输入图呢?有些人会选择一对或者三个。但下面我们将讨论如何自动选择需要组合的特征图。每个输出图都会给出一个额外的偏置 b,但对于特定的输出图,每个输入图的卷积核是不同的。换句话说,如果输出特征图 j 和输出特征图 k 都是由输入图 i 通过卷积求和得到的,那么对应的卷积核是不同的。

3.1.1 计算梯度

我们假设每一个卷积层l都连接着一个下采样层l+1。对于BP来说,根据上述,为了得到l层中每一个神经元对应权重的权重更新,我们需要先计算出l层中每一个神经节点的敏感度δ(即权重更新公式(2))。为了计算这个敏感度,我们需要先把下一层节点(与当前l层感兴趣的节点相连的l+1层节点)的敏感度相加(得到δl+1),然后乘以这些连接对应的权重(连接第l层感兴趣的节点和第l+1层节点的权重)W。然后乘以当前l层神经元节点对输入u的激活函数f的导值(即敏感度反向传播公式(1)的δl的解),这样就可以得到当前l层中每一个神经节点对应的敏感度δl。

但由于下采样的原因,采样层中一个像素(神经元节点)的敏感度δ对应着卷积层(前一层)输出图的一个像素(采样窗口大小),因此第l层中某个图的每个节点只与第l+1层中对应图的一个节点相连。

为了能够有效的计算出第l层的敏感度,我们需要对下采样后的层对应的敏感度图进行一次上采样(特征图中的每一个像素对应一个敏感度,所以也构成了一个图),使得这个敏感度图的大小与卷积层的图大小一致,然后将第l层的图的激活值的偏导数与从第l+1层开始上采样得到的敏感度图逐元素相乘(即公式(1))。

下采样层图的权重均取相同的值β,为一个常数,因此我们只需要将上一步得到的结果乘以β,便可完成第l层敏感度δ的计算。

我们可以对卷积层中的每个特征图j重复同样的计算过程。但显然我们需要匹配相应的子采样层的图(参考公式(1)):

up(.) 表示上采样操作。如果下采样因子为 n,它只是将每个像素水平和垂直复制 n 次。这样就恢复了原始大小。实际上,这个函数可以使用 Kronecker 积来实现:

好了,现在我们可以计算给定图的敏感度图了。然后我们可以通过简单地将第 l 层敏感度图中的所有节点相加来快速计算偏差基础的梯度:

公式(3)

最后,卷积核权重的梯度可以用BP算法计算(公式(2))。另外,很多连接的权重是共享的,所以对于给定的权重,我们需要计算该点所有与该权重相关的连接(权重共享的连接)的梯度,然后对这些梯度求和,就像上面对偏置项的梯度计算一样:

这里,

是的

在卷积中

输出卷积图的(u,v)位置的值是前一层的(u,v)位置上的patch与卷积核k_ij逐元素相乘的结果。

乍一看,似乎我们需要费力地记住输出图(以及对应的敏感度图)的每个像素对应输入图的哪个块。但实际上,在 Matlab 中,这可以用一个代码来实现。对于上面的公式,我们可以使用 Matlab 的卷积函数来实现它:

我们首先旋转增量敏感度图,这样我们就可以进行互相关计算,而不是卷积(在卷积的数学定义中,特征矩阵(卷积核)在传递给 conv2 之前需要翻转。也就是说,特征矩阵的行和列是反转的)。然后我们将输出反旋转回来,这样当我们在前向传播中进行卷积时,卷积核就在我们想要的方向。

3.2. 子采样层

对于子采样层,有 N 个输入图和 N 个输出图,但每个输出图变得更小。

down(.) 表示下采样函数。典型操作是对输入图像的不同 nxn 块的所有像素求和。这样,输出图像在两个维度上都缩小了 n 倍。每个输出图对应其自己的乘性偏差 β 和加性偏差 b。

3.2.1 计算梯度

这里最难的部分是计算敏感度图。一旦我们有了这个,我们需要更新的唯一偏置参数β和b就很容易了(公式(3))。如果下一个卷积层与这个子采样层完全连接,那么子采样层的敏感度图就可以通过BP计算出来。

我们需要计算卷积核的梯度,因此我们必须找到输入图中的哪个patch对应于输出图中的哪个像素。这里,我们必须找到当前层的敏感度图中的哪个patch对应于下一层的敏感度图中的给定像素,这样我们就可以像公式(1)中那样使用delta递归,也就是敏感度反向传播。此外,我们需要乘以输入patch和输出像素之间的连接的权重,这实际上是卷积核(旋转)的权重。

在此之前,我们需要对核进行旋转,以便卷积函数进行互相关计算。另外,我们需要处理卷积边界,不过在Matlab中,这更容易处理。Matlab中的全卷积会用0填充缺失的输入像素。

此时,我们可以计算 b 和 β 的梯度。首先,加法基础 b 的计算与上面的卷积层相同,只需将敏感度图中的所有元素相加即可:

至于乘性偏置β,由于在前向传播过程中涉及到下采样图的计算,所以最好在前向过程中保存这些图,这样在反向计算中就不需要重新计算了。我们定义:

这样β的梯度就可以计算如下:

3.3. 学习特征图的组合

很多时候,通过对多个输入图进行卷积,然后将这些卷积值相加得到一个输出图,效果往往比较好。在一些文献中,一般都是人工来选择将哪些输入图组合起来得到一个输出图。但这里我们尝试让CNN在训练过程中学习这些组合,也就是让网络学会选择哪些输入图来计算最佳的输出图。我们用αij来表示第i个输入图在得到第j个输出图时的权重或者贡献。这样,第j个输出图可以表示为:

需要满足约束:

这些对变量 αij 的约束可以通过将变量 αij 表示为一组不受约束的隐式权重 cij 的 softmax 函数来强制执行(因为 softmax 因变量是自变量的指数函数,所以它们的变化率会有所不同)。

因为对于固定的j,每组权重cij与其他组的权重无关,所以为了描述方便,我们去掉下标j,只考虑一个映射的更新。其他映射的更新也是同样的过程,只是映射索引j不同。

Softmax函数的导数表示为:

这里δ是克罗内克δ。误差关于第l层变量αi的导数为:

最后,可以通过链式法则得到成本函数关于权重ci的偏导数:

3.3.1 强制稀疏组合

为了限制 αi 的稀疏性,即限制一个输出图只与部分输入图相连,而不是与全部输入图相连,我们在总体成本函数中添加了一个稀疏约束项 Ω(α)。对于单个样本,将成本函数重写为:

然后求出这个正则化约束项对权重ci导数的贡献,正则化项Ω(α)对αi的导数为:

然后,根据链式法则,ci 的导数为:

因此,权重ci的最终梯度为:

3.4 使用 MATLAB 加速

CNN的训练主要基于卷积层和下采样层的交互,其主要计算瓶颈是:

1)前向传播过程:对每个卷积层的地图进行下采样;

2)反向传播过程:对高级子采样层的敏感度图进行上采样,以匹配底层卷积层的输出图的大小;

3)S形函数的应用及推导。

针对第一点和第二点问题,我们考虑如何利用Matlab内置的图像处理函数实现上采样和下采样操作。对于上采样,imresize函数可以做到,但是需要很大的开销。一个更快的版本是使用克罗内克积函数kron。通过用全一矩阵ones和我们需要上采样的矩阵做克罗内克积,就能达到上采样的效果。对于前向传播过程中的下采样,imresize并没有提供在缩小图像的同时计算nxn块中像素和的功能,所以不能使用。一个更好更快的方法是用全一的卷积核对图像进行卷积,然后简单地使用标准指数法对最后的卷积结果进行采样。 比如降采样域为2×2,那么我们可以用一个元素全为1的2×2卷积核对图像进行卷积,然后在卷积后的图像中每2个点采集一次数据,y=x(1:2:end,1:2:end),这样既可以得到一倍的降采样,又可以同时起到求和的效果。

对于第三个问题,其实有些人觉得在 Matlab 中内联定义 sigmoid 函数会更快,其实不然,Matlab 不同于 C/C++ 等语言,Matlab 的内联比普通的函数定义更省时,因此我们可以在代码中直接使用真实的代码来计算 sigmoid 函数及其导数。

AI攻破高数核心,1秒内求解微分方程、不定积分,性能远超Matlab

栗子 鱼羊 发自 海边边 量子位 报道 | 公众号 QbitAI

大家都知道,AI (神经网络) 连加减法这样的简单算术都做不好:

可现在,AI已经懂得微积分,把魔爪伸向你最爱的高数了。

它不光会求不定积分:

还能解常微分方程:

一阶二阶都可以。

这是Facebook发表的新模型,1秒给出的答案,超越了Mathematica和Matlab这两只付费数学软件30秒的成绩。

团队说,这是Seq2SeqTransformer搭配食用的结果。

用自然语言处理 (NLP) 的方法来理解数学,果然行得通。

这项成果,已经在推特上获得了1700赞。许多小伙伴表示惊奇,比如:

感谢你们!在我原本的想象中,这完全是不可能的!

而且,据说算法很快就要开源了:

到时候让付费软件怎么办?

要训练模型做微积分题目,最重要的前提就是要有大大大的数据集。

这里有,积分数据集常微分方程数据集的制造方法:

首先,就是要做出“一个函数&它的微分”这样的数据对。团队用了三种方法:

第一种是正向生成 (Fwd) ,指生成随机函数 (最多n个运算符) ,再用现成的工具求积分。把工具求不出的函数扔掉。

第二种是反向生成 (Bwd) ,指生成随机函数,再对函数求导。填补了第一种方法收集不到的一些函数,因为就算工具求不出积分,也一定可以求导。

第三种是用了分部积分的反向生成 (Ibp) 。前面的反向生成有个问题,就是不太可能覆盖到f(x)=x3sin(x)的积分:

F(x)=-x3cos(x)+3x2sin(x)+6xcos(x)-6sin(x)

因为这个函数太长了,随机生成很难做到。

另外,反向生成的产物,大多会是函数的积分比函数要短,正向生成则相反。

为了解决这个问题,团队用了分部积分:生成两个随机函数F和G,分别算出导数f和g。

如果fG已经出现在前两种方法得到的训练集里,它的积分就是已知,可以用来求出Fg:

∫Fg=FG-∫fG

反过来也可以,如果Fg已经在训练集里,就用它的积分求出fG。

每求出一个新函数的积分,就把它加入训练集。

如果fG和Fg都不在训练集里,就重新生成一对F和G。

如此一来,不借助外部的积分工具,也能轻松得到x10sin(x)这样的函数了。

从一个二元函数F(x,y)说起。

有个方程F(x,y)=c,可对y求解得到y=f(x,c)。就是说有一个二元函数f,对任意x和c都满足:

再对x求导,就得到一个微分方程:

fc表示从x到f(x,c)的映射,也就是这个微分方程的解。

这样,对于任何的常数c,fc都是一阶微分方程的解。

把fc替换回y,就有了整洁的微分方程:

这样一来,想做出“一阶常微分方程&解”的成对数据集,只要生成一个f(x,c),对c有解的那种,再找出它满足的微分方程F就可以了,比如:

二阶的原理,是从一阶那里扩展来的,只要把f(x,c)变成f(x,c1,c2) ,对c2有解。

微分方程F要满足:

把它对x求导,会得到:

fc1,c2表示,从x到f(x,c1,c2)的映射。

如果这个方程对c1有解,就可以推出另外一个三元函数G,它对任意x都满足:

再对x求导,就会得到:

最后,整理出清爽的微分方程:

它的解就是fc1,c2。

至于生成过程,举个例子:

现在,求积分求解微分方程两个训练集都有了。那么问题也来了,AI要怎么理解这些复杂的式子,然后学会求解方法呢?

积分方程和微分方程,都可以视作将一个表达式转换为另一个表达式,研究人员认为,这是机器翻译的一个特殊实例,可以用NLP的方法来解决。

第一步,是将数学表达式以树的形式表示

运算符和函数为内部节点,数字、常数和变量等为叶子节点。

比如 3x^2 + cos(2x) – 1 就可以表示为:

再举一个复杂一点的例子,这样一个偏微分表达式:

用树的形式表示,就是:

采用树的形式,就能消除运算顺序的歧义,照顾优先级和关联性,并且省去了括号。

在没有空格、标点符号、多余的括号这样的无意义符号的情况下,不同的表达式会生成不同的树。表达式和树之间是一一对应的。

第二步,引入seq2seq模型

seq2seq模型具有两种重要特性:

输入和输出序列都可以具有任意长度,并且长度可以不同。

输入序列和输出序列中的字词不需要一一对应。

因此,seq2seq模型非常适合求解微积分的问题。

使用seq2seq模型生成树,首先,要将树映射到序列。

使用前缀表示法,将每个父节点写在其子节点之前,从左至右列出。

比如 2 + 3 * (5 + 2),表示为树是:

表示为序列就是 [+ 2 * 3 + 5 2]。

树和前缀序列之间也是一一映射的。

第三步,生成随机表达式

要创建训练数据,就需要生成随机数学表达式。前文已经介绍了数据集的生成策略,这里着重讲一下生成随机表达式的算法。

使用n个内部节点对表达式进行统一采样并非易事。比如递归这样的方法,就会倾向于生成深树而非宽树,偏左树而非偏右树,实际上是无法以相同的概率生成不同种类的树的。

所以,以随机二叉树为例,具体的方法是:从一个空的根节点开始,在每一步中确定下一个内部节点在空节点中的位置。重复进行直到所有内部节点都被分配为止。

不过,在通常情况下,数学表达式树不一定是二叉树,内部节点可能只有1个子节点。如此,就要考虑根节点和下一内部节点参数数量的二维概率分布,记作 L(e,n)。

接下来,就是对随机树进行采样,从可能的运算符和整数、变量、常量列表中随机选择内部节点及叶子节点来对树进行“装饰”。

最后,计算表达式的数量

经由前面的步骤,可以看出,表达式实际上是由一组有限的变量、常量、整数和一系列运算符组成的。

于是,问题可以概括成:

  • 最多包含n个内部节点的树
  • 一组p1个一元运算符(如cos,sin,exp,log)
  • 一组p2个二进制运算符(如+,-,×,pow)
  • 一组L个叶子值,其中包含变量(如x,y,z),常量(如e,π),整数(如 {-10,…,10})

如果p1 = 0,则表达式用二叉树表示。

这样,具有n个内部节点的二叉树恰好具有n + 1个叶子节点。每个节点和叶子可以分别取p1和L个不同的值。

具有n个二进制运算符的表达式数量就可以表示为:

如果p1 > 0,表达式数量则为:

可以观察到,叶子节点和二元运算符的数量会明显影响问题空间的大小。

实验中,研究人员训练seq2seq模型预测给定问题的解决方案。采用的模型,是8个注意力头(attention head),6层,512维的Transformer模型。

研究人员在一个拥有5000个方程的数据集中,对模型求解微积分方程的准确率进行了评估。

结果表明,对于微分方程,波束搜索解码能大大提高模型的准确率。

而与最先进的商业科学计算软件相比,新模型不仅更快,准确率也更高。

在包含500个方程的测试集上,商业软件中表现最好的是Mathematica。

比如,在一阶微分方程中,与使用贪婪搜索解码算法(集束大小为1)的新模型相比,Mathematica不落下风,但新方法通常1秒以内就能解完方程,Mathematica的解题时间要长的多(限制时间30s,若超过30s则视作没有得到解)。

而当新方法进行大小为50的波束搜索时,模型准确率就从81.2%提升到了97%,远胜于Mathematica(77.2%)

并且,在某一些Mathematica和Matlab无力解决的问题上,新模型都给出了有效解。

这个会解微积分的AI一登场,就吸引了众多网友的目光,引发热烈讨论。网友们纷纷称赞:鹅妹子嘤。

有网友这样说道:

这篇论文超级有趣的地方在于,它有可能解决复杂度比积分要高得高得高得多的问题。

还有网友认为,这项研究太酷了,该模型能够归纳和整合一些sympy无法实现的功能。

不过,也有网友认为,在与Mathematica的对比上,研究人员的实验设定显得不够严谨。

默认设置下,Mathematica是在复数域中进行计算的,这会增加其操作的难度。但作者把包含复数系数的表达式视作“无效”。所以他们在使用Mathematica的时候将设置调整为实数域了?

我很好奇Mathematica是否可以解决该系统无法解决的问题。

30s的限制时间对于计算机代数系统有点武断了。

但总之,面对越来越机智的AI,已经有人发起了挑战赛,邀请AI挑战IMO金牌。

这篇论文有两位共同一作。

Guillaume Lample,来自法国布雷斯特,是Facebook AI研究院、皮埃尔和玛丽·居里大学在读博士。

他曾于巴黎综合理工学院和CMU分别获得数学与计算机科学和人工智能硕士学位。2014年进入Facebook实习。

François Charton,Facebook AI研究院的客座企业家(Visiting entrepreneur),主要研究方向是数学和因果关系。

https://arxiv.org/abs/1912.01412

https://news.ycombinator.com/item?id=21084748

量子位 QbitAI · 头条号签约

关注我们,第一时间获知前沿科技动态

基于经验模态分解和去趋势波动分析的一维信号降噪方法(MATLAB)

说点其他的吧,简单回答一个知乎上的问题:

经验模态分解的非平稳信号数据滤波处理研究这个课题难嘛?

这个不难,不像小波一样有那么严格的理论推导,一旦一个方法数学理论不足,那你自己就可以随便搞了,自圆其说即可。

改进的话,你要了解一下EMD的相关背景。EMD是一种递归算法,利用信号极值的递归筛选 过程,将输入信号分解为固有的振荡模式,就是所谓的本征模态函数IMF。一个振荡信号能够被称为IMF 需满足两个条件:一是在其时间区间内, 模态的极值点数目和过零点的数目应当相等或者最多相差一个;二是在其时间区间内,分别由信号的局部极大值和极小值确定的上、下包络的均值为零。第一个条件保证了IMF是一个窄带信号;第二个条件则从信号局部特征的角度考虑,避免了由于信号波形不对称而引起的瞬时频率波动。

上图是一个典型的IMF,其极值点数目和过零点数目相同, 且上下包络的均值为零。IMF 类似于傅里叶变换得到的一个具有固定幅度和固定频率的分量,但是IMF包含了幅度调制和频率调制的特 性,因此更具一般性。

EMD 的分解过程具体来说,就是先对信号极值进行插值,并对上、下包络进行平均从而获得信号的局部均值,这些局部均值可视为信号中的低频成分的估计。然后将低频成分从输入信号中迭代分离出来,得到高频(快速振荡)成分,这就完成了一次筛分,。重复筛分过程,直到输入信号中的所有主要振荡模态都被提取出来。由于EMD完全是由数据驱动的,还避免了线性时频变换方法的很多局限性,如受Heisenberg 测不准原理限制而导致的有限时频分辨率和由使用固定基函数而获得的无意义的模态等。

小波变换之于机器学习就如同EMD之于深度学习。

然后,针对EMD的缺陷各路大佬进行了很多的改进。

虽然EMD在处理非线性非平稳信号方面具有较多优点,但是仍然有一些待解决的问题,主要包括:迭代停止准则和样条函数的选择问题、端点效应和模态混叠问题、 Hilbert 变换和分量正交性的问题等。EMD的一些改进版本,例如集成EMD (EEMD)、互补EEMD(CEEMD)和中值 EEMD (MEEMD) 等,在一定程度上修复了这些问题,但是应该说,EMD 中包括分解算法、IMF的定义以及上述的EMD算法的各种改进版本都是建立在经验基础之上的,目前仍然缺乏坚实的数学理论分析做支撑,可以说目前EMD的理论水平犹如小波变换在上世纪80年代初的水平,特别期望能有如 Daubechies(小波之母,沃尔夫奖获得者)那样能为小波变换奠定坚实理论基础的学者出现也能将基于EMD的时频分析方法置于坚实的数学理论之上。为了克服 EMD 理论分析上的困难,很多学者尝试用基于鲁棒约束优化的方法取代EMD中包络和局部均值估计,从理论上保证了算法能收敛到全局最优, 但这些方法会遇到没有可行解的问题。除了 EMD 的改进版本以外,很多学者还提出了一 些类似于EMD迭代筛分过程的新的分解算法来尝试解决这些问题。例如,局部均值分解,本征时间尺度分解,上述分解算法仍然都是基于经验的分解算法,分解结果也会受到端点效应和模态混叠的 影响。另外这些方法都需要准确估计信号的局部极值或者均值,但实际数据往往会被噪声干扰,不易准确估计这些极值或者均值,这使得这些方法的抗噪声能力也比较差。

鉴于此,采用经验模态分解结合去趋势波动分析对一维时间序列信号进行滤波降噪,运行环境为MATLAB,并给出了几个例子。

本文作者及来源:Renderbus瑞云渲染农场https://www.renderbus.com

点赞 0
收藏 0

文章为作者独立观点不代本网立场,未经允许不得转载。