Transcript 下载PPT文档
2011-2012学年第二学期第一讲 系统辨识 王国利 信息科学与技术学院 中山大学 课程安排 时间和学时安排 - 课时: 18 X 3 学时 - 讲课: 2 X 15周(周五4-5节, C104) - 实践: 2 X 7周(双周二8-9节双, 实验教学中心B201) - 课件: http://human-robot.sysu.edu.cn/course/sysid12.htm - 答疑: [email protected] 成绩评定 - 参与教学: 10% - 课程实践: 30% - 课程考试: 60% 系统辨识是什么? 任务和目的 借助 实验数据 建立动态系统的 数学模型 系统的知识 信号与系统 以飞机为例 副翼/ 升降舵 强风/ 涡流 姿态/ 位置 SISO系统 连续系统离散化 采样周期:h 动态系统模型 差分方程 动态: 变量过去和当前的值影响到未来的值 y(t) – 1.5y(t –T)+ 0.7y(t – 2T)= 0.9u(t – 2T)+ 0.5u(t – 3T) y(t) = 1.5y(t –T)- 0.7y(t – 2T)+ 0.9u(t – 2T)+ 0.5u(t – 3T) 参数: 1.5, -0.7, 0.9, 0.5 时滞: 输出T, 2T 两项,输入2T, 3T 两项 阶数: 输出和输入的时滞项数 模型性质 脉冲响应形式 y(k) =i=0,k g(i)u(k− i)+v(k) {g(i)}: 系统的脉冲响应序列 阶跃响应 y(k) =i=0,k g(i)+v(k) 频域响应: 正旋信号输出的幅值增益和相位偏移 分别对应Bode图 线性模型 频域形式 Z-变换: F(z) = i=0,∞ f(i)z−i Y(z) =G(z)U(z)+H(z)V(z) G: 系统传递函数 H: 干扰传递函数 状态方程 x(t+1)=Ax(t)+Bu(t)+Ke(t) y(t)=Cx(t)+Du(t)+e(t) 若干信号的统计量 均值和方差 {s(k)} = {s(0), s(1), ...s(N)} 均值 协方差 做一个练习 任务:在MATLAB环境下,生成两个随机序列{S(k)} 和{R(k)} ,长度1000 >> S = 3*randn(1000,1)+10; >> R = 6*randn(1000,1)+20; >> mS = mean(S) >> mR = mean(R) >> covS = cov(S) >> covR = cov(R) >> Z = [S R]; >> covZ = cov(Z) 模型与系统 控制设计 预测 (e.g. 天气预报) 信号处理(e.g. 消除回声) 系统仿真 (e.g. 模拟核爆) 故障诊断 (e.g. 危险物质泄漏检测) 辨识的基本思想 基本环节 输入 输入测 量噪声 系统 + 达到要求 + + 输入测 量噪声 候选模型集 辨识准测 辨识算法 辨识准则 系统模型 更新系统模型 修改模型 调整参数 未达到 要求 辨识结果 辨识的基本步骤 待辨识系统 明确辨识目的 收集先验知识 实验设计 数据采集、存 储、预处理 模型及选择 辨识方法 模型集不合适 实验数据无效 模型检验 符合要求 模型输出 实例 干扰的困扰 G(s)=1/(0.25s2+0.33s + 1) 噪声方差为 0.001 1.6 1.4 1.2 1 0.8 0.6 0.4 0.2 0 -0.2 -0.4 0 0.5 1 1.5 2 2.5 3 3.5 4 4.5 5 MATLAB初识 DC Motor Control R = 2.0; % Ohms L = 0.5; % Henrys Km = 0.1; Kb = 0.1; % torque and back emf constants Kf = 0.2; % Nms J = 0.02; % kg.m^2/s^2 基尔霍夫定律 (Ls+R)ia+kb=va 牛顿第二定律 (Js+kf)=kmia, MATLAB初识(续) 阶跃响应 >> h1 = tf(Km,[L R]); >> h2 = tf(1,[J Kf]); % armature % eqn of motion >> dcm = ss(h2) * [h1 , 1]; >> dcm = feedback(dcm,Kb,1,1); % w = h2 * (h1*Va + Td) % close back emf loop >>stepplot(dcm(1)) MATLAB初识(续) 前馈控制 >> Kff = 1/dcgain(dcm(1)) >> t= 0:0.1:15; >> Td = -0.1 * (t>5 & t<10); >> u = [ones(size(t)) ; Td]; % load disturbance % w_ref=1 and Td >> cl_ff = dcm * diag([Kff,1]); % add feedforward gain >> set(cl_ff,'InputName',{'w_ref','Td'},'OutputName','w'); >> h = lsimplot(cl_ff,u,t); >> title('Setpoint tracking and disturbance rejection') >> legend('cl\_ff') % Annotate plot >> line([5,5],[.2,.3]); line([10,10],[.2,.3]); >> text(7.5,.25,{'disturbance','T_d = -0.1Nm'},... 'vertic','middle','horiz','center','color','r'); MATLAB初识(续) 前馈的控制结果 MATLAB初识(续) 反馈控制 >> h = rlocusplot(tf(1,[1 0]) * dcm(1)); >> setoptions(h,'FreqUnits','rad/sec'); >> set(gca,'Xlim',[-15 5],'Ylim',[-15 15]); MATLAB初识(续) >> K = 5; >> C = tf(K,[1 0]); >> >> >> >> >> % compensator K/s cl_rloc = feedback(dcm * append(C,1),1,1,1); h = lsimplot(cl_ff,cl_rloc,u,t); set(cl_rloc,'InputName',{'w_ref','Td'},'OutputName','w'); title('Setpoint tracking and disturbance rejection') legend('feedforward','feedback w/ rlocus','Location','NorthWest') MATLAB初识(续) 反馈的控制结果