已知y(K)+2y(k-1)+2y(k-2)=f(k)+f(k-1),y(-1)=1,y(-2)=2,f(k)=u(k),请写出一段matlab的程序,求系统的h(k)、g(k)、y(k)
时间: 2023-12-14 19:03:34 浏览: 94
可以使用Z变换来求解该系统的传递函数,进而计算出系统的h(k)、g(k)、y(k)。具体步骤如下:
1. 将差分方程变换为Z域的表达式:
Y(z) + 2z^-1 Y(z) + 2z^-2 Y(z) = F(z) + z^-1 F(z)
其中,Y(z)表示系统的输出信号,F(z)表示系统的输入信号。
2. 整理得到系统的传递函数H(z):
H(z) = Y(z) / F(z) = (1 + 2z^-1 + 2z^-2) / (1 + z^-1)
可以使用matlab中的tf函数来实现传递函数的计算:
```matlab
num = [1, 2, 2]; % 分子多项式系数
den = [1, 1]; % 分母多项式系数
H = tf(num, den, -1) % 计算传递函数,-1表示离散时间
```
3. 求解系统的h(k)、g(k)、y(k):
h(k) = [z^(-k) / (2*pi*i)] * integral(H(z) * exp(zt), z, |z|=r)
g(k) = [z^(-k) / (2*pi*i)] * integral(H(z) * z^(-1) * exp(zt), z, |z|=r)
y(k) = g(k) * u(k) + h(k) * u(k-1)
其中,r为极点半径,一般取1。
可以使用matlab中的residue函数来计算系统的极点、零点和残差:
```matlab
[r, p, k] = residue(num, den) % 计算系统的极点、零点和残差
```
然后根据公式计算h(k)、g(k)、y(k):
```matlab
r = 1; % 极点半径
N = 100; % 积分离散点数
theta = linspace(0, 2*pi, N); % 积分区间
z = r * exp(1i * theta); % 极点坐标
zt = -kron((0:length(z)-1)', ones(1, N)) .* kron(ones(length(p), 1), theta); % 极点转移函数
H = residue(r, p, k); % 计算系统的传递函数
h = zeros(1, N); % 初始化h(k)
g = zeros(1, N); % 初始化g(k)
for k = 0:N-1
h(k+1) = (1 / (2*pi*1i)) * sum(H .* exp(zt(:, k+1))) * z(k+1)^(-k);
g(k+1) = (1 / (2*pi*1i)) * sum(H .* z.^(-1) .* exp(zt(:, k+1))) * z(k+1)^(-k);
end
y = g .* u(1:N) + h .* u(2:N+1); % 计算系统的输出信号
```
完整的matlab程序如下:
```matlab
% 系统的差分方程:y(k) + 2y(k-1) + 2y(k-2) = u(k) + u(k-1)
% 初始条件:y(-1) = 1, y(-2) = 2
% 求解系统的h(k)、g(k)、y(k)
% 计算系统的传递函数
num = [1, 2, 2]; % 分子多项式系数
den = [1, 1]; % 分母多项式系数
H = tf(num, den, -1); % 计算传递函数,-1表示离散时间
% 计算系统的极点、零点和残差
[r, p, k] = residue(num, den);
% 计算h(k)、g(k)、y(k)
r = 1; % 极点半径
N = 100; % 积分离散点数
theta = linspace(0, 2*pi, N); % 积分区间
z = r * exp(1i * theta); % 极点坐标
zt = -kron((0:length(z)-1)', ones(1, N)) .* kron(ones(length(p), 1), theta); % 极点转移函数
H = residue(r, p, k); % 计算系统的传递函数
h = zeros(1, N); % 初始化h(k)
g = zeros(1, N); % 初始化g(k)
for k = 0:N-1
h(k+1) = (1 / (2*pi*1i)) * sum(H .* exp(zt(:, k+1))) * z(k+1)^(-k);
g(k+1) = (1 / (2*pi*1i)) * sum(H .* z.^(-1) .* exp(zt(:, k+1))) * z(k+1)^(-k);
end
u = [0, 1, ones(1, N-1)]; % 输入信号
y = g .* u(1:N) + h .* u(2:N+1); % 计算系统的输出信号
% 绘制h(k)、g(k)、y(k)的图像
subplot(3, 1, 1); plot(h); title('h(k)');
subplot(3, 1, 2); plot(g); title('g(k)');
subplot(3, 1, 3); plot(y); title('y(k)');
```
阅读全文