AnyMath 文档

n.居民,居民

分解的Z-变换成简单的分数。

库::`工程师`

语法

函数调用

争论

输入参数

# bi,ai — 多项式的系数

+ 向量资料

Details

多项式的系数,设为向量。 向量资料 ba 离散系统多项式的系数被设置 度的升序 :



如果有几个根和 然后

# ri — 分解为简单分数的扣除

+ 列向量

Details

分解为简单分数的推导,作为向量给出。

# pi — 分解成简单分数的极点

+ 列向量

Details

分解成简单分数的极点,作为向量给出.

# — 分解的整数部分的多项式

+ 向量字符串

Details

展开的整数部分的多项式,作为向量给出。

输出参数

# ro — 分解为简单分数的扣除

+ 列向量

Details

分解为简单分数的扣除作为向量返回。

# 阿宝 — 分解成简单分数的极点

+ 列向量

Details

分解成简单分数的极点作为向量返回。

极数定义为

如果 是多重性的极点 ,该分解包括形式的项

# ko — 分解的整数部分的多项式

+ 向量字符串

Details

展开的整数部分的多项式,作为向量返回。

整部分的多项式的系数的向量 空如果 更少 ;否则:

# 博,奥 — 多项式的系数

+ 向量资料

Details

作为向量返回的多项式的系数。

例子:

分解成iir低通滤波器的简单分数

Details

让我们计算分解成对应于三阶的IIR低通滤波器的简单分数,由传递函数描述

让我们以多项式卷积的形式表达分子和分母。

import EngeeDSP.Functions: conv, residuez

b0 = 0.05634
b1 = [1, 1]
b2 = [1, -1.0166, 1]
a1 = [1, -0.683]
a2 = [1, -1.4461, 0.7957]

b = b0*conv(b1,b2)
a = conv(a1,a2)

让我们计算分解的整数部分的扣除,极点和多项式为简单的分数。

r,p,k = residuez(b,a)

print("r: ")
show(stdout, "text/plain", r)
println()
print("p: ")
show(stdout, "text/plain", p)
println()
print("k: ")
show(stdout, "text/plain", k)
r: 3×1 Matrix{ComplexF64}:
 -0.1152524739870425 - 0.018151109860882933im
 -0.1152524739870425 + 0.018151109860882933im
 0.39051343991033616 + 0.0im
p: 3×1 Matrix{ComplexF64}:
 0.7230499999999996 + 0.522397068808775im
 0.7230499999999996 - 0.522397068808775im
 0.6829999999999996 - 0.0im
k: -0.10366849193625106

让我们绘制传递函数的极点和零点,并叠加在其上找到的极点。

zeros = roots(vec(b))
poles = roots(vec(a))
θ = range(0, 2π, length=100)
unit_circle = exp.(1im * θ)

plot(real(unit_circle), imag(unit_circle),
     linecolor=:black,
     linestyle=:dash,
     label="Unit Circle",
     aspect_ratio=:equal,
     xlims=(-1.2, 1.2),
     ylims=(-1.2, 1.2))

scatter!(real(zeros), imag(zeros),
         marker=:circle,
         markersize=8,
         color=:blue,
         label="b")

scatter!(real(poles), imag(poles),
         marker=:circle,
         markersize=8,
         color=:red,
         label="a")

scatter!(real(p), imag(p),
         marker=:x,
         markersize=5,
         color=:green,
         label="poles")

residuez

我们使用 居民 再次,恢复传递函数。

bn,an = residuez(r,p,k)
print("bn: ")
show(stdout, "text/plain", bn)
println()
print("an: ")
show(stdout, "text/plain", an)
bn: 1×4 Matrix{Float64}:
 0.05634  -0.000935244  -0.000935244  0.05634
an: 1×4 Matrix{Float64}:
 1.0  -2.1291  1.78339  -0.543463

算法

功能 居民 将表示为两个多项式的比率的离散系统转换为素数分解。 它还将分解转换为简单分数回到多项式的原始系数。

从数值的角度来看,将多项式的比率分解为简单的分数是一项不正确的任务。 如果分母中的多项式接近具有多个根的多项式,那么数据中的小变化,包括舍入误差,可以导致所得极点和减法的任意大的变化。 相反,应该使用状态空间表示或具有极点和零点的表示。

功能 居民 应用标准函数 AnyMath 和方法的最简单的分数寻找 r, pkba. 她发现:

分解的整数部分的多项式 a 在帮助下 *[医]deconv (多项式除法)当 长度(b)>长度(a) − 1.

*使用电线杆 p=根(a).

*任何多个极点,根据其多重性重新排列极点。

*扣除每个简单的极点 通过乘法 并计算得到的有理函数 .

*通过求解对极点的倍数进行扣除

+

+ 为 使用操作 \. 这里 -减少的脉冲响应 , -一个矩阵,其列表示由简单根组成的一阶系统的脉冲特性,并且 -包含简单根的扣除的列。 矩阵的每一列 它表示脉冲响应。 对于每个根 多重性,多重性 矩阵 包含 表示以下每个系统的脉冲特性的列:

+

+ 向量资料 和矩阵 他们有 哪里的线条 -总根数和内部参数 ,默认等于 1,确定方程组的重新定义程度。

文学作品

  1. Oppenheim,Alan V.和Ronald W.Schafer,与John R.Buck。 实时信号处理。 第二版。 Upper Saddle River,NJ:Prentice Hall,1999。