tf2sos
将数字传递函数滤波器的参数转换成二阶段。
库::`工程师`
争论
输入参数
# *比例尺* — 增益和分子的缩放
+
"没有" (默认情况下)| "inf" | "二"
Details
增益系数和分子的缩放,使用以下方法之一设置:
* "没有" -不应用缩放;
* "inf" -无限速率缩放;
* "二" —根据第二范数缩放。
使用带顺序的无限范数缩放 "向上" 实现中最大限度地减少溢出的机会。 使用根据具有顺序的第二范数的缩放 "向下" 最大限度地减少峰值舍入噪声。
| 按无限范数和按第二范数缩放仅适用于直接形式II的实现。 |
| 数据类型 |
|
例子:
质量弹簧系统
Details
一维离散振荡系统由单个质量块组成
生成 50 采样周期。 让我们定义采样间隔
Fs = 5
dt = 1 / Fs
N = 50
t = dt * (0:N-1)
u = [1.0; zeros(N-1)]
系统的传递函数具有解析表达式:
系统由正方向的单个脉冲激励。 让我们使用传递函数计算系统的时间演变。 让我们建立一个响应图。
import EngeeDSP.Functions: filter
bf = [1.0, -(1+cos(dt)), cos(dt)]
af = [1.0, -2*cos(dt), 1.0]
yf = filter(bf, af, u)
plot(t, yf,
seriestype = :stem,
marker = :circle,
markerstrokecolor = 1,
markercolor = :white,
markersize = 5,
xlabel = "t", legend = false)

让我们使用二阶段形式的传递函数表示来计算依赖于时间的加速度,以过滤输入信号。 让我们绘制结果图。 结果在两种情况下是相同的。
import EngeeDSP.Functions: tf2sos, sosfilt
sos = tf2sos(bf, af)
yt = sosfilt(sos, u)
plot(t, yt, seriestype = :stem, marker = :circle, legend = false)

算法
功能 *tf2sos* 使用四步算法确定具有输入传递函数的系统的二阶部分的表示:
-
使用函数
*zp2sos系列*,其中首先使用函数将零点和极点分组为复共轭对*cplxpair*. 然后*zp2sos系列*根据以下规则通过匹配对极点和零点来形成二阶段:-
将最接近单位圆的极点与最接近这些极点的零点匹配。
-
将最接近单位圆的极点与最接近这些极点的零点匹配。
-
继续,直到所有极点和零点都匹配。
功能
*tf2sos*将实极点分组为实极点在绝对值上最接近它们的部分。 同样的规则适用于真正的零。 -
-
根据所述成对极与所述单位圆的接近度排列所述区段。 通常情况下
*tf2sos*用最接近单位圆的极点排列部分,这是级联中的最后一个。 您可以指定函数*tf2sos*以便它使用参数以相反的顺序对部分进行排序[参数:顺序]. -
功能
*tf2sos*根据参数中指定的规范缩放部分[参数:比例]. 对于任意函数 缩放定义如下:哪里
它可以是无限的,也可以是2. 有关缩放的详细信息,请参阅文学作品部分中的源代码。 该算法遵循此缩放以最小化定点滤波器实现中的溢出或峰值舍入噪声。