主要内容

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

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

该示例着重于检测由于零输入溢出而产生的大规模极限环,并强调了足以防止此类振荡的条件。

引用:

[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 >
Baidu
map