ss2tf
将状态空间中的表示转换为传递函数。
库::`工程师`
争论
输入参数
# 倪 — 条目索引
+
1 (默认情况下)| 标量,标量
Details
输入的索引,设置为整数标量。 如果系统有 输入,使用功能 ss2tf 有争论 倪 来计算对施加到的单个脉冲的响应 倪-我进来了
| 数据类型 |
|
例子:
质量弹簧系统
Details
具有离散时间的一维振荡系统由单个质量块组成 ,通过具有单位弹性常数的弹簧附着在壁上 . 传感器记录加速度 频率质量 赫兹。
生成 50 时间很重要。 让我们定义采样间隔 .
Fs = 5
dt = 1 / Fs
N = 50
t = dt * (0:N-1)
振荡器可以用状态空间的方程来描述:
哪里 为状态向量, 和 -质量的位置和速度,分别与矩阵
A = [cos(dt) sin(dt); -sin(dt) cos(dt)]
B = [1-cos(dt); sin(dt)]
C = [-1 0]
D = 1
系统由正方向的单个脉冲激励。 我们使用状态空间模型来计算系统的时间演变,从零初始状态开始。
u = [1.0; zeros(N-1)]
x = [0; 0]
y = zeros(N)
for k = 1:N
y[k] = (C * x)[1] + D * u[k]
global x = A * x + B * u[k]
end
让我们绘制质量加速度对时间的依赖性。
plot(t, y,
seriestype = :stem,
marker = :circle,
legend = false)
让我们使用传递函数计算加速度对时间的依赖性 来对输入信号进行滤波。 让我们绘制结果图。
import EngeeDSP.Functions: ss2tf, filter
b, a = ss2tf(A, B, C, D)
yt = filter(b, a, u)
plot(t, yt,
seriestype = :stem,
marker = :circle,
legend = false)
系统的传递函数具有解析表达式:
我们使用这个表达式来过滤输入信号。 让我们建立一个响应图。
bf = [1 -(1 + cos(dt)) cos(dt)]
af = [1 -2*cos(dt) 1]
yf = filter(bf, af, u)
plot(t, yf,
seriestype = :stem,
marker = :circle,
legend = false)
结果在所有三种情况下都是相同的。
两个机构的振荡器
Details
理想的一维振荡系统由两个单位质量组成 和 封闭在两个壁之间。 每个质量通过具有单位弹性常数的弹簧附着在最近的壁上 . 另一个相同类型的弹簧连接两个质量块。 传感器记录质量加速度 和 ,与频率 赫兹。
设置总测量时间 16 C.定义采样间隔 .
Fs = 16
dt = 1 / Fs
N = 257
t = dt * (0:N-1)
该系统可以使用状态空间模型来描述。:
哪里 -状态的向量,以及 和 -位置和速度 -th质量,分别。 输入向量 和输出向量 . 状态空间矩阵:
哪里 , -连续时间状态空间矩阵:
但是
using LinearAlgebra
Ac = [0 1 0 0; -2 0 1 0; 0 0 0 1; 1 0 -2 0]
A = exp(Ac * dt)
Bc = [0 0; 1 0; 0 0; 0 1]
B = Ac \ (A - I(4)) * Bc
C = [-2 0 1 0; 1 0 -2 0]
D = I(2)
第一次弥撒
ux = [1; zeros(N-1)]'
u0 = zeros(1, N)
u = [ux; u0]
我们使用状态空间模型来计算系统的时间演变,从零初始状态开始。
x = zeros(4)
y = zeros(2, N)
对于k=1:N
y[:,k]=C*x+D*u[:,k]
全局x=A*x+B*u[:,k]
结束
让我们绘制两个质量块的加速度对时间的依赖性。
plot(t, y',
seriestype = :stem,
marker = :circle,
markersize = 1.5,
xlabel = "t",
label = ["a₁" "a₂"],
title = "Mass 1 Excited",
grid = true)
我们将系统转换为传递函数形式的表示。 让我们找到系统对第一质量上的正单脉冲作用的响应。
import EngeeDSP.Functions: ss2tf, filter
b1, a1 = ss2tf(A, B, C, D, 1)
y1u1 = filter(b1[1, :], a1, ux)
y1u2 = filter(b1[2, :], a1, ux)
让我们绘制结果图。 传递函数给出与状态空间模型相同的响应。
plot(t, [y1u1; y1u2]',
seriestype = :stem,
marker = :circle,
markersize = 1.5,
xlabel = "t",
label = ["a₁" "a₂"],
title = "Mass 1 Excited",
grid = true)
系统返回到其原始状态。 现在又是一个弥撒,
u = [u0; ux]
x = zeros(4)
for k = 1:N
y[:, k] = C * x + D * u[:, k]
global x = A * x + B * u[:, k]
end
让我们绘制加速度图。 个别群众的反应发生了变化。
plot(t, y',
seriestype = :stem,
marker = :circle,
markersize = 1.5,
xlabel = "t",
label = ["a₁" "a₂"],
title = "Mass 2 Excited",
grid = true)
让我们找到系统对第二质量上的正单脉冲作用的响应。
b2, a2 = ss2tf(A, B, C, D, 2)
y2u1 = filter(b2[1, :], a2, ux)
y2u2 = filter(b2[2, :], a2, ux)
让我们绘制结果图。 传递函数给出与状态空间模型相同的响应。
plot(t, [y2u1; y2u2]',
seriestype = :stem,
marker = :circle,
markersize = 1.5,
xlabel = "t",
label = ["a₁" "a₂"],
title = "Mass 2 Excited",
grid = true)