zoukankan      html  css  js  c++  java
  • 信号与系统MATLAB仿真——LTI连续系统的时域分析

    1. 知识回顾

    (1)经典时域分析方法

    线性时不变(LTI)系统是最常见最有用的一类系统,描述这类系统的输入-输出特性的是常系数线性微分方程。

    [egin{array}{l}
    {y^{(n)}}(t) + {a_{n - 1}}{y^{(n - 1)}}(t) + cdot cdot cdot + {a_1}{y^{(1)}}(t) + {a_0}y(t) = \
    {b_m}{f^{(m)}}(t) + {b_{m - 1}}{f^{(m - 1)}}(t) + cdot cdot cdot + {b_1}{f^{(1)}}(t) + {b_0}f(t)
    end{array}]

    齐次解:${y^{(n)}}(t) + {a_{n - 1}}{y^{(n - 1)}}(t) +  cdot  cdot  cdot  + {a_1}{y^{(1)}}(t) + {a_0}y(t) = 0$

    特征方程:[{lambda ^n} + {a_{n - 1}}{lambda ^{n - 1}} +  cdot  cdot  cdot  + {a_1}lambda  + {a_0} = 0]

    • 均为单根:[{y_h}(t) = sumlimits_{i = 1}^n {{C_i}{e^{{lambda _i}t}}} ]
    • 有重根($r$重根):[{y_h}(t) = sumlimits_{i = 1}^r {{C_i}{t^{i - 1}}{e^{{lambda _1}t}}} ]
    • 共轭复根(${lambda _{1,2}} = alpha  pm jeta $):[{e^{alpha t}}({C_1}cos eta t + {C_2}sin eta t)]
    • $r$重复根:[{e^{alpha t}}(sumlimits_{i = 1}^r {{C_{1i}}{t^{i - 1}}} cos eta t + sumlimits_{i = 1}^r {{C_{2i}}{t^{i - 1}}} sin eta t)]

    特解

    • $f(t) = {t^m}$
      • 所有的特征根均不等于0:[{y_p}(t) = {P_m}{t^m} + {P_{m - 1}}{t^{m - 1}} +  cdot  cdot  cdot  + {P_1}t + {P_0}]
      • 有$r$重等于0的特征根:[{y_p}(t) = {t^r}[{P_m}{t^m} + {P_{m - 1}}{t^{m - 1}} +  cdot  cdot  cdot  + {P_1}t + {P_0}]]
    • $f(t) = {e^{alpha t}}$:
      • $alpha $不是特征根:[{y_p}(t) = P{e^{alpha t}}]
      • $alpha $是特征单根:[{y_p}(t) = {P_1}t{e^{alpha t}} + {P_0}{e^{alpha t}}]
      • $alpha $是$r$重特征根:[{y_p}(t) = ({P_r}{t^r} + {P_{r - 1}}{t^{r - 1}} +  cdot  cdot  cdot  + {P_1}t + {P_0}){e^{alpha t}}]
    • $f(t) = cos eta t$或$sin eta t$:
      • 所有特征根均不等于$ pm jeta $:[{y_p}(t) = {P_1}cos eta t + {P_2}sin eta t]
      • $ pm jeta $是特征单根:[{y_p}(t) = t[{P_1}cos eta t + {P_2}sin eta t]]

    全解:[y(t) = {y_h}(t) + {y_p}(t)]

    (2)零输入响应与零状态响应

    [y(t) = {y_{zi}}(t) + {y_{zs}}(t)]

    (3)冲激响应和阶跃响应

    [left{ egin{array}{l}
    delta (t) = frac{{{ m{d}}varepsilon (t)}}{{{ m{d}}t}}\
    varepsilon (t) = int_{ - infty }^t {delta ( au ){ m{d}} au }
    end{array} ight.]

    [left{ egin{array}{l}
    h(t) = frac{{{ m{d}}g(t)}}{{{ m{d}}t}}\
    g(t) = int_{ - infty }^t {h( au ){ m{d}} au }
    end{array} ight.]

    (4)卷积积分

    [y(t) = {f_1}(t) * {f_2}(t) = int_{ - infty }^{ + infty } {{f_1}( au ){f_2}(t - } au ){ m{d}} au ]

    系统的零状态响应:[{y_{zs}}(t) = f(t) * h(t)]

    卷积积分的性质:

    • 交换律
    • 分配率
    • 结合律

    任意函数与单位冲激函数卷积的结果仍是函数本身:[f(t) * delta (t) = f(t)]

    2. 利用MATLAB求LTI连续系统的响应

    LTI连续系统以常微分方程描述,如果系统的输入信号及初始状态已知,便可以求出系统的响应。在MATLAB中,控制系统工具箱提供了函数lsim(),能对微分方程描述的LTI连续系统的响应进行仿真。该函数能够绘制连续系统在指定的任意时间范围内时域波形图,还能求出连续系统在指定的任意时间范围内响应的数值解。

    • lsim(b,a,x,t);

    a和b是描述系统的微分方程系数决定的表示该系统的两个行向量,x和t是表示输入信号的行向量(t表示输入信号的时间范围,x则表示在t定义的时间点上的输入取样值)。

    $frac{{{{ m{d}}^2}}}{{{ m{d}}{t^2}}}yleft( t ight) + 2frac{{ m{d}}}{{{ m{d}}t}}yleft( t ight) + yleft( t ight) = frac{{ m{d}}}{{{ m{d}}t}}fleft( t ight) + 2fleft( t ight)$

    $fleft( t ight) = 5{e^{ - 2t}}varepsilon left( t ight)$

    求零状态响应

    a=[1,2,1];
    b=[1,2];
    p=0.01;
    t=0:p:5;
    f=5*exp(-2*t);
    lsim(b,a,f,t);
    ylabel('y(t)');

    3. 利用MATLAB求LTI连续系统的冲激响应和阶跃响应

    • impulse(b,a);
    • impulse(b,a,t);
    • impulse(b,a,t1:p:t2);
    • step(b,a);
    • step(b,a,t);
    • step(b,a,t1:p:t2);

    $2frac{{{{ m{d}}^2}}}{{{ m{d}}{t^2}}}yleft( t ight) + frac{{ m{d}}}{{{ m{d}}t}}yleft( t ight) + 8yleft( t ight) = fleft( t ight)$

    求冲激响应和阶跃响应

    b=1;
    a=[2,1,8];
    subplot(1,2,1);impulse(b,a);
    subplot(1,2,2);step(b,a);

    4. 利用MATLAB实现连续时间信号的卷积

    • 对连续信号进行采样,得到离散序列;
    • 构造与输入离散序列相对应的时间向量;
    • 调用conv()函数计算卷积积分;
    • 构造与输出序列对应的时间向量。
    function [f,k]=sconv(f1,f2,k1,k2,p)
    %计算连续信号卷积积分复f(t)=f1(t)*f2(t)
    %f:卷积积分f(t)对应的非零样值向量
    %k:f(t)的对应时间向量
    %f1:f1(t)对应的非零样值向量
    %f2:f2(t)对应的非零样值向量
    %k1:f1(t)的对应时间向量
    %k2:f2(t)的对应时间向量
    %p:取样时间间隔
    f=conv(f1,f2);
    f=f*p;
    k0=k1(1)+k2(1);
    k3=length(f1)+length(f2)-2;
    k=k0:p:k3*p;
    subplot(2,2,1);plot(k1,f1);title('f1(t)');xlabel('t');ylabel('f1(t)');
    subplot(2,2,2);plot(k2,f2);title('f2(t)');xlabel('t');ylabel('f2(t)');
    subplot(2,2,3);plot(k,f);h=get(gca,'position');
    h(3)=2.5*h(3);set(gca,'position',h);title('f(t)=f1(t)*f2(t)');
    xlabel('t');ylabel('f(t)');
    end
    p=0.005;
    k1=0:p:2;
    f1=0.5*k1;
    k2=k1;
    f2=f1;
    [f,k]=sconv(f1,f2,k1,k2,p);

    conv()函数本来是用来做多项式乘法的。

    • w = conv(u,v)
    • w = conv(u,v,shape)

    $({x^2} + 1)(2x + 7) = 2{x^3} + 7{x^2} + 2x + 7$

    shape:

    • 'full':完整的卷积(默认);
    • 'same':与u相同大小的卷积的中心部分;
    • 'valid':只有那些计算卷积时没有在边缘填充0的部分。
  • 相关阅读:
    ORACLE 按照指定顺序排序输出某些字段
    jsp 选择年份产生周下拉框
    jsp标签foreach
    润乾报表个人笔记
    eclipse加大服务器容器内存
    jsp input中使用fmt 格式化时间
    log4j简单使用java web项目--后台打印以及输出到文件
    log4j简单使用java项目--后台打印以及输出到文件
    声明:放弃博客园平台,近日将所有随笔转移到CSDN,并删除所有已公开的随笔。
    项目 Java 2 go的一些准备活动
  • 原文地址:https://www.cnblogs.com/dingdangsunny/p/12921346.html
Copyright © 2011-2022 走看看