⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 rlspara.m

📁 卡尔曼滤波算法的仿真、最小二乘参数估计、整个电池管理系统的simulink仿真
💻 M
字号:
%递推最小二乘参数辨识rlspara.m
clear all%清理工作间变量

N1=1372;%基本周期
num=1;%周期数
N=N1*num;%算法使用的数据点数

%模拟电流的变化
I1=(96.5*randn(1,N1)+100)/4; 
I=[I1];% I1 I1 I1 I1 I1 I1 I1];

for n=1:N
    %放电电流
    if I(n)>0 
        u1(n)=I(n);
        u2(n)=0;
    %充电电流
    else
        u1(n)=0;
        u2(n)=I(n);
    end
    %模拟SOC的变化,假设呈现线性变化
     u3(n)=0.643-0.409*10^-4*(n-1);
     u4(n)=1/u3(n);  %1/SOC
     u5(n)=log(u3(n)); %ln(SOC)
     u6(n)=log(1-u3(n)); %ln(1-SOC)
     %模拟输出即电压的变化
     y(n) = 902.66-0.2594*u1(n)-0.2288*u2(n)-1088.3*u3(n)+33.482*u4(n)+320.64*u5(n)-307.3*u6(n);
end
y=y+randn(1,N);
%递推最小二乘辨识
c0=[0.001 0.001 0.001 0.001 0.001 0.001 0.001]'; %直接给出被辨识参数的初始值,即一个充分小的实向量
p0=10^6*eye(7,7); %直接给出初始状态P0,即一个充分大的实数单位矩阵
% E=0.000000005; %取相对误差E=0.000000005
c=[c0,zeros(7,N-1)]; %被辨识参数矩阵的初始值及大小
e=zeros(7,N); %相对误差的初始值及大小
for k=1:N; %开始求K 
    h=[1,u1(k),u2(k),u3(k),u4(k),u5(k),u6(k)]'; x=h'*p0*h+1; x1=inv(x); %开始求K(k)
    Kk=p0*h*x1;%求出K的值
    d1=y(k)-h'*c0; c1=c0+Kk*d1; %求被辨识参数c
    e1=c1-c0; %求参数当前值与上一次的值的差值
    e2=e1./c0; %求参数的相对变化
    e(:,k)=e2; %把当前相对变化的列向量加入误差矩阵的最后一列       
    c0=c1; %新获得的参数作为下一次递推的旧参数
    c(:,k)=c1; %把辨识参数c 列向量加入辨识参数矩阵的最后一列 
    p1=p0-x1*p0*h*h'*p0;%求出 p(k)的值
    %p1=p0-k1*k1'*[h1'*p0*h1+1]; 
    p0=p1; %给下次用
%     if e2<=E 
%       break; %如果参数收敛情况满足要求,终止计算
%     end %小循环结束
end %大循环结束
% 分离参数
K0=c(1,:); Rd=c(2,:); Rc=c(3,:); K1=c(4,:); K2=c(5,:); K3=c(6,:); K4=c(7,:); 
eK0=e(1,:); eRd=e(2,:); eRc=e(3,:); eK1=e(4,:);eK2=e(5,:); eK3=e(6,:); eK4=e(7,:);  
figure(1); %第1个图形
i=1:N; 
plot(i,K0,'r',i,Rd,':',i,Rc,'g',i,K1,':',i,K2,':',i,K3,':',i,K4,':')  %画出K0,Rd,Rc,K1,K2,K3,K4的各次辨识结果
title('Parameter Identification with Recursive Least Squares Method') %图形标题
figure(2); %第2个图形
i=1:N; 
plot(i,eK0,'r',i,eRd,'g',i,eRc,'b',i,eK1,'r:',i,eK2,'r:',i,eK3,'r:',i,eK4,'r:') %画出K0,Rd,Rc,K1,K2,K3,K4的各次辨识结果的收敛情况
title('Identification Precision') %图形标题

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -