均方根信息滤波(SRIF)测试(二)

均方根信息滤波(SRIF)测试(二)
 鉴于目前已经具备了SRIF的基本概念以及其基本实现方法,非常有必要对其数据处理的性能进行分析和检测。滤波器的性能分析主要从以下几个方面进行分析:(1)对初始值的精度依赖(2)对噪声的抵抗能力(信息提取效率)(3)对粗差的抵抗能力。依然以抛物线方程为例进行分析,其参数设置与均方根信息滤波(SRIF)测试(一)( http://blog.csdn.net/hpulizhen/article/details/50420636)保持一致。

<1> 对初始值的精度依赖
       众所周知,在滤波数据处理中,虽然初始值的精度并不会影响到滤波收敛以后的参数估计值。但是初始值的精度依然会对滤波收敛过程有较大的影响,一般的可以认为,初始值不准会导致较长的收敛时间。 在抛物线例子中,参数的准确值为(a=3.2,b=1.2, c=3.0);如果在滤波中给定初始值为以上准确值,而且初始值的方差均为0.0001;另外为了只分析初始值的影响,需要排除其他因素的影响,所以设置较小的过程噪声(标准差为0.2),则可得其参数估计过程如下:
图片 

由图可见,准确的初始值几乎可以使得滤波过程没有收敛过程,从一开始就可以得到参数的准确值。而对于不准确的初始值又可以有2种不同的情况,一种是参数函数模型很准(参数值),而随机模型不准(参数方差协方差)。另一种就是参数的函数模型不准,而随机模型准确。实际上目前仍无较好的方法评价随机模型的准确性。第一种情况,我们取初始值分别是
a=3.2,b=1.2, c=3.0。而其方差均为100。则其滤波收敛过程如下:
图片
可见,其参数估计过程存在收敛过程,但是收敛以后参数估计值仍然是准确的。

第二种情况,取参数值分别是
=50,b=20, c=10。而其方差分别是1,1和1。则其收敛过程如下:
图片
由此可知,其仍然存在收敛过程,但是收敛时间明显比第一种情况长,而且在残差序列中也明显反应出了初始值的影响。而此时仅仅由残差是无法判定数据处理中到底是观测值出现问题还是参数估计中其他部分出现问题(比如此时的滤波初始值)。
由此可以得出结论:滤波初始值(包括函数模型和随机模型)对滤波的过程是有较大影响的。而往往由于对事物的本质认识不够深入(模型准确性)而难以判定数据处理中出现问题的原因。另外在本次测试中,滤波初现了不同的收敛时间(此现象在实际数据处理中特别常见),那么滤波的收敛时间到底跟什么有关系以及如何减少滤波收敛时间是个值得研究的问题。

<2>对噪声的抵抗能力

 数据处理的本质就是从带有噪声的观测数据中提取出有用的信息,而滤波对噪声的抵抗能力也可以反应出滤波算法对有用信息的提取效率。在噪声标准差为0.2时,其计算结果已分析过。当然前提是滤波的初始值完全准确(排除其他因素影响)。在噪声标准差提高到5.0时,其计算过程如下:
图片
 

由此可见,较大的观测值噪声对信息提取的影响并不大,参数也可以从一开始就得到准确的估计值。噪声几乎全部残留在了观测值残差中。该滤波数据处理方法对观测值噪声的抵抗能力较强。

 <3>对粗差的抵抗能力
在实际观测数据中,粗差不可避免,其对数据处理的影响非常大。因此在数据处理中需要尽可能的发现并剔除掉粗差观测值。 本次测试中观测噪声设置为正常值0.2.其计算结果如下:
图片 

粗差点为残差图中的红点所示,可见在滤波收敛以后,该算法对粗差的抵抗能力较强。几乎可以将粗差数据保留到观测值残差中。
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
当然可以!以下是一个简单的算法类示例,包括最小乘算法(Least Squares)、卡尔曼滤波算法(Kalman Filter)和方根信息滤波算法(Root Mean Square Information Filter)的实现: ```python import numpy as np class Algorithms: @staticmethod def least_squares(x, y): A = np.vstack([x, np.ones(len(x))]).T m, c = np.linalg.lstsq(A, y, rcond=None)[0] return m, c @staticmethod def kalman_filter(measurements, initial_estimate, initial_error, process_noise, measurement_noise): estimate = initial_estimate error = initial_error for measurement in measurements: # Prediction estimate = estimate error = error + process_noise # Update kalman_gain = error / (error + measurement_noise) estimate = estimate + kalman_gain * (measurement - estimate) error = (1 - kalman_gain) * error return estimate @staticmethod def rms_information_filter(measurements, initial_estimate, initial_error, process_noise, measurement_noise): estimate = initial_estimate error = initial_error for measurement in measurements: # Prediction estimate = estimate error = error + process_noise # Update info_gain = 1 / (1 / error + 1 / measurement_noise) estimate = estimate + info_gain * (measurement - estimate) error = info_gain return estimate # 示例用法 x = np.array([1, 2, 3, 4, 5]) y = np.array([2, 3, 4, 5, 6]) m, c = Algorithms.least_squares(x, y) print(f"Least Squares: y = {m}x + {c}") measurements = np.array([1.1, 2.2, 3.3, 4.4, 5.5]) initial_estimate = 0 initial_error = 1 process_noise = 0.2 measurement_noise = 0.1 kf_estimate = Algorithms.kalman_filter(measurements, initial_estimate, initial_error, process_noise, measurement_noise) print(f"Kalman Filter estimate: {kf_estimate}") rms_estimate = Algorithms.rms_information_filter(measurements, initial_estimate, initial_error, process_noise, measurement_noise) print(f"RMS Information Filter estimate: {rms_estimate}") ``` 此算法类提供了最小乘算法(Least Squares)、卡尔曼滤波算法(Kalman Filter)和方根信息滤波算法(Root Mean Square Information Filter)的实现。您可以根据需要将其导入您的代码,并使用相应的方法进行计算。 请注意,这只是一个简单的示例,实际应用中可能需要更多的参数和逻辑来处理不同的情况。希望对您有所帮助!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值