clear;

X(1,1)=0.950;

X(2,1)=0.004;

X(3,1)=0.004;%初值

R = 0.0001;

tf = 4000; %仿真长度

N = 1000; %粒子数目

P = 0.0001;

XhatPart1 = X(1,1);    %xhatPart=x=0.1

XhatPart2 = X(2,1);

XhatPart3 = X(3,1);

% Initialize the particle filter. 初始化粒子滤波,xpart值用来在不同时刻生成粒子

for i = 1 : N

Xpart(1,i) = X(1,1)+ wgn(1,1,10*log10(0.0001));

Xpart(2,i) = X(2,1)+ wgn(1,1,10*log10(0.0001));

Xpart(3,i) = X(3,1)+ wgn(1,1,10*log10(0.0001));

end      %初始化xpart(i)为生成的随机粒子(有时考虑到精度会手动初始化)

XArr1 = X(1,1);    %存放数组

XArr2 = X(2,1);

XArr3 = X(3,1);

XhatPartArr1 = XhatPart1;   %xhatPartArr = [xhatPart]=0.1;存放数组

XhatPartArr2 = XhatPart2;

XhatPartArr3 = XhatPart3;

close all;%close all 是关闭所有窗口(程序运行产生的,不包括命令窗,editor窗和帮助窗)

%clear all是清除所有工作空间中的变量

for k = 1 : tf %tf为时间长度,k可以理解为时间轴上的k时刻;Tf=50

% System simulation系统仿真

% x数据为时刻k的真实状态值

A=[0 0 0;0 -0.03 0;0 0 -0.003];

B=[-0.0003;-0.0014;-0.0003];

g(k)=-1.031*exp(-35*X(1,k))+3.685+0.2156*X(1,k)-0.1178*X(1,k)^2+0.3201*X(1,k)^3;

[G,H]=c2d(A,B,1);%离散化

X(:,k+1)=G*X(:,k)+0.08*H;%+wgn(3,1,10*log10(0.0001));这里不加系统噪声

Y(k)=g(k)+X(2,k)+X(3,k)+0.08*0.07;%+wgn(1,1,10*log10(0.0001));%这里也不加观测噪声

for i = 1 : N

Xpartminus(:,i)=G*Xpart(:,i)+0.08*H+wgn(3,1,10*log10(0.0001));

Ypart=-1.031*exp(-35*Xpartminus(1,i))+3.685+0.2156*Xpartminus(1,i)-0.1178*Xpartminus(1,i)^2+0.3201*Xpartminus(1,i)^3+Xpartminus(2,i)+Xpartminus(3,i)+0.08*0.07;

vhat = Y(k)-Ypart;%

q(i) = (1 / sqrt(R) / sqrt(2*pi)) * exp(-vhat^2 / 2 / R); %根据差值给出1粒子对应的权重

end

% Normalize the likelihood of each a priori estimate.       每一个先验估计正常化的可能性

qsum = sum(q);

for i = 1 : N

q(i) = q(i) / qsum;

end

for i = 1 : N

u = rand; % uniform random number between 0 and 1,0和1之间的均匀随机数;rand函数产生由在(0, 1)之间均匀分布的随机数组成的数组。

qtempsum = 0;

for j = 1 : N

qtempsum = qtempsum + q(j);

if qtempsum >= u

%重采样对低权重进行剔除,同时保留高权重,防止退化的办法

%part(i) = xpartminus(j);

Xpart(1,i)=Xpartminus(1,j);

break;

end

end

end

% The particle filter estimate is the mean of the particles.      粒子滤波的估计是颗粒的平均值

test=mean(Xpart(1,:));

Xpart(1,k+1) = test; %经过粒子滤波处理后的均值;mean(A)

%当A为向量时,那么返回值为该向量所有元素的均值

%当A为矩阵时,那么返回值为该矩阵各列向量的均值

%mean(A,2)

%返回值为该矩阵的各行向量的均值

% Plot the estimated pdf's at a specific time.      绘制在特定的时间估计的概率密度函数

if k == 20

% Particle filter pdf

pdf = zeros(81,1);% zeros,返回一个m x n x px...的矩阵,所有元素初始化为0。

for m = -40 : 40   % 为什么这么取呢

for i = 1 : N

if (m <= Xpart(1,i)) && (Xpart(1,i) < m+1)

%pdf为概率密度函数,这里是xpart(i)值落在[m, m+1)上的次数

pdf(m+41) = pdf(m+41) + 1;

end

end

end

end

% Save data in arrays for later plotting

XArr1 =[XArr1 X(1,k+1)];%

XhatPart1 =[XhatPart1 Xpart(1,k+1)];%

end

t = 0 : tf;

figure;

plot( t,XArr1, 'g',t, XhatPart1,'r'); %此图2对应xArr为真值,xhatPartArr为粒子滤波值%t, XArr1, 'b.',

xlabel('time step'); ylabel('state');

legend('True state', 'Particle filter estimate');

此算法是根据网上比较流行的粒子滤波算法改动的,在这里有三个状态变量,但我最终需要估计的是X1;事实上,系统矩阵均是动态的,但这里人为给固定了,成了非线性定常问题;  仿真出现的问题是:如果加系统误差以及观测误差的话,测量值非常紊乱,我做的是电池的SOC估计,而且是放电,因此SOC(在这里也即X1)应该是从1降到0左右才对,测量值不对,估计因此也不对;但是如果我把这两个噪声去掉的话,完全是真值,那么估计值慢慢收敛,但在收敛之后又发散了,不知为何,现在怀疑程序有问题,求高手指点!十分感谢!(代码直接复制仿真即可,由于仿真比较慢,可以把仿真时间改动一下,这里是4000,步长为1)

matlab斑点噪声算法,粒子滤波算法中的噪声问题相关推荐

  1. 目标跟踪之粒子滤波---Opencv实现粒子滤波算法

    目标跟踪学习笔记_2(particle filter初探1) 目标跟踪学习笔记_3(particle filter初探2) 前面2篇博客已经提到当粒子数增加时会内存报错,后面又仔细查了下程序,是代码方 ...

  2. 粒子滤波算法处理非线性噪声,程序简单好用

    粒子滤波算法处理非线性噪声,程序简单好用 4115632794284179嘟嘟--囔囔

  3. 目标跟踪-粒子滤波算法

    http://blog.csdn.net/hujingshuang/article/details/45535423 前言: 粒子滤波广泛的应用于目标跟踪,粒子滤波器是一种序列蒙特卡罗滤波方法,其实质 ...

  4. 滤波算法——均值滤波,中值滤波,一阶(αβ)滤波,卡尔曼滤波

    滤波算法--均值滤波,中值滤波,一阶(αβ)滤波,卡尔曼滤波 因工作涉及到数据滤波(滤噪)处理,汇总了一些网上简单的滤波算法,方便日后查看. 滤波算法包括:均值滤波,中值滤波,一阶(αβ)滤波,卡尔曼 ...

  5. MATLAB代码:基于粒子群算法的电动汽车充电站最优选址和定容

    MATLAB代码:基于粒子群算法的电动汽车充电站最优选址和定容 关键词:选址定容 电动汽车 充电站位置 仿真平台:MATLAB 主要内容:代码主要做的是一个电动汽车充电站的选址定容问题,提出了能够计及 ...

  6. matlab代码:基于粒子群算法的智能微电网经济运行优化 智能微电网PSO优化算法

    matlab代码:基于粒子群算法的智能微电网经济运行优化 智能微电网PSO优化算法 基于时段电价差异,制定合理的储能系统充放电运行方式,优化各时段微电网与主网之间的交换功率,从而使得风光储微网系统综合 ...

  7. DG储能选址定容模型matlab 程序采用改进粒子群算法,考虑时序性得到分布式和储能的选址定容模型

    DG储能选址定容模型matlab 程序采用改进粒子群算法,考虑时序性得到分布式和储能的选址定容模型,程序运行可靠 YID:87140641990659957爱熬夜的程序猿

  8. DG储能选址定容模型matlab 程序采用改进粒子群算法

    DG储能选址定容模型matlab 程序采用改进粒子群算法,考虑时序性得到分布式和储能的选址定容模型,程序运行可靠编号:75140641990659957爱熬夜的程序猿

  9. DG储能选址定容模型matlab 程序采用改进粒子群算法,考虑时序性得到分布式和储能的选址定容模型,程序运行可靠

    DG储能选址定容模型matlab 程序采用改进粒子群算法,考虑时序性得到分布式和储能的选址定容模型,程序运行可靠 YID:87140641990659957爱熬夜的程序猿

  10. DG储能选址定容模型matlab程序采用改进粒子群算法,考虑时序性得到分布式和储能的选址定容模型,程序运行可靠

    DG储能选址定容模型matlab程序采用改进粒子群算法,考虑时序性得到分布式和储能的选址定容模型,程序运行可靠 ID:69140641990659957

最新文章

  1. Linux 中 3 个文件打包上传和下载相关命令详解
  2. 32位系统和64位系统的选择
  3. java 内存区域中的栈
  4. Python入门100题 | 第016题
  5. java8中stream最实用总结和调试技巧
  6. java写入文件编码格式为ansi_Windows10 bat批处理删除 快速打开文件夹 固定到开始菜单或任务栏...
  7. oracle压缩参数,Oracle 11g版本EXPDP 的COMPRESSION参数压缩比堪比“gzip -9”
  8. sql server复制表_具有超过246列的表SQL Server复制
  9. 仿照vue实现简易的MVVM框架(二)
  10. java取html中的table_htmlunit 操作table表格(一)
  11. android 15 activity跳转
  12. Oracle WebLogic Server 12cR2 环境搭建集群部署
  13. 【评测】各种细胞治疗处理技术设备
  14. hⅰgh怎么读音发音英语_英语读音
  15. UE4-角色摄像机镜头的设置
  16. mysql使用结巴语句_MySQL 结巴中文分词插件 SqlJieba
  17. 【科普小知识】KMS 是什么?
  18. 机器学习中的数学——常用概率分布(九):经验分布(Empirical分布)
  19. ARM微控制器与嵌入式系统
  20. Google镜像代理地址:

热门文章

  1. IIS服务器重启三种方法
  2. Kali-linux :arping命令
  3. BM3D代码matlab,BM3D的学习与Matlab实现
  4. 电影中的计算机 过去与未来
  5. matlab高斯滤波器
  6. 【架构师面试-大厂内部面试题-4】-MySQL 运维基础知识面试题汇总50题
  7. oracle字段类型number默认值,Oracle 字段类型 | 学步园
  8. 数据库(MySQL)基础快速入门!
  9. ubuntu 安装 notepad++
  10. mysql查询编辑器_navicat怎么进入查询编辑器