AnyMath 文档

ss2sos

态空间中的数字滤波器参数变换为二阶段。

库::`工程师`

语法

函数调用

* [参数:sos],[参数:g]=ss2sos(<参数:A>>,<参数:B>>,<参数:C>>,<参数:D>>) -返回二阶段的矩阵 [参数:sos] 具有增益因子 [参数:g],相当于输入自变量表示的状态系统 [参数:A], [参数:B], [参数:C][参数:D]. 状态输入系统必须是单输出和实数。

* [参数:sos],[参数:g]=ss2sos(<参数:A>>,<参数:B>>,<参数:C>>,<参数:D>>,<参数:iu>>) -设置索引 [参数:iu],表示状态系统的哪个输入 [参数:A], [参数:B], [参数:C], [参数:D] 函数在转换过程中使用。

* [参数:sos],[参数:g]=ss2sos(<参数:A>>,<参数:B>>,<参数:C>>,<参数:D>>,<参数:顺序>>) -设置矩阵中行的顺序 [参数:sos] 使用参数 [参数:顺序].

* [参数:sos],[参数:g]=ss2sos(A,B,C,D,iu,order) -将其设置为索引 [参数:iu],线条的顺序也是如此 [参数:顺序].

* [参数:sos],[参数:g]=ss2sos(A,B,C,D,iu,order,scale) -设置所有二阶段的增益和分子系数的期望缩放。

* [参数:sos]=ss2sos(___) -整合系统的整体增益 [参数:g] 到第一区段。 您可以指定任何先前语法的输入参数的组合。

争论

输入参数

# *A*是 状态矩阵

+ 矩阵

Details

状态矩阵,定义为矩阵。 如果系统有 入口及 输出和描述 通过状态变量,然后矩阵 A 尺寸为 .

# *B*是 进入矩阵

+ 矩阵

Details

的输入矩阵,设为矩阵。 如果系统有 入口及 输出和描述 通过状态变量,然后矩阵 B 尺寸为 .

# *C*是 输出矩阵

+ 矩阵

Details

的输出矩阵,设为矩阵。 如果系统有 入口及 输出和描述 通过状态变量,然后矩阵 C 尺寸为 .

# *D*是终点- 端传输矩阵

+ 矩阵

Details

的端到端传输矩阵,定义为矩阵。 如果系统有 入口及 输出和描述 通过状态变量,然后矩阵 D 尺寸为 .

# *iu* — 索引

+ 1 (默认情况下)| 一个整数

Details

指定为整数的索引。

# *订单* — 行的顺序

+ "向上" (默认情况下)| "向下"

Details

矩阵中行的顺序 [参数:sos],通过以下方式之一设置:

* "向上" -安排部分,使矩阵的第一行 [参数:sos] 它包含了离单位圆最远的两极;

* "向下" -安排部分,使矩阵的第一行 [参数:sos] 它包含最接近单位圆的极点。

零映射到最接近它们的极点。

# *比例尺* — 增益和分子的缩放

+ "没有" (默认)| "inf" | "二"

Details

增益系数和分子的缩放,设置为以下值之一:

* "没有" -不应用缩放;

* "inf" -无限速率缩放;

* "二" —根据第二范数缩放。

使用带顺序的无限范数缩放 "向上" 实现中最大限度地减少溢出的机会。 使用根据第二范数与顺序缩放 "向下" 最大限度地减少峰值舍入噪声。

按无限范数和按第二范数缩放仅适用于直接形式II的实现。

输出参数

# *sos* — 二阶段的表示

+ 矩阵

Details

二阶段的表示,作为矩阵返回。 论点 sos —这是一个大小矩阵

其中的行包含分子和分母的系数 函数的二阶段 :

# *g*是 系统的总增益

+ 标量,标量

Details

系统的总增益,作为真正的标量返回。

如果调用函数 *ss2sos* 使用一个输出参数,该函数将系统的总增益嵌入到第一部分。 所以,

不建议在缩放直形II结构时将增益嵌入第一部分,并可能导致不稳定的缩放。 为了避免嵌入增益因子,使用 *ss2sos* 有两个输出参数: [参数:sos]g.

例子:

以二阶段形式表示滤波器

Details

让我们开发一个5阶巴特沃斯低通滤波器,通过设置截止频率为 rad/count并以状态空间的形式表示输出信号。 我们将状态空间中的结果转换为二阶段。 可视化滤波器的频率响应。

