闭环传递函数φ(s)=e^(-s)/(2*s+1),,根据达林控制算法,分别算出单位阶跃信号输入、单位速度信号输入和单位加速度信号输入时的数字控制器的脉冲传递函数D(z)
时间: 2024-02-18 18:02:28 浏览: 67
根据达林控制算法,可以使用以下步骤来计算数字控制器的脉冲传递函数D(z):
1. 将连续时间传递函数φ(s)转换为离散时间传递函数φ(z)。
2. 根据所给的输入信号,求出对应的离散时间信号序列。
3. 根据达林控制算法,计算出数字控制器的脉冲响应序列。
4. 根据脉冲响应序列,求出数字控制器的脉冲传递函数D(z)。
下面分别计算单位阶跃信号输入、单位速度信号输入和单位加速度信号输入时的数字控制器的脉冲传递函数D(z)。
1. 单位阶跃信号输入:
首先将连续时间传递函数φ(s)转换为离散时间传递函数φ(z),一种常见的方法是使用Tustin方法进行双线性变换:
```
s = 2/T * (1 - z^-1) / (1 + z^-1)
```
其中,T是采样周期。将φ(s)=e^(-s)/(2*s+1)代入上式,得到:
```
φ(z) = (1 - z^-1) / (1 + 2T*z^-1 + T^2*z^-2)
```
接下来,求出单位阶跃信号输入对应的离散时间信号序列:
```
u = [1, ones(1, 99)];
```
然后,根据达林控制算法,计算数字控制器的脉冲响应序列:
```
N = 100;
p = zeros(1, N);
q = zeros(1, N);
for k = 1:N
p(k) = -phi(-1i*2*pi*(k-1)/N);
q(k) = phi(1i*2*pi*(k-1)/N);
end
h = ifft(p .* fft(u, N)) ./ ifft(q, N);
```
其中,phi是离散时间传递函数φ(z)的Z变换,可以用MATLAB的tf2zpk函数求解:
```
[num, den] = tfdata(tf([1 -1], [1 2 1]), 'v');
phi = @(z) polyval(num, z) ./ polyval(den, z);
```
最后,根据脉冲响应序列,求出数字控制器的脉冲传递函数D(z):
```
D = tf(h, 1, T);
```
2. 单位速度信号输入:
与单位阶跃信号输入类似,只需要将输入信号改为单位速度信号序列:
```
u = [1, ones(1, 99), -1*ones(1, 100)];
```
然后,再根据达林控制算法计算数字控制器的脉冲响应序列,最后求出脉冲传递函数D(z)。
3. 单位加速度信号输入:
同样地,将输入信号改为单位加速度信号序列:
```
u = [1, ones(1, 99), -2*ones(1, 100), 2*ones(1, 100), -1*ones(1, 100)];
```
然后,再根据达林控制算法计算数字控制器的脉冲响应序列,最后求出脉冲传递函数D(z)。
需要注意的是,在实际计算过程中,需要根据具体的采样周期和信号长度进行调整,以满足达林控制算法的要求。
阅读全文