ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

EKF训练神经网络实现信号去噪的原理与MATLAB仿真

EKF训练神经网络实现信号去噪的原理与MATLAB仿真 简介这份PDF资料面向从事数字信号处理、神经网络及数据建模方向的学习者和工程师聚焦扩展卡尔曼滤波EKF与前馈神经网络相结合的滤波技术重点解决传统EKF需已知噪声信号的应用局限通过将权值阈值作为状态向量、网络输出作为观测值实现参数估计与信号去噪的联合优化。内容涵盖EKF与前向网络结合的算法推导、离散化状态方程和观测方程、单隐层网络结构设计、梯度矩阵计算及MATLAB仿真结果并对比了含噪信号与滤波后信号的差异适合作为数字滤波与智能算法交叉领域的课程参考或项目入门资料。资源为单个PDF文件共143KB已有139人在CSDN平台学习下载。读者可获得算法原理说明、关键公式推导及仿真验证结论能够快速理解EKF神经网络数字滤波的实现路径与实际去噪效果。1. EKF 与神经网络的结合点在哪里神经网络和扩展卡尔曼滤波EKF能在数字滤波场景里互补核心原因是它们各自堵住了对方的短板。传统卡尔曼滤波器在线性系统中接近最优EKF 通过一阶泰勒展开把它推广到非线性系统却要求使用者预先知道系统噪声和量测噪声的统计特性。神经网络不需要在动手前建立精确的系统模型但常规的梯度下降类训练方法收敛慢、依赖学习率容易落在局部极小值附近。张晋与王淑芳在论文中给出的方案是把 EKF 当成前馈神经网络的训练引擎将网络的权值和阈值组装成一个状态向量把网络的实际输出当作滤波器的观测值卡尔曼增益替代固定学习率来调节每个参数的修正幅度。于是神经网络负责拟合输入输出映射EKF 负责在参数空间中抑制随机扰动。仿真里用带噪声的 cos 信号做训练样本验证了这条路线在信噪比不太恶劣时的有效性。对正在做传感器信号清洗、语音去噪或者打算替换 BP 训练方式的工程人员这是一个可以直接照搬的框架。2. 为什么是 EKF 而不是 BP噪声模型缺口与参数估计视角2.1 从 Kalman Filter 到 Extended Kalman Filter 的演进逻辑一个离散非线性系统通常用状态方程和观测方程两个式子描述x(k1) h[x(k)] μ(k) y(k) g[x(k)] ε(k)其中 μ(k) 是系统噪声ε(k) 是量测噪声均假设为零均值高斯白噪声E[μ(k)] 0, E[ε(k)] 0 E[μ(k)μ(l)] Q·δkl, E[ε(k)ε(l)] R·δkl卡尔曼滤波的递推分为预测与更新两个阶段。预测阶段用状态方程把状态均值和协方差矩阵同时向前推一步更新阶段先计算卡尔曼增益再用观测残差修正状态估计。整套推导建立在“状态方程和观测方程均为线性”的前提上也就是 x(k1) A·x(k) μ(k)y(k) C·x(k) ε(k) 的形式。实际系统很少满足这个条件于是 EKF 把非线性函数在当前估计点附近做一阶泰勒展开用雅可比矩阵替代原来的 A 和 C。递推公式变为预测: x̂(k1|k) h[x̂(k|k)] 方差预测: P(k1|k) A(k)·P(k|k)·Aᵀ(k) R(k) 增益: L(k) P(k|k-1)·Cᵀ(k)·[C(k)·P(k|k-1)·Cᵀ(k) Q(k)]⁻¹ 更新: x̂(k|k) x̂(k|k-1) L(k)·[y(k) - g(x̂(k|k-1))] 方差更新: P(k|k) [I - L(k)·C(k)]·P(k|k-1)这套框架在理论上很优雅工程上却能明显感觉到它的约束Q 和 R 必须给得接近真实噪声水平。Q 给得过小滤波器会过度信任模型预测观测修正被压制R 给得过小滤波器又会追着噪声跑输出曲线毛刺严重。很多入门者把时间花在调 Q、R 上而不是信号本身上。2.2 EKF 的硬前提你必须先知道噪声长什么样回到论文开头那句话EKF 的前提是已知噪声信号。做完传感器标定量测噪声的方差 R 还能估个大概但系统噪声 Q 描述的是状态转移过程中引入的不确定性在多数场景下只能靠经验猜。更麻烦的是噪声特性可能会随温度、负载、工作时间漂移今天标定的 R 明天可能就不准了。既然直接使用 EKF 有模型依赖为什么不干脆用神经网络自己学呢前馈网络的好处是无需显式建模输入输出映射全由训练数据决定。不过常见的 BP 训练也有自己的问题基于最速下降法对学习率敏感容易出现收敛慢或震荡。把这两种方法的优缺点摆在一起看方案弱项单纯 BP 网络收敛速度慢依赖学习率与初始权值容易陷入局部极小小波降噪阈值和分解层数依赖先验知识时变信号效果不稳定纯 EKF必须已知 Q/R模型失配时增益计算失真EKF 训练神经网络无需显式系统模型Q/R 只需粗调即可工作EKF 训练网络的思路巧妙在它不把训练当作梯度下降问题而是当作状态估计问题。网络自身充当观测模型EKF 在参数空间中递归地滤掉扰动两者恰好互补。2.3 把网络训练看作参数估计问题把前馈神经网络的权值和阈值定义为待估计的状态向量 X网络本身没有运动学模型所以权值被建模成准静态量状态转移矩阵就是单位阵。这样状态方程退化成一个非常自然的形式x(k1) x(k) μ(k)μ(k) 表示权值上的随机扰动对应参数在训练过程中缓慢漂移。观测方程是d(k) h(x(k), U(k)) ε(k)h(·) 是前馈网络的前向传播函数U(k) 是当前输入样本d(k) 是期望输出。与常见机器学习训练套路相比EKF 维护一个完整的状态协方差矩阵 P每个权值都有独立的置信区间更新步长由卡尔曼增益自动决定相当于给每个参数配了差异化学习率。这就是它通常比 BP 迭代次数少的原因尤其在参数维度不高时收敛优势非常明显。3. 前馈网络权值状态化与雅可比矩阵推导3.1 符号约定与网络前向计算论文使用的网络是单隐层前馈结构设输入层单元个数为 m隐层神经元个数为 n输出神经元个数为 1。激活函数选择上隐层采用 Sigmoid输出层采用线性函数f(x) 1 / (1 e⁻ˣ) g(x) xSigmoid 能给网络引入非线性映射能力而输出层保持线性是为了不压缩输出值域让 EKF 的观测残差直接反映真实误差。设输入向量为 u隐层权值矩阵为 W1尺寸 n×(m1)最后一列为偏置输出层权值向量为 W2尺寸 1×(n1)最后一个为偏置。前向计算过程为z W1 · [u; 1] a f(z) y W2 · [a; 1][u;1] 末尾补的常量 1就是偏置项的统一写法——把偏置当作连接到一个固定输入为 1 的权值后续做雅可比矩阵时就不需要单独处理偏置了。3.2 权值阈值到状态向量 X 的展开规则将所有权值按固定顺序展开成一个列向量这是整个 EKF 训练实现里最容易被忽略、又最容易出错的一步。权值总数为c (m1)·n (n1)·1前馈网络中所有权值的偏导计算顺序依赖于展开顺序若展开与后续重组不一致训练会表现为前几步代价下降几十步后突然发散。常见的做法是采用 MATLAB 的列优先展开方式状态向量 X 的前 n·(m1) 个元素存放隐层权值矩阵 W1按列先后展开剩余 n1 个元素存放输出层权值向量 W2包括输出偏置。对于论文仿真中的具体配置m1n7则 c(11)×7(71)×122状态向量是 22 维。3.3 输出对参数的偏导雅可比矩阵 H 的推导EKF 更新时需要的 H(k) 是网络输出 y 对状态向量 X 的一阶偏导是一个 1×c 的行向量。利用链式法则逐步展开。隐层第 j 个神经元的加权输入记为 zⱼ激活输出 aⱼ f(zⱼ)。Sigmoid 的导数为f(zⱼ) aⱼ · (1 - aⱼ)输出 y 对隐层权值 W1(j,i) 的偏导为∂y/∂W1(j,i) W2(j) · f(zⱼ) · uᵢ当 i 对应偏置位置时uᵢ 恒为 1所以偏置的偏导是 W2(j)·f(zⱼ)。输出 y 对输出层权值 W2(j) 的偏导为∂y/∂W2(j) aⱼ输出层偏置的偏导为 1。这些偏导组合起来就构成雅可比矩阵 H。实际编码时按矩阵分块直接组装即可不需要写循环逐元素判断function H computeJacobian(W1, W2, u, a) % 计算前馈网络输出对权值状态向量的雅可比矩阵 % W1: 隐层权值矩阵 (nHidden x (nInput1)) % W2: 输出层权值向量 (1 x (nHidden1)) % u : 当前输入向量 (nInput x 1) % a : 隐层激活输出 (nHidden x 1) nH length(a); fprime a .* (1 - a); % Sigmoid导数, (nH x 1) input_aug [u; 1]; % 附加偏置输入的向量 % 隐层权值梯度: 每行对应一个隐层神经元 % 最后一列对应隐层偏置的偏导 dW1 (W2(1:nH) .* fprime) * input_aug; % 输出层权值梯度: 各隐层输出直接作为系数 dW2 a; % 拼接成 1 x c 的行向量, 顺序与状态向量X一致 H [dW1(:), dW2, 1]; end这段代码用到了三个关键点。第一W2(1:nH) 取出输出层对各隐层神经元的权值与 Sigmoid 导数逐元素相乘得到每个隐层神经元对输出的贡献系数第二乘以 input_aug 之后dW1 的第 j 行就是第 j 个隐层神经元所有输入权值的偏导最后一列自动是偏置的偏导不需要额外处理第三输出层偏置的偏导恒为 1直接拼在向量尾部。dW1(:) 在 MATLAB 中是按列展开与状态向量 X 的构造方式要严格对应这在 3.2 节已经强调过。3.4 状态估计递推公式将雅可比代入卡尔曼框架得到针对网络权值的 EKF 递推公式增益: L(k) P(k)·Hᵀ(k)·[H(k)·P(k)·Hᵀ(k) R(k)]⁻¹ 更新: x̂(k) x̂(k-1) L(k)·[d(k) - y(k)] 方差更新: P(k) [I - L(k)·H(k)]·P(k-1) 方差漂移: P(k1) P(k) Q(k)每次迭代的最后一步是加上过程噪声 Q。这一步常被忽视但它的作用非常关键Q 让协方差矩阵 P 的对角线不会收缩到零保持滤波器持续的跟踪能力。如果不加 Q随着迭代进行 P 会迅速衰减卡尔曼增益趋近于零网络将彻底丧失继续学习的能力。这个现象在训练后期表现为误差曲线平坦但仍有小幅波动时网络无法进一步细化参数。4. MATLAB 仿真复现EKF 网络对 cos 信号去噪4.1 实验设置仿真完全复现论文的原始设定输入 U 为 [0,10π] 区间上步长 0.05 的数据点共 629 个样本期望响应 d cos(U)输入结点数 m1输出结点数 nOut1隐层结点数 nH7。总待估状态数 c22远少于样本数说明每个参数都有充足的观测支撑 EKF 收敛。用 MATLAB 的 randn 函数按两种方差产生白噪声信号叠加到期望信号上模拟实际观测。论文中两组噪声的协方差分别取 R10.1 和 R20.5。噪声强度直接决定了滤波难易R0.1 时噪声功率只有信号功率的十分之一属于轻度污染R0.5 时噪声能量已经达到信号的一半输出曲线会明显变粗。4.2 核心训练代码完整训练代码由三部分组成初始化、EKF 递推循环、误差记录。初始化阶段随机给出 22 维权值向量并设置初始协方差矩阵 P。下面这段代码是论文公式的直接落地画图部分省略只保留滤波核心逻辑% EKF 训练前馈网络: 期望信号 d cos(U), 单隐层 7 节点 clear; clc; U (0:0.05:10*pi); % 输入信号 d cos(U); % 期望输出 Ns length(U); % 样本数 629 m 1; nH 7; nOut 1; % 输入/隐层/输出节点数 c (m1)*nH (nH1)*nOut; % 总权值数 22 R 0.5; % 观测噪声方差噪声2 d_noisy d sqrt(R)*randn(Ns,1); % 生成含噪观测 x 0.1 * randn(c, 1); % 权值初值: 小随机数 P 0.5 * eye(c); % 初始协方差矩阵 Q 1e-4 * eye(c); % 参数漂移噪声 err zeros(Ns,1); % 记录每步误差 for k 1:Ns % 从状态向量恢复网络参数 W1 reshape(x(1 : nH*(m1)), nH, m1); % 隐层权值偏置 W2 reshape(x(nH*(m1)1 : end), 1, nH1); % 输出层权值偏置 % 前向传播 u_k U(k); z W1 * [u_k; 1]; a 1 ./ (1 exp(-z)); % 隐层 Sigmoid 激活 y W2 * [a; 1]; % 输出层线性激活 % 计算雅可比矩阵 H H computeJacobian(W1, W2, u_k, a); % EKF 更新 S H * P * H R; % 新息方差 K P * H / S; % 卡尔曼增益 x x K * (d_noisy(k) - y); % 状态更新 P (eye(c) - K * H) * P; % 协方差更新 P P Q; % 参数漂移, 防止协方差塌缩 err(k) (d(k) - y)^2; % 记录滤波误差 end代码里几个参数需要特别说明。P 的初始值取 0.5·I表示对初始随机权值的置信度适中不会导致第一轮增益过大。Q 取 1e-4·I给参数留出微小的漂移空间同时不会让权值在最优解附近大幅抖动。R 直接取 0.5对应叠加噪声的真实方差在使用仿真数据时可以直接这样设置换成真实信号后R 通常需要用标定数据估计。computeJacobian 函数在 3.3 节已给出输入当前权值和输入样本返回 1×22 的雅可比行向量。4.3 两组噪声的仿真结果解读用 R10.1 和 R20.5 分别训练同一结构、同一随机种子的网络对比滤波输出与期望信号可以观察到两个直接结论。噪声较小R0.1时EKF 训练出的网络输出与原始 cos 曲线几乎重合误差序列快速收敛到很低的水平。此时观测噪声小新息方差 S 主要由模型不确定性贡献卡尔曼增益相对较大权值更新效率高。噪声较大R0.5时网络仍然能够辨识出 cos 信号的趋势但输出曲线明显变得粗糙拟合误差上升。原因是观测噪声大滤波器认为测量值不可靠增益被压低权值修正幅度相应减小。如果把不同设置下的表现列成一张表更直观场景R 设置现象原因分析轻度噪声R0.1滤波效果好曲线光滑观测可信度高增益大收敛准确较重噪声R0.5趋势保留细节抖动观测噪声大增益小权值受干扰Q1e-8任意后期误差不再下降协方差塌缩滤波器失去学习能力P1e3任意前几步震荡幅度大初始增益饱和权值被过度修正P 和 Q 的影响并非论文仿真部分的标准结论而是在实际复现过程中几乎必然遇到的现场情况。P 取得过大刚开始的卡尔曼增益太大权值会出现跳跃式修正表现为前几步误差先放大再收敛。4.4 信噪比过低时的方法边界当噪声能量远大于信号能量时EKF 训练网络会退化成“拟合噪声模式”。此时观测残差几乎完全由噪声构成网络能做的只是把噪声的随机起伏写进权值里。即便把 R 调小也只是让滤波器更相信观测结果噪声被更完整地学习进来。遇到这种情况正确思路不是继续调参而是先做一次粗粒度的前端处理。常见做法是先对原始信号做滑动平均或小波阈值去噪把信噪比提升到 0dB 以上再用 EKF 训练的前馈网络做精细滤波。论文结论中提到“辨识精度受噪声信号能量影响很大”实际对应到工程上就是这个边界。5. EKF 神经网络调试初始协方差与噪声矩阵调参5.1 P0、Q、R 的物理含义与倾向调试 EKF 训练网络时大部分问题都出在三个矩阵的尺度上而不是网络架构上。P0 表示初始权值的不确定度P0 大说明滤波器认为初始权值不可靠第一次迭代的增益就大权值会大跨度修正P0 小相当于暗示当前权值已经不错首轮更新幅度很小。工程经验是 P0 取 0.1 到 1 之间再大容易造成前几步震荡。Q 是参数空间的漂移噪声作用在于维持 P 的对角线不塌缩。Q 过小训练后期增益接近零网络学习冻结Q 过大收敛后权值会持续高频抖动。R 是观测噪声方差一个省事的估计方式是取训练数据前 100 个点的方差作为初始值再在对数域内上下调整。5.2 快速试跑参数模板如果从零开始调一套参数推荐从下面的组合起步P0 0.1·I Q 1e-4·I R 第一段数据方差保持 P0 和 R 不动把 Q 在 1e-6 到 1e-2 之间按 10 倍步长扫一圈比较最后 200 个样本的均方误差通常几分钟内就能找到可用的区间。相比同时调三个参数固定两个只扫一个的方法能快速定位问题。5.3 判定收敛的三个观察点判断训练是否真正收敛除了看误差曲线是否进入平台期更细致的方法是检查三个中间量P 的对角线是否下降到平稳值卡尔曼增益的范数是否趋近常数以及 H·P·H 是否落在 R 的同一量级。若 H·P·H 远大于 R说明当前模型预测的不确定度远高于观测噪声此时应该增大 Q 或减小 R让滤波器更积极地采用观测修正。本文还有配套的精品资源点击获取
返回列表