import EngeeDSP.Functions: butter, ss2sos

A, B, C, D = butter(5, 0.2, out = 4)
sos, g = ss2sos(A, B, C, D)
println("sos = ", sos)
sos = [1.0 1.0004631991200947 0.0 1.0 -0.5095254494944288 0.0; 1.0 1.9995370439927413 0.9995370439927413 1.0 -1.0965794655679613 0.35544676217239035; 1.0 1.999999756887197 0.9999999713279842 1.0 -1.3693171946832927 0.6925691353878634]
import EngeeDSP.Functions: freqz

freqz(sos, out = :plot)

ss2sos

质量弹簧系统

Details

一维离散振荡系统由单个质量块组成 ,通过具有单位弹性常数的弹簧附着在壁上 . 传感器记录加速度 频率质量 赫兹。

tf2sos

生成 50 采样周期。 让我们定义采样间隔 .

Fs = 5
dt = 1 / Fs
N = 50
t = dt &ast; (0:N-1)

振荡器可以通过状态空间的方程来描述:



哪里 -状态向量, -分别是质量的位置和速度,以及矩阵

A = [cos(dt) sin(dt); -sin(dt) cos(dt)]
B = [1 - cos(dt); sin(dt)]
C = [-1 0]
D = 1

系统由正方向的单个脉冲激励。 我们使用状态空间模型来计算系统的时间演变,从零初始状态开始。

u = [1; zeros(N-1)]

x = [0.0; 0.0]
y = zeros(N)

for k = 1:N
    y[k] = (C &ast; x)[1] + D &ast; u[k]
    global x = A &ast; x + B &ast; u[k]
end

让我们绘制质量加速度对时间的依赖性。

plot(t, y,
     seriestype = :stem,
     marker = :circle,
     legend = false)

ss2sos 1

让我们计算加速度对时间的依赖性使用传递函数来过滤输入信号。 让我们以二阶段的形式表达传递函数。 让我们绘制结果图。 结果在两种情况下是相同的。

import EngeeDSP.Functions: ss2sos, sosfilt

sos = ss2sos(A, B, C, D)
yt = sosfilt(sos[1], u)
plot(t, yt,
     seriestype = :stem,
     marker = :circle,
     legend = false)

ss2sos 2

算法

功能 *ss2sos* 使用四步算法确定输入状态空间系统的二阶部分的表示:

  1. 它找到由参数指定的系统的极点和零点 [参数:A], [参数:B], [参数:C][参数:D].

  2. 使用函数 *zp2sos系列*,其中首先使用函数将零点和极点分组为复共轭对 *cplxpair*. 然后 *zp2sos系列* 通过按照以下规则组合成对的极点和零点来形成二阶段:

    1. 将最接近单位圆的极点与最接近这些极点的零点组合。

    2. 将最接近单位圆的极点与最接近这些极点的零点组合。

    3. 继续,直到所有极点和零点合并。

    功能 *ss2sos* 将实极点分组为实极点在绝对值上最接近它们的部分。 同样的规则适用于真正的零。

  3. 根据所述成对极与所述单位圆的接近度排列所述区段。 通常情况下 *ss2sos* 用最接近单位圆的极点排列部分,这是级联中的最后一个。 您可以指定函数 *ss2sos* 以便它使用参数以相反的顺序对部分进行排序 [参数:顺序].

  4. 功能 *ss2sos* 根据参数中指定的规范缩放部分 [参数:比例]. 对于任意函数 缩放定义如下:

    哪里 它可以是无限的,也可以是 2. 有关缩放的详细信息,请参阅文学作品部分中的源代码。 该算法遵循此缩放以最小化定点滤波器实现中的溢出或峰值舍入噪声。

文学作品

  1. Jackson,L.B. _Digital Filters and Signal Processing._第3版。 波士顿:Kluwer Academic Publishers,1996。

  2. Mitra,S.K._数字信号处理:一种基于计算机的方法。_第3版。 纽约:麦格劳-希尔高等教育,2006年。

  3. Vaidyanathan,P.P."稳健的数字滤波器结构。"handbook For Digital Signal Processing(S.K.Mitra and J.F.Kaiser,eds.). 繝シ繝ォ縺ョ縺顔衍繧峨○縺ォ縺雁抚縺蜷医O縺帙¥縺縺辅>缧