[医]异相
确定滤波器是否为最小相位。
库::`工程师`
争论
输入参数
# *b,a*是 传递函数的系数
+
向量资料
Details
传递函数的系数,设为向量。 价值 b 和 a 它们分别表示分子和分母中多项式的系数。
| 数据类型 |
|
# *B,A*是 级联传递函数的系数
+
标量,标量 | 向量资料 | 矩阵
Details
级联传递函数的系数,指定为标量、矢量或矩阵。 在矩阵中 B 和 A 分别列出了级联传递函数的分子和分母的系数。
矩阵 B 必须有一个大小 上 ,和矩阵 A — 上 ,在哪里
-
-过滤器部分数;
-
-过滤器的分子的顺序;
-
-过滤器分母的顺序。
有关级联传递函数格式和系数矩阵的详细信息,请参阅以CTF格式设置数字滤波器。
如果矩阵的任何元素 A[:,1] 如果不等于一,则函数 isminphase 通过归一化滤波器系数 A[:,1]. 在这种情况下 A[:,1] 它必须是非零。
|
| 数据类型 |
|
# sos — 二阶段的表示
+
矩阵
Details
二阶段的表示,定义为大小矩阵 ,在哪里 -二阶段的数量。 矩阵
它表示二阶函数的部分
| 数据类型 |
|
例子:
最小相位滤波器
Details
让我们设计一个使用二阶段的六阶巴特沃斯低通IIR滤波器。 设置归一化截止频率 0.15. 我们来判断滤波器是否为minimum-phase。
import EngeeDSP.Functions: butter, zp2sos, isminphase
z,p,k = butter(6,0.15, out=3)
SOS = zp2sos(z,p,k)
min_flag = isminphase(SOS)
true
plt = plot(aspect_ratio=:equal, xlims=(-1.1, 1.1), ylims=(-1.1, 1.1),
title="Zero-Pole Plot", xlabel="Real", ylabel="Imag")
theta = range(0, 2π, length=100)
plot!(cos.(theta), sin.(theta), color=:black, linestyle=:dash, label="Unit Circle")
scatter!(real(z), imag(z), marker=:circle, color=:blue, label="Zeros", markersize=8)
scatter!(real(p), imag(p), marker=:x, color=:red, label="Poles", markersize=8)

让我们用一组分子和单精度分母的系数创建一个滤波器。 让我们检查它是否是在不同容差值下的最小相位滤波器。
b = Float32.([1 1.00001])
a = Float32.([1 0.45])
min_flag1 = isminphase(b,a)
false
min_flag2 = isminphase(b,a,1e-3)
true
此外
以CTF格式设置数字滤波器
Details
过滤器的影响
形式设置系数时
假设滤波器被设置为
哪里
*如果
*如果
*如果
效应和放大
如果有一个共同的尺度增益或几个尺度增益因子在滤波器系数的值之外,则可以将系数和增益指定为元组。 (B,A,g). 在使用定点算术时,缩放滤波器部分尤其重要,以确保每个滤波器部分的输出信号具有相似的幅度水平,这有助于避免由于计算精度有限而导致滤波器频率响应的不准确性。
增益可以是标量总增益或区段增益系数的向量。
*如果增益是标量的,则其值均匀地应用于级联滤波器的所有部分。
*如果增益是一个矢量,它必须包含一个元素比滤波器部分的数量多。
如果将滤波器系数矩阵和增益系数向量指定为
假设滤波器系统的传递函数具有形式