Posion 发表于 2016-3-24 15:48

模型误差与噪声 【转】

本帖最后由 Posion 于 2016-3-24 15:50 编辑

这几天单自由度总做不出来。用Matlab做了点儿数字试验。控制对象是一个质量块,给定外力,看它的阶跃响应。
一开始的实验,zhhSys_03,位置和速度都是微分方程计算的结果,是完全精确的,自然收敛没有问题。
随后的zhhSys_04,模拟实际过程,不用计算得来的位置和速度,把每次计算得到的位置,加上正态噪声,作为位置的测量值,给比例环节;前后两次的位置测量值的差,给微分环节。此时系统会不太稳定,有震荡。
再后的zhhSys_05,06没有区别。在04的基础上,如果力是减小的,就多减一点儿,是加大的,就少加一点儿。模拟磁轴承力模型线性化的误差。这会造成最终的静态误差。
做了四组实验。




这四个图大概说明:
1、模型线性化的误差,和测量误差会造成系统的震荡和稳态误差。
2、线性化误差小而测量误差大,与线性化误差大而测量误差小,效果差不多。
3、线性化误差测量误差都大,可能根本看不到系统做出预期的动作。如图0202,本来预期它向1的方向跃升,实际却变得更小,在-0.5左右大幅震荡。在CXF04上,就好像转子贴在一侧不动了。


程序
%sysZhh_04,张华的模拟系统文件
%每个时间段用x和x'计算控制力,一个时间段内控制力不变。
%把这个文件作为一系列数字试验的基础20151111
%现在这个文件模拟一个PD控制,控制一个质量快
%这个程序比03增加了噪声
function =sysZhh_04()
opt=odeset;
opt.RelTol = 1e-8;

t=zeros(1001,1);
y=zeros(1001,2);
zao=randn(1001,1)*0.3;%产生均值为0,方差为0.04的随机数
t(1,1)=0;
y(1,:)=;
index=1;
global Fx;
for i=0:0.1:100-0.1   
    if i==0
      Fx=0;
    else
      Fx=PD2(y(index,1)+zao(index,1),(y(index,1)+zao(index,1)-y(index-1,1)-zao(index-1,1))*10);      
    end
    =ode45(@shell_move2,,y(index,:),opt);
    index=index+1;
    lengthTemp = length(tt);
    t(index,1)= i+0.1;
    y(index,:)=yy(lengthTemp,:);
end;

function F=PD2(xx,xxx)
%PD控制计算
%第一个1是Kp,第二个1是位置的目标值,2是Kd
F=1*(1-xx)-2*xxx;

%这是一个质量快的运动方程
function dx=shell_move2(t,x)
global Fx;
dx=[x(2);
    0.1*Fx];    %0.1对应质量

>> =sysZhh_06
>>plot(y(1:900,:))


转自:http://blog.sina.com.cn/s/blog_4d9f829f0102vxpp.html

页: [1]
查看完整版本: 模型误差与噪声 【转】