zp2sos系列
将具有零、极点和增益的滤波器参数转换为二阶段的形式。
库::`工程师`
语法
函数调用
* [参数:sos],<参数:g>>=zp2sos(<参数:z>>,<参数:p>>,<参数:k>>,<参数:direction_flag>>,<参数:scale>>) -设置增益系数的缩放和所有二阶部分的分子。
* [参数:sos]=zp2sos(___,[参数:gain_out]) -将系统的整体增益集成到第一部分。
争论
输入参数
# *比例尺* — 增益和分子的缩放
+
"没有" (默认)| "inf" | "二"
Details
增益系数和分子的缩放,使用以下方法之一设置:
* "没有" -不应用缩放;
* "inf" -无限速率缩放;
* "二" —根据第二范数缩放。
使用带顺序的无限范数缩放 "向上" 实现中最大限度地减少溢出的机会。 使用根据具有顺序的第二范数的缩放 "向下" 最大限度地减少峰值舍入噪声。
| 按无限范数和按第二范数缩放仅适用于直接形式II的实现。 |
| 数据类型 |
|
# *零氟* — 实零排序
+
错误 (默认情况下)| 真的
Details
彼此相反的实数零的排序,作为逻辑标量给出:
* 错误 -该函数将根据它们与极点的接近程度排列这些零;
* 真的 -该功能将保持这些零在一起。 此选项导致分子的平均系数为零。
| 数据类型 |
|
例子:
基于零、极点和增益形成二阶段
Details
让我们使用函数开发一个5阶巴特沃斯低通滤波器 *黄油*,输出数据以零、极点和增益因子的形式表示。 让我们将截止频率设置为奈奎斯特频率的五分之一。 我们将结果转换为二阶部分。 可视化频率响应。
import EngeeDSP.Functions: butter, zp2sos
z, p, k = butter(5, 0.2, out = 3)
sos = zp2sos(z, p, k)
3×6 Matrix{Float64}:
0.00128258 0.00128258 0.0 1.0 -0.509525 0.0
1.0 2.0 1.0 1.0 -1.09658 0.355447
1.0 2.0 1.0 1.0 -1.36932 0.692569
import EngeeDSP.Functions: freqz
freqz(sos, out = :plot)

算法
功能 *zp2sos* 使用四步算法确定具有零、极点和增益的输入系统的二阶部分的表示:
-
它使用函数将零和极点分组为元素的复共轭对
*cplxpair*. -
通过按照以下规则匹配成对的极点和零点来形成第二部分:
-
将最接近单位圆的极点与最接近这些极点的零点匹配。
-
将最接近单位圆的极点与最接近这些极点的零点匹配。
-
继续,直到所有极点和零点都匹配。
功能
*zp2sos*将实极点分组成实极点在绝对值上彼此最接近的部分。 同样的规则适用于真正的零。 -
-
根据所述成对极与所述单位圆的接近度排列所述区段。 通常情况下
*zp2sos*用最接近单位圆的极点排列部分,这是级联中的最后一个。 您可以指定函数*zp2sos*以便它使用参数以相反的顺序对部分进行排序[参数:direction_flag]. -
功能
*zp2sos*根据参数中指定的规范缩放部分[参数:比例]. 对于任意函数 缩放定义如下:哪里
它可以是无限的,也可以是2. 这种缩放是在定点滤波器实现中尽量减少溢出或峰值舍入噪声的尝试。