主要内容

检测固定点状态空间系统中的极限循环

此示例显示如何分析定点状态空间系统以检测限制周期。

该示例侧重于检测由于溢出输入的大规模限制循环,并突出显示足以防止这种振荡的条件。

参考:

[1] Richard A. Roberts和Clifford T. Mullis,“数字信号处理”,Addison-Wesley, Reading,马萨诸塞州,1987,ISBN 0-201-16350-0,章节9.3。

[2] S. K.Mitra,“数字信号处理:基于计算机的方法”,McGraw-Hill,New York,1998,ISBN 0-07-042953-7。

选择系统的状态空间表示。

通过观察状态转移矩阵A的特征值小于1,我们观察到系统是稳定的。

原始格式=获取(0,“格式”);格式A = [0 1;-.5 1];b = [0;1];c = [1 0];d = 0;EIG(a)
Ans = 0.5000 + 0.5000i

过滤器实现

类型(完整文件(matlabroot,'工具箱',“固定点”,“菲德莫斯”,'+ fidemo','fisisostatespacefilter.m')))
函数[y, z] = fisisostatespacefilter (A, B, C, D, x, z) % fisisostatespacefilter单,对于statespace过滤器% [y, Zf] = fisisostatespacefilter (A, B, C, D, x, Zi)过滤数据x %的初始条件子矩阵定义的状态滤波器%,B, C, D .输出y和最终条件Zf返回。% Copyright 2004-2011 The MathWorks, Inc. y = x;z(: 2:长度(x) + 1) = 0;for k=1:length(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];y1=[-1-1-1];图(x1,y1,“c”)轴([-1.51.5-1.51.5]);轴正方形;网格;抓住%绘制了广场的投影图(p(1,:),p(2,:),“r”)r = 2 * rand(2,1000)-1;pr = a * r;绘图(pr(1,:),pr(2,:),'.')

随时间的随机初始状态

使用随机初始状态驱动过滤器,将其标准化为单位平方内,输入为零,然后运行过滤器。

请注意,一些状态在单位广场之外徘徊,并且它们最终在原点上卷向零状态,z = [0; 0]。

x=零(10,1);zi=[0;0];q=量化器([16,15]);对于K =1:20 y = x;子(:)= randquant (q,大小(A, 1), 1);(y, zf) = fidemo.fisisostatespacefilter (A, B, C, D, x, zi);情节(zf (1:), zf (2:),'走-','Markersize',8);结尾标题('双精度状态序列绘图');xlabel('z1'); 伊拉贝尔(‘z2’)

状态轨迹

因为特征值幅度小于一个,所以系统稳定,并且所有初始状态均向零输入的原点向下。然而,特征值没有讲述整个故事关于国家的轨迹,如在这个例子中,在他们开始合同之前,各国首先投射。

A的奇异值可以更好地指示整个状态轨迹。最大奇异值约为1.46,这表明与相应奇异向量对齐的状态将从原点投射出去。

高级副总裁(A)
ans = 1.4604 0.3424

定点过滤器创建

创建一个固定点过滤器并检查限制周期。

滤波器的MATLAB®代码保持不变。它成为一个定点滤波器,因为我们用定点输入驱动它。

为了说明溢出振荡,我们选择将溢出的乘积和求和数据类型。

rng (“默认”);f = fimath('溢出',“包装”,...'ProductMode',“指定精度”,...'profectwordlength'16,'ProductFractionLength',15,...“SumMode”,“指定精度”,...“SumWordLength”16,“SumFractionLength”15);a = fi(a,'fimath'B = F (B, F)'fimath',f)c = fi(c,'fimath',F)D=fi(D,'fimath',F)
A=0 1.0000-0.5000 1.0000数据类型模式:定点:二进制点缩放符号:有符号字长:16分形长度:14舍入方法:最近溢出操作:换行ProductMode:SpecifyPrecision ProductWordLength:16 ProductFractionLength:15 SumMode:SpecifyPrecision SumWordLength:16 SumFractionLength:15 CastBeforeSum:true B=0 1 DataTypeMode:Fixed point:binary point scaling Signedness:Signed WordLength:16 FractionLength:14 Rounding方法:最近溢出操作:Wrap ProductMode:SpecifyPrecision ProductWordLength:16 ProductFractionLength:15 SumMode:SpecifyPrecision SumWordLength:15 CastBeforeSum:true C=1 0 DataTypeMode:Fixed point:binary点缩放符号:有符号字长:16 FractionLength:14 Rounding方法:最近溢出操作:Wrap ProductMode:SpecifyPrecision ProductWordLength:16 ProductFractionLength:15 SumMode:SpecifyPrecision SumWordLength:16 SumFractionLength:15 CastBeforeSum:true D=0 DataTypeMode:定点:二进制点缩放符号:有符号WordLength:16 FractionLength:15取整方法:最近溢出操作:包装ProductMode:SpecifyPrecision ProductWordLength:16 ProductFractionLength:15 SumMode:SpecifyPrecision 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 -1],“c”)轴([-1.51.5-1.51.5]);轴正方形;网格;抓住绘图(pr(1,:),pr(2,:),'.')

执行定点过滤器。

这段代码与前面代码的唯一区别在于,我们使用定点数据类型来驱动它。

x=fi(零(10,1),1,16,15,'fimath',F);zi = fi([0; 0],1,16,15,'fimath',F);q=分配量化器(zi);e=双(eps(zi));rng(“默认”);对于K =1:20 y = x;子(:)= randquant (q,大小(A, 1), 1);(y, zf) = fidemo.fisisostatespacefilter (A, B, C, D, x, zi);如果abs(双(zf(端)))>0.5,c='ro-';别的,c='走-';结尾图(zf(1,:),zf(2,:),c,'Markersize',8);结尾标题('固定点状态序列绘图');xlabel('z1'); 伊拉贝尔(‘z2’)

对其他随机选择的初始状态尝试这种方法可以说明,一旦一个状态进入其中一个三角形区域,它就会被投射到另一个三角形区域中,来回地投射,并且永远不会逃脱。

防止溢出极限环的充分条件

有两个充足的条件来防止系统中的溢出限制周期:

  • 系统稳定,即abs(eig(A))<1,

  • 矩阵A是正常的i.E.,'* 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 -1],“c”)轴([-1.51.5-1.51.5]);轴正方形;网格;抓住绘图(pr(1,:),pr(2,:),'.')

绘制状态序列

再次为相同的初始状态绘制状态序列,我们看到输出现在螺旋向原点。

x=fi(零(10,1),1,16,15,'fimath',F);zi = fi([0; 0],1,16,15,'fimath',F);q=分配量化器(zi);e=双(eps(zi));rng(“默认”);对于K =1:20 y = x;子(:)= randquant (q,大小(A, 1), 1);[y,zf] = fidemo.fisisostatespacefilter(a2,b2,c2,d2,x,zi);如果abs(双(zf(端)))>0.5,c='ro-';别的,c='走-';结尾图(zf(1,:),zf(2,:),c,'Markersize',8);结尾标题('正常形式的固定点状态序列绘图');xlabel('z1'); 伊拉贝尔(‘z2’)

对其他随机选择的初始状态尝试此操作表明,没有任何区域的过滤器无法恢复。

设置(0,“格式”,原始格式);%#好的<*NASGU,*NOPTS>