主要内容

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

这个例子展示了如何分析一个不动点状态空间系统来检测极限环。

这个例子着重于检测由于零输入溢出而导致的大规模极限环,并强调了足以防止这种振荡的条件。

引用:

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

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

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

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

originalFormat = get (0,“格式”);格式A = [0 1;-.5 1];B = [0;1);C = [1 0];D = 0;eig (A)
Ans = 0.5000 + 0.5000i

滤波器的实现

类型(fullfile (matlabroot“工具箱”“定点”“fidemos”' + 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 -1];Y1 = [-1 -1 1 -1];情节(x1, y1,“c”)轴([-1.5 1.5 -1.5 1.5]);轴广场;网格;持有画出正方形的投影p = * (x1, y1);情节(p(1:)、p (2:)“r”r = 2*rand(2,1000)-1;公关= * r;情节(公关(1:),公关(2:)“。”

随时间的随机初始状态

以随机初始状态驱动滤波器,归一化到单元平方内,输入全部为零,运行滤波器。

注意,有些状态会游离在单位方格外,最终在原点z=[0;0]处趋于零状态。

x = 0 (10, 1);子= (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);结束标题(“双精度状态序列图”);包含(“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);一个= fi (,“fimath”B = F (B, F)“fimath”C = fi(C, F)“fimath”,F) D = fi(D,“fimath”F)
= 0 1.0000 -0.5000 1.0000 DataTypeMode:定点:二进制扩展Signedness:签了字:16 FractionLength: 14 RoundingMethod:最近OverflowAction:包装ProductMode: SpecifyPrecision ProductWordLength: 16 ProductFractionLength: 15 SumMode: SpecifyPrecision SumWordLength: 16 SumFractionLength: 15 CastBeforeSum:真正的B = 0 1 DataTypeMode:定点:二进制扩展Signedness:签了字:16 FractionLength: 14 RoundingMethod:最近OverflowAction:包装ProductMode: SpecifyPrecision ProductWordLength: 16 ProductFractionLength: 15 SumMode: SpecifyPrecision SumWordLength: 16 SumFractionLength: 15 CastBeforeSum:真正的C = 1 0 DataTypeMode:定点:二进制点缩放Signedness:签了字:16 FractionLength: 14 RoundingMethod:最近OverflowAction:包装ProductMode: SpecifyPrecision ProductWordLength: 16 ProductFractionLength: 15 SumMode: SpecifyPrecision SumWordLength: 16 SumFractionLength: 15 CastBeforeSum:真正的D = 0 DataTypeMode:定点:二进制点缩放signediness: Signed WordLength: 16 FractionLength: 15 RoundingMethod: Nearest OverflowAction: Wrap ProductMode: specificprecision ProductWordLength: 16 ProductFractionLength: 15 SumMode: specificprecision SumWordLength: 16 SumFractionLength: 15 CastBeforeSum: true

在定点绘制正方形的投影

同样,我们在单位方框中选择随机状态,并观察它们与状态转移矩阵A相乘一步后的投影位置。不同之处在于,这个时间矩阵A是定点的。

注意,之前以浮点形式向正方形外投射的三角形,现在被包裹回正方形的内部。

CLF r = 2*rand(2,1000)-1;公关= * r;地块([-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);子= fi(0, 0, 1, 16日15日“fimath”F);q = assignmentquantizer(子);e =双(eps(子));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);结束标题(“定点状态序列图”);包含(“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 * * T;B2 B = Tinv *;C2 = C * T;D2 = D;

相似变换保持特征值,使变换后的系统传递函数保持不变。然而,变换后的状态变换矩阵A2是正常的。

检查变换系统的极限环。

绘制正规形式系统的平方的投影

现在在单位平方内的随机初始状态的投影都是一致收缩的。这是状态转移矩阵A2正常的结果。这些状态也逆时针旋转90度。

CLF r = 2*rand(2,1000)-1;公关= A2 * r;地块([-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);子= fi(0, 0, 1, 16日15日“fimath”F);q = assignmentquantizer(子);e =双(eps(子));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);结束标题(“标准形式定点状态序列图”);包含(“z1”);ylabel (“z2”

对其他随机选择的初始状态进行此尝试,说明没有哪个区域是过滤器无法恢复的。

集(0,“格式”, originalFormat);% #好< * NASGU, * NOPTS >