如何使用状态空间矩阵找到滤波器的输出信号?

信息处理 状态空间
2022-02-05 16:22:42

我有一个过滤器。它有两个极点和两个零点。

我找到了状态空间方程和矩阵 A、B、C 和 D

现在。我有 9 个样本需要用我的过滤器处理。如何使用 A、B、C、D 矩阵来处理样本?

2个回答

我们对您的系统一无所知,但一般规则是:

y[n]=Cx[n]+Du[n]x[n+1]=Ax[n]+Bu[n]

在哪里u[n]是输入信号值,x[n]是给定时间点的状态向量值,并且y[n]显然是输出。

您需要做的是:

  • 初始化初始状态x[0]到某个任意值(通常是零向量)。
  • 通过因此计算的值来运行计算y[n]x[n+1]用于下一步。

说 Matlab'ish (未经测试,因为我正在旅行,但鉴于所有信息,它非常容易弄清楚发生了什么):

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

x_0 = zeros(size(A,1), 1); % Initial state
N = 9;
u = randn(1, N); % Some input signal
y = zeros(N, 1); % Output signal

x = u_0;
for n=1:N-1
  y(n) = C*x + D*u(n); % System output
  x = A*x + B*u(n);    % Transition
end

我不明白你的要求是什么。但是你可以找到过滤器的传输功能(因此通过放置's = jw'来响应频率)。这是方法,

dx/dt=Ax+Bu;(x为状态变量,y为输出,u为输入) Y =Cx+Du

在两侧应用拉普拉斯变换

sX(s)=AX(s)+BU(s);Y(s) =CX(s)+DU(s);

sX(s)-AX(s)=BU(s);X(s){SI-A}=BU(s);(I是单位矩阵)

X(s)=([SI-A]^-1)BU(s);

X(s) = V(s)BU(s) V(s)=[SI-A]^-1

Y(s)=CV(s)BU(s)+DU(s);

Y(s)/X(s) =CV(s)B+D;

这是 's' 域中的转移函数。