AnyMath 文档

tf2sos

将数字传递函数滤波器的参数转换成二阶段。

库::`工程师`

语法

函数调用

* [参数:sos],[参数:g]=tf2sos(<参数:ba>>) -找到二阶段的矩阵 [参数:sos] 具有增益因子 [参数:g],相当于由传递函数的系数的向量表示的数字滤波器 ba.

* [参数:sos],[参数:g]=tf2sos(<参数:ba>>,<参数:顺序>>) -设置参数中行的顺序 [参数:sos].

* sos,g=tf2sos(b,a,order,scale) -设置增益系数的缩放和所有二阶部分的分子。

* [参数:sos]=tf2sos(___,[参数:gain_out]) -将系统的整体增益集成到第一部分。

争论

输入参数

# *b,a*是 传递函数的系数

+ 向量资料

Details

传递函数的系数,设为向量。 传递函数的表达式为 ba 它写成如下:

数据类型

漂浮64</无翻译>

# *订单* — 行的顺序

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

Details

使用以下方法之一设置行顺序:

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

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

数据类型

字符串</无翻译>

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

+ "没有" (默认情况下)| "inf" | "二"

Details

增益系数和分子的缩放,使用以下方法之一设置:

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

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

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

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

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

字符串</无翻译>

# *gain_out* — 输出变量数

+ 错误 (默认情况下)| 真的

Details

输出变量的个数,设置为:

* 错误 -函数返回单个变量 [参数:sos];

* 真的 -函数返回两个变量的元组 ([参数:sos],[参数:g]).

数据类型

布尔</无翻译>

输出参数

# *sos* — 二阶段的表示

+ 矩阵

Details

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

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

# *g*是 系统的总增益

+ 标量,标量

Details

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

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

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

例子:

质量弹簧系统

Details

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

tf2sos

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

Fs = 5
dt = 1 / Fs
N = 50
t = dt &ast; (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&ast;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)

tf2sos 1

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

import EngeeDSP.Functions: tf2sos, sosfilt

sos = tf2sos(bf, af)
yt = sosfilt(sos, u)
plot(t, yt, seriestype = :stem, marker = :circle, legend = false)

tf2sos 2

算法

功能 *tf2sos* 使用四步算法确定具有输入传递函数的系统的二阶部分的表示:

  1. 它找到由参数指定的系统的极点和零点 ba.

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

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

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

    3. 继续,直到所有极点和零点都匹配。

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

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

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

    哪里 它可以是无限的,也可以是 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.). 繝シ繝ォ縺ァ縺呐