主要内容

tf2ss

将传递函数滤波器参数转换为状态空间形式

说明

[A,B,C,D] = tf2ss(b,a) 将连续时间或离散时间单输入传递函数转换为等效的状态空间表示。

示例

示例

全部折叠

以如下由传递函数描述的系统为例:

H(s)=[2s+3s2+2s+1]s2+0.4s+1.

使用 tf2ss 将其转换为状态空间形式。

b = [0 2 3; 1 2 1];
a = [1 0.4 1];
[A,B,C,D] = tf2ss(b,a)
A = 2×2

   -0.4000   -1.0000
    1.0000         0

B = 2×1

     1
     0

C = 2×2

    2.0000    3.0000
    1.6000         0

D = 2×1

     0
     1

一维离散时间震荡系统由单位质点 m 通过一根单位弹性常量弹簧连接到墙壁构成。传感器以 a Hz 对质量的加速度 Fs=5 取样。

Mass-spring system, with a mass of 1 kilogram and a spring with elastic constant k=1 Newton per meter. The displacement of the mass is r (in meters).

生成 50 个时间采样。定义采样间隔 Δt=1/Fs

Fs = 5;
dt = 1/Fs;
N = 50;
t = dt*(0:N-1);
u = [1 zeros(1,N-1)];

系统的传递函数包含一个解析式:

H(z)=1-z-1(1+cosΔt)+z-2cosΔt1-2z-1cosΔt+z-2.

系统使用正方向的单位冲激进行刺激。使用传递函数计算系统的时间演进。绘制响应。

bf = [1 -(1+cos(dt)) cos(dt)];
af = [1 -2*cos(dt) 1];
yf = filter(bf,af,u);

stem(t,yf,"o")
xlabel("t")

Figure contains an axes object. The axes object with xlabel t contains an object of type stem.

求系统的状态空间表示。计算从全零初始状态开始的时间演进。将其与传递函数预测进行比较。

[A,B,C,D] = tf2ss(bf,af);

x = [0;0];
for k = 1:N
    y(k) = C*x + D*u(k);
    x = A*x + B*u(k);
end

hold on
stem(t,y,"*")
hold off
legend("tf","ss")

Figure contains an axes object. The axes object with xlabel t contains 2 objects of type stem. These objects represent tf, ss.

输入参数

全部折叠

传递函数分子系数,指定为向量或矩阵。如果 b 是矩阵,则 b 的每行对应于系统的一个输出。

  • 对于离散时间系统,b 包含按 z 的降幂排序的系数。

  • 对于连续时间系统,b 包含按 s 的降幂排序的系数。

对于离散时间系统,b 的列数必须等于 a 的长度。如果这两个数字不同,通过填充零使它们相等。您可以使用函数 eqtflength 来完成这项任务。

传递函数分母系数,指定为向量。

  • 对于离散时间系统,a 包含按 z 的降幂排序的系数。

  • 对于连续时间系统,a 包含按 s 的降幂排序的系数。

输出参量

全部折叠

状态矩阵,以矩阵形式返回。如果系统由 n 个状态变量描述,则 An×n 矩阵。

数据类型: single | double

输入-状态矩阵,以矩阵形式返回。如果系统由 n 个状态变量描述,则 Bn×1 矩阵。

数据类型: single | double

状态-输出矩阵,以矩阵形式返回。如果系统有 q 个输出,并且由 n 个状态变量描述,则 Cq×n 矩阵。

数据类型: single | double

馈通矩阵,以矩阵形式返回。如果系统有 q 个输出,则 Dq×1 矩阵。

数据类型: single | double

详细信息

全部折叠

扩展功能

全部展开

C/C++ 代码生成
使用 MATLAB® Coder™ 生成 C 代码和 C++ 代码。

版本历史记录

在 R2006a 之前推出

另请参阅

| | | | |