定点状态空间系统的极限环检测
这个例子展示了如何分析一个定点状态空间系统来检测极限环。
该示例着重于检测由于零输入溢出而产生的大规模极限环,并强调了足以防止此类振荡的条件。
引用:
[1] Richard A. Roberts和Clifford T. Mullis,“数字信号处理”,Addison-Wesley, Reading, Massachusetts, 1987, ISBN 0-201-16350-0,第9.3节。
[2] S. K. Mitra,“数字信号处理:基于计算机的方法”,McGraw-Hill,纽约,1998,ISBN 0-07-042953-7。
选择系统的状态空间表示。
通过观察状态转移矩阵A的特征值的大小小于1,我们观察到系统是稳定的。
originalFormat = get(0,“格式”);format A = [0 1;-.5 1];B = [0;1);C = [10 0];D = 0;eig (A)
Ans = 0.5000 + 0.5000i 0.5000 - 0.5000i
滤波器的实现
类型(fullfile (matlabroot“工具箱”,“定点”,“fidemos”,' + fidemo ',“fisisostatespacefilter.m”))
function [y,z] = fisisostatespacefilter(A,B,C,D,x,z) % fisisostatespacefilter单输入、单输出状态空间过滤器% [y, Zf] = fisisostatespacefilter(A,B,C,D,x, Zi)使用由矩阵% A,B,C,D定义的状态空间过滤器过滤初始条件为% Zi的数据x,返回输出y和最终条件Zf。版权所有The MathWorks, Inc. y = x;Z(:,2:长度(x)+1) = 0;对于k=1:长度(x) y(k) = C*z(:,k) + D*x(k);z(:,k+1) = A*z(:,k) + B*x(k);结束
浮点型过滤器
创建一个浮点过滤器并观察状态的轨迹。
首先,我们在单位方格内选择随机状态,并观察它们在被状态转移矩阵A乘上一步后的投影位置。
rng (“默认”);CLF x1 = [-1 1 1 -1];Y1 = [-1 -1 1 -1];情节(x1, y1,“c”轴([-1.5 1.5 -1.5 1.5]);轴广场;网格;持有在画出正方形的投影p = A*[x1;y1];情节(p(1:)、p (2:)“r”r = 2*rand(2,1000)-1;pr = A*r;情节(公关(1:),公关(2:)“。”)
随时间变化的随机初始状态
驱动带有随机初始状态的过滤器,将其归一化到单元正方形内,输入全部为零,然后运行过滤器。
注意,有些状态游离在单位方格之外,它们最终在原点z=[0;0]处趋于零状态。
X = 0 (10,1);Zi = [0;0];Q =量化器([16 15]);为K =1:20 y = x;zi(:) = randquant(q,size(A,1),1);[y,zf] = fidemos .fisisostatespacefilter(A,B,C,D,x,zi);情节(zf (1:), zf (2:),“去,”,“markersize”8);结束标题(“双精度状态序列图”);包含(“z1”);ylabel (“z2”)
状态轨迹
因为特征值在大小上小于1,系统是稳定的,所有的初始状态都在零输入的原点上。然而,特征值并不能说明状态轨迹的全部情况,就像在这个例子中,在它们开始收缩之前,状态首先向外投射。
A的奇异值使我们能够更好地表示整体状态轨迹。最大的奇异值约为1.46,这表明与相应奇异向量对齐的状态将被投影远离原点。
圣言(A)
Ans = 1.4604 0.3424
定点过滤器创建
创建一个定点过滤器并检查极限环。
滤波器的MATLAB®代码保持不变。它变成了一个定点滤波器因为我们用定点输入驱动它。
为了说明溢出振荡,我们选择将溢出的乘积和数据类型。
rng (“默认”);F = fimath)“OverflowAction”,“包装”,...“ProductMode”,“SpecifyPrecision”,...“ProductWordLength”, 16岁,“ProductFractionLength”15岁的...“SumMode”,“SpecifyPrecision”,...“SumWordLength”, 16岁,“SumFractionLength”15);A = fi(A,“fimath”F) B = fi(B,“fimath”,F) C = fi(C,“fimath”D = fi(D,“fimath”F)
A = 0 1.0000 -0.5000 1.0000 DataTypeMode: Fixed-point: binary point scaling signential: Signed WordLength: 16 FractionLength: 14 RoundingMethod: Nearest OverflowAction: Wrap ProductMode: speciyprecision ProductWordLength: 16 ProductFractionLength: 15 SumMode: speciyprecision SumWordLength: 16 SumFractionLength: 15 CastBeforeSum: true B = 0 1 DataTypeMode: Fixed-point: binary point scaling signential: Signed WordLength: 16 FractionLength: 14 RoundingMethod: Nearest OverflowAction: Wrap ProductMode: speciyprecision ProductWordLength: 16 SumFractionLength: 15 CastBeforeSum: trueWrap ProductMode: speciyprecision ProductWordLength: 16 ProductFractionLength: 15 SumMode: specificyprecision SumWordLength: 16 SumFractionLength: 15 CastBeforeSum: true C = 1 0 DataTypeMode: Fixed-point: binary -point scaling sign度:Signed WordLength: 16 FractionLength: 14 RoundingMethod: Nearest OverflowAction: Wrap ProductMode: specificyprecision ProductWordLength: 16 ProductFractionLength: 15 SumMode: specificyprecision SumWordLength: 16 SumFractionLength: 15 CastBeforeSum:true D = 0 DataTypeMode: Fixed-point: binary point scaling sign度:Signed WordLength: 16 FractionLength: 15 RoundingMethod: Nearest OverflowAction: Wrap ProductMode: specificyprecision ProductWordLength: 16 ProductFractionLength: 15 SumMode: specificyprecision SumWordLength: 16 SumFractionLength: 15 CastBeforeSum: true
在定点上绘制正方形的投影
同样,我们在单位方格内选择随机状态,并观察它们在被状态转移矩阵A乘上一步后的投影位置。不同的是,这个时间矩阵A是定点的。
注意,以前在浮点中投影出正方形的三角形现在被包装回了正方形的内部。
CLF r = 2*rand(2,1000)-1;pr = A*r;图([-1 1 1 -1 -1],[-1 -1 1 1 -1],“c”轴([-1.5 1.5 -1.5 1.5]);轴广场;网格;持有在情节(公关(1:),公关(2:)“。”)
执行定点过滤器。
这段代码与前面代码之间的唯一区别是,我们使用定点数据类型驱动它。
X = fi(0 (10,1) 1,16,15,“fimath”F);Zi = fi([0;0],1,16,15,“fimath”F);Q = assignmentquantizer(zi);E = double(eps(zi));rng (“默认”);为K =1:20 y = x;zi(:) = randquant(q,size(A,1),1);[y,zf] = fidemos .fisisostatespacefilter(A,B,C,D,x,zi);如果abs(双(zf(结束)))> 0.5,c =“ro - - - - - -”;其他的c =“去,”;结束情节(zf (1:), zf (2:), c,“markersize”8);结束标题(“定点状态序列图”);包含(“z1”);ylabel (“z2”)
对其他随机选择的初始状态进行尝试表明,一旦一个状态进入其中一个三角区域,那么它就会被投射到另一个三角区域,然后来回投射,永远不会逃脱。
防止溢出极限循环的充分条件
有两个充分条件可以防止系统的极限循环溢出:
系统稳定,即abs(eig(A))<1,
矩阵A是正规的,即A'*A = A*A'。
注意,对于当前表示,第二个条件不成立。
应用相似度变换创建标准a
我们现在对原始系统应用一个相似变换,它将创建一个正常的状态转移矩阵A2。
T = [-2 0;-1 1];Tinv =[-]。5 0; -。5 1];A2 = Tinv*A*T;B2 = Tinv*B;C2 = c * t;D2 = d;
相似变换保留了特征值,使得变换后的系统传递函数保持不变。然而,转换后的状态变换矩阵A2是正常的。
检查转换系统上的极限环。
绘制范式系统的平方投影
现在单位方格内的随机初始状态的投影都一致收缩。这是状态转移矩阵A2正常的结果。状态也逆时针旋转90度。
CLF r = 2*rand(2,1000)-1;pr = A2*r;图([-1 1 1 -1 -1],[-1 -1 1 1 -1],“c”轴([-1.5 1.5 -1.5 1.5]);轴广场;网格;持有在情节(公关(1:),公关(2:)“。”)
绘制状态序列
再次绘制相同初始状态的状态序列,我们看到输出现在螺旋向原点。
X = fi(0 (10,1) 1,16,15,“fimath”F);Zi = fi([0;0],1,16,15,“fimath”F);Q = assignmentquantizer(zi);E = double(eps(zi));rng (“默认”);为K =1:20 y = x;zi(:) = randquant(q,size(A,1),1);[y,zf] = fidemos .fisisostatespacefilter(A2,B2,C2,D2,x,zi);如果abs(双(zf(结束)))> 0.5,c =“ro - - - - - -”;其他的c =“去,”;结束情节(zf (1:), zf (2:), c,“markersize”8);结束标题(“标准形式定点状态序列图”);包含(“z1”);ylabel (“z2”)
对其他随机选择的初始状态进行尝试表明,没有一个区域是过滤器无法恢复的。
集(0,“格式”, originalFormat);% #好< * NASGU, * NOPTS >