RC滤波器的MATLAB Lsim初始值不起作用

时间:2019-06-02 00:17:44

标签: matlab filtering electronics lti transfer-function

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

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。 enter image description here 它有什么问题,如何模拟?

1 个答案:

答案 0 :(得分:0)

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

  • 在第一个示例中,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