【问题标题】:MATLAB Lsim initial value for RC filter doesnt workRC滤波器的MATLAB Lsim初始值不起作用
【发布时间】:2019-10-18 01:29:46
【问题描述】:

我将模拟一个具有一些初始值的 RC(低通)滤波器。

R = 1e3; % 1kOm
C = 100e-6; % 100uF
es = tf('s');
LP1 = 1 / (R*C*es + 1);
Ts = 0.1; % 100ms
sysd = c2d(LP1, Ts);

初始值意味着电容器被充电到某个电压(比如说 5V),我们在输入端施加一些电压(比如说 10V)。我会看到输出电压/时间图:

x0 = 5; % 5V
input = 10; % 10V
N = 100;
lsim(sysd, ones(1, N)*input, [], x0);

显示的绘图从零开始(无初始条件)。如果我将 tf 转换为 ss:

lsim(ss(sysd), ones(1, N)*input, [], x0);

绘图从非零值开始,但我设置的初始值不是 5V。 它有什么问题,如何模拟它?

【问题讨论】:

    标签: matlab filtering transfer-function


    【解决方案1】:

    lsim()x0 输入仅用于定义状态空间系统的初始条件。

    • 在第一个示例中,sysd 是一个传递函数,因此x0 没有任何影响,并且使用了零初始条件。
    • 在第二个示例中,ss(sysd) 是一个状态空间模型,因此 x0 指定初始 状态 而不是您想要的输出。要了解发生了什么,让我们看一下您的状态空间模型:
    >> ss(sysd)
    
    ans =
    
      A = 
               x1
       x1  0.3679
    
      B = 
           u1
       x1   1
    
      C = 
               x1
       y1  0.6321
    
      D = 
           u1
       y1   0
    
    Sample time: 0.1 seconds
    Discrete-time state-space model.
    

    根据state-space 输出方程y = Cx + Du ,初始输出等于C*x0 = 0.6321*5 = 3.16,这与您的绘图中的结果相匹配。相反,您应该设置x0 = y0 / ss(sysd).C,其中y0 是所需的初始输出。对于y0 = 5,这意味着设置x0 = 7.91

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-02
      • 1970-01-01
      • 2015-02-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多