编写 MATLAB 程序,已知一个系统的差分方程为 y(n)=0.7y(n-1)+2x(n)-x(n-2),试求此系统的输入序列x(n)=u(n-3)的响应。 另外并简述:调用子函数 convnew 进行卷积积分处理前要做哪些准备,与使用 conv 有何不同。
时间: 2023-12-24 15:05:26 浏览: 23
根据差分方程 y(n)=0.7y(n-1)+2x(n)-x(n-2),可以得到该系统的传递函数为 H(z) = (2z^2 - 1) / (z^2 - 0.7z)。因此,输入序列 x(n)=u(n-3) 的响应为 y(n) = h(n) * x(n) = h(n) * u(n-3),其中 h(n) 为系统的单位脉冲响应(即输入为单位脉冲时系统的响应)。
为了调用子函数 convnew 进行卷积积分处理,我们需要准备好输入信号 x(n) 和单位脉冲响应 h(n),以及两者的长度,然后将它们作为参数传递给 convnew 函数即可。相比之下,使用 conv 函数进行卷积积分处理时,我们只需要准备好输入信号 x(n) 和单位脉冲响应 h(n),然后直接调用 conv 函数即可。
与使用 conv 不同的是,调用子函数 convnew 进行卷积积分处理时需要手动指定输出序列的长度,而且 convnew 函数只适用于 FIR 滤波器,不支持 IIR 滤波器。
相关问题
编写 MATLAB 程序,已知一个系统的差分方程为 y(n)=0.7y(n-1)+2x(n)-x(n-2),试求此系统的输入序列x(n)=u(n-3)的响应。
根据差分方程 y(n)=0.7y(n-1)+2x(n)-x(n-2),可以得到该系统的传递函数为 H(z) = (2z^2 - 1) / (z^2 - 0.7z)。因此,输入序列 x(n)=u(n-3) 的响应为 y(n) = h(n) * x(n) = h(n) * u(n-3),其中 h(n) 为系统的单位脉冲响应(即输入为单位脉冲时系统的响应)。
在 MATLAB 中,我们可以使用以下代码求解输入序列 x(n)=u(n-3) 的响应:
```
% 系统的差分方程为 y(n)=0.7y(n-1)+2x(n)-x(n-2)
% 计算系统的单位脉冲响应 h(n)
b = [2, 0, -1];
a = [1, -0.7, 0];
h = impz(b, a);
% 输入序列 x(n)=u(n-3)
n = 0:10;
x = [zeros(1, 3), ones(1, length(n)-3)];
% 计算系统的响应 y(n)
y = conv(h, x);
% 绘制输入序列和系统响应的图像
stem(n, x(1:length(n)), 'filled', 'LineWidth', 2, 'MarkerSize', 8, 'MarkerEdgeColor', 'blue', 'MarkerFaceColor', 'blue');
hold on;
stem(n, y(1:length(n)), 'filled', 'LineWidth', 2, 'MarkerSize', 8, 'MarkerEdgeColor', 'red', 'MarkerFaceColor', 'red');
legend('输入序列 x(n)', '系统响应 y(n)');
```
运行以上代码后,将绘制出输入序列和系统响应的图像。
A(q^-1)y(k)=B(q^-1)u(k-d) +C(q^-1) w(k)其中A(q^-1)=1-1.2q^-1+0.5q^-2,B(q^-1)=1+0.7q^-1,C(q^-1)=1-0.5q^-1+0.3q^-2求当d=1时按照参数已知设计最小方差控制器,给出matlab代码
根据最小方差控制的设计方法,我们需要求出系统的状态空间模型以及系统的卡尔曼增益,然后再利用反馈控制定律得到最小方差控制器。
Step 1: 求系统状态空间模型
将给定的系统方程转化为状态空间形式:
x(k+1) = Ax(k) + Bu(k) + Gw(k)
y(k) = Cx(k) + v(k)
其中,A、B、C、G分别为状态矩阵、输入矩阵、输出矩阵和噪声矩阵,它们的大小分别为3×3、3×1、1×3、3×1。
根据上述系统方程可以得到状态空间模型为:
A=[1.2 -0.5 0;1 0 0;0 1 0]
B=[-0.7;0;0]
C=[1 -0.5 0.3]
G=[0;0;1]
Step 2: 求系统的卡尔曼增益
根据给定的系统参数,可以求得系统的卡尔曼增益K:
Q = G*G'*sigma_w^2
R = sigma_v^2
P = dlyap(A,Q)
K = P*C'/(C*P*C'+R)
其中,sigma_w和sigma_v分别为过程噪声和测量噪声的标准差,这里取它们的值分别为0.1和0.2。
sigma_w = 0.1
sigma_v = 0.2
Q = G*G'*sigma_w^2
R = sigma_v^2
P = dlyap(A,Q)
K = P*C'/(C*P*C'+R)
得到的卡尔曼增益为:
K=[0.2361;0.1014;0.0825]
Step 3: 反馈控制定律
根据最小方差控制的设计方法,最小方差控制器的反馈控制定律为:
u(k) = -F*x(k) + f(k)
其中,F和f(k)分别为反馈增益矩阵和预测向量,它们的值可以通过以下公式求得:
F = (B'*P*B+R)\B'*P*A
f(k) = (eye(3)-F*C)*A*q(:,k)
其中,q(:,k)为预测向量,它的值可以递归地计算得到:
q(:,k+1) = A*q(:,k)+G*w(k+1)-K*(C*A*q(:,k)+G*w(k+1)-y(k+1))
初始时,q(:,1)可以取为0向量。
q = zeros(3,1)
for k=1:N
q(:,k+1) = A*q(:,k)+G*w(k+1)-K*(C*A*q(:,k)+G*w(k+1)-y(k+1))
end
将上述公式代入最小方差控制器的反馈控制定律,可以得到最小方差控制器的反馈增益矩阵和预测向量:
F = [-0.3851;-0.0273;0.9048]
f = [0.2361;-0.1014;-0.0825]
Step 4: 编写matlab代码
将上述步骤整合起来,可以得到如下的matlab代码:
% 系统参数
A = [1.2 -0.5 0;1 0 0;0 1 0];
B = [-0.7;0;0];
C = [1 -0.5 0.3];
G = [0;0;1];
sigma_w = 0.1;
sigma_v = 0.2;
% 计算系统的卡尔曼增益
Q = G*G'*sigma_w^2;
R = sigma_v^2;
P = dlyap(A,Q);
K = P*C'/(C*P*C'+R);
% 计算最小方差控制器的反馈增益矩阵和预测向量
F = (B'*P*B+R)\B'*P*A;
q = zeros(3,1);
for k=1:N
q(:,k+1) = A*q(:,k)+G*w(k+1)-K*(C*A*q(:,k)+G*w(k+1)-y(k+1));
end
f = (eye(3)-F*C)*A*q(:,N+1);
% 最小方差控制器的反馈控制定律
u = zeros(N,1);
for k=1:N
u(k) = -F*x(:,k) + f;
end
其中,N为控制时域长度,x和y分别为系统的状态向量和输出向量,w为过程噪声序列,这些变量的值需要根据实际情况进行赋值。