资源简介
一个简单的贝叶斯辨识matlab的程序,希望对大家有帮助。
代码片段和文件信息
clear
L=60; %四位移位寄存器产生的M序列的长度
y1=1; y2=1; y3=1; y4=0; %四个移位寄存器的输出初始值
for i=1:L;
x1=xor(y3y4); %第一个移位寄存器的输入信号
x2=y1; %第二个移位寄存器的输入信号
x3=y2; %第三个移位寄存器的输入信号
x4=y3; %第四个移位寄存器的输入信号
y(i)=y4; %第四个移位寄存器的输出信号
if y(i)>0.5 u(i)=-1; %M序列的值为“1“时辨识的输入信号取“-1”
else u(i)=1; %M序列的值为“0“时辨识的输入信号取“1”
end
y1=x1; y2=x2; y3=x3; y4=x4; %为下一次的输入信号作准备
end
figure(1); subplot(211); stem(u) grid on %画第一个图形的第一个子图——M序列输入信号
v=randn(160); subplot(212); %产生一组长度为60的正态分布随机噪声
plot(v) grid on; %画第一个图形窗口的第二个子图——随机噪声信号
R=corrcoef(uv); %计算输入信号与随机噪声信号的相关系数
r=R(12) %取出并显示互相关系数
rv=std(v)*std(v) %计算并显示随机噪声的方差
u,v %显示输入信号和噪声信号
z(2)=0; z(1)=0; zs(2)=0; zs(1)=0; %输出采样、系统实际输出、模型输出赋初值
zm(2)=0; zm(1)=0; %模型输出赋初值
%Bayes辨识
c0=[0.001 0.001 0.001 0.001 0.001 0.001 0.001]‘; %直接给出被辨识参数的初始值即一个充分小的实向量
p0=10^6*eye(77); %直接给出初始状态P0,即一个充分大的实数单位矩阵
E=0.00000000005; %取相对误差E<=0.000000005为停机准则
c=[c0zeros(714)]; %被辨识参数矩阵的初始值及大小
e=zeros(715); %相对误差的初始值及大小
for k=3:20; %开始求K
z(k)=-1.5*z(k-1)+0.7*z(k-2)+u(k-1)+0.5*u(k-2)+v(k)-v(k-1)+0.2*v(k-2); %系统在M序列输入下的输出采样信号
h1=[-z(k-1)-z(k-2)u(k-1)u(k-2)v(k)v(k-1)v(k-2)]‘; %为求K(k)作准备
x=h1‘*p0*h1+rv;
x1=inv(x);
k1=p0*h1*x1; %K
d1=z(k)-h1‘*c0; %开始求被辨识参数c
c1=c0+k1*d1; %辨识参数c
zs(k)=-1.5*z(k-1)+0.7*z(k-2)+u(k-1)+0.5*u(k-2); %系统在M序列输入下的输出响应
zm(k)=[-z(k-1)-z(k-2)u(k-1)u(k-2)]*[c1(1);c1(2);c1(3);c1(4)]; %模型的输出响应
e1=c1-c0;
e2=e1./c0; %求参数的相对变化
e(:k)=e2;
c0=c1; %给下一次用
c(:k)=c1; %把辨识参数c 列向量加入辨识参数矩阵
p1=p0-k1*k1‘*[h1‘*p0*h1+1];%find p(k)
p0=p1; %给下次用
if e2<=E break; %若收敛情况满足要求,终止计算
end
end
ce z zs zm %显示被辨识参数、收敛情况、输出采样值、实际输出值、模型输出值
%分离赋值
a1=c(1:); a2=c(2:); b1=c(3:); b2=c(4:); %分离出a1、a2、b1、b2
d1=c(5:); d2=c(6:); d3=c(7:); %分离出d1、 d2、 d3
ea1=e(1:); ea2=e(2:); eb1=e(3:); eb2=e(4:); %分离出a1、 a2、b1、b2的收敛情况
ed1=e(5:); ed2=e(6:); ed3=e(7:); %分离出d1、 d2、 d3的收敛情况
figure(2); %画第二个图形
i=1:20;
plot(ia1‘r‘ia2‘r:‘ib1‘b‘ib2‘b:‘id1‘g‘id2‘g:‘id3‘g+‘) %画出被辨识参数的各次估计值
title(‘Parameter Identification with Recursive Least Squares Method‘) %标题
figure(3); %画出第三个图形
i=1:20;
plot(iea1‘r‘iea2‘r:‘ieb1‘b‘ieb2‘b:‘ied1‘g‘ied2‘g:‘ied2‘r+‘) %画出各个参数收敛情况
title(‘Identification Error‘) %标题
%Response %响应
figure(4); subplot(411); %画出第四个图形中的第一个子图
i=1:20;plot(izs(i)‘r‘) %画出被辨识系统在没有噪声情况下的实际输出响应
subplot(412); %画出第四个图形中的第二个子图
i=1:20;plot(iz(i)‘g‘) %画出被辨识系统输出的采样值
subplot(413); %画出第四个图形中的第三个子图
i=1:20;plot(izm(i)‘b‘) %画出模型含有噪声的输出响应
subplot(414); %画出第四个图形中的第四个子图
i=1:20;plot(izmy(i)‘b‘) %画出模型去除噪声后的输出响应
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 3336 2005-11-24 19:21 贝叶斯辨识.m
-rw-r--r-- 227 2011-08-12 15:27 readme_verysource.com.txt
----------- --------- ---------- ----- ----
3563 2
相关资源
- 朴素贝叶斯算法的matlab程序实现极大
- matlab贝叶斯分类(2)-10折10次交叉验
- 最简单的贝叶斯分类器演示Matlab程序
- 最大似然估计和贝叶斯参数估计
- 正态分布模式下的贝叶斯分类
- 贝叶斯最小错误分类器 matlab
- 信号检测贝叶斯
- matlab基于贝叶斯的手写输入数字识别
- 朴素贝叶斯算法matlab实现
- MATLAB代码最小风险贝叶斯决策
- matlab贝叶斯分类(3)-UCI数据集通用分
- Matlab贝叶斯分类器 (Bayers)程序
- 朴素贝叶斯算法matlab代码实现
- 基于最小错误率的Bayes分类器的MATLA
- 朴素贝叶斯分类matlab实现
- matlab贝叶斯源码iris分类
- 贝叶斯估计方法的matlab程序
- matlab-朴素贝叶斯-鸢尾花数据集
- 贝叶斯分类Matlab代码
- 模式识别matlab:最小错误率、最小风
- 基于贝叶斯算法的图像像素分割
- 朴素贝叶斯算法在matlab中实现
- 贝叶斯判别法的MATLAB实现
- adaboost 演示demo基于Matlab,学习算法包
- 模式识别的几个经典分类器,附matl
- 用matlab贝叶斯方法实现神经网络算法
- 正态分布模式的贝叶斯分类
- 贝叶斯网络(BNT)结构和参数的学习
- 贝叶斯分类算法MatLab实现
- 稀疏贝叶斯学习算法SBL-FM算法
评论
共有 条评论