定点状态空间过滤器?

信息处理 matlab 过滤器 声音的 状态空间 固定点
2022-02-07 00:43:45

在(32 位)定点中实现状态空间过滤器时遇到了困难。这是因为系数具有很大的动态范围,例如(MATLAB 代码):

A = [0.989923894 -116924.375; 4.34027786e-10 1];
B = [1; 0];
C = [0.010076086 1];
D = 0;

转换为双二阶部分时:

[sos, gain] = ss2sos(A,B,C,D);

系数很正常:

sos = 0    1.0000   -1.0000    1.0000   -1.9899    0.9900

b0 =  0.0000
b1 =  1.0000
b2 = -1.0000
a0 =  1.0000
a1 = -1.9899
a2 =  0.9900

gain = 0.0101

我能做些什么来让我的生活更轻松吗?欢迎任何建议。

1个回答

对状态空间方程进行相似变换*。

我假设您的原始系统是

xn=Axn1+Bunyn=Cxn

T=[1005108](请注意,我通过受过教育的眼球和一些乱七八糟的东西随意选择了这个——任何 T理论上是可逆的,所以你可以自由选择一个让你的问题变得漂亮的。)

然后定义χn=Txn. 系统

χn=T1ATχn1+T1Bunyn=CTχn

具有与原始系统完全相同的输入输出动态。不同之处在于T1AT[0.989923890.005846220.008680561]在数值上要好得多。您仍然会遇到 C 矩阵“条件不佳”的问题,但这几乎意味着χ对您的最终答案没有太大影响。

* Thomas Kailath 的“线性系统”,第 53-54 页,Prentice-Hall,1980