LLRFLibsPy库中design_notch_filter函数解读
source code: Github
函数 design_notch_filter
用于设计一个陷波滤波器(notch filter)并返回离散滤波器的状态空间。下面是函数的详细解释:
函数参数
fnotch
: 频率(以赫兹为单位),要被滤除的频率,即陷波(不通过)的中心频率。Q
: 陷波滤波器的质量因数,描述了滤波器中心频率的选择性。Q 值越高,滤波器的带宽越窄。fs
: 采样频率(以赫兹为单位),信号的采样频率。
函数返回值
status
: 布尔值,标记滤波器设计是否成功True
或失败False
。Ad, Bd, Cd, Dd
:numpy
矩阵,滤波器的离散状态空间表示。它们分别代表状态矩阵A
,输入矩阵B
,输出矩阵C
和直接传递矩阵D
。
函数逻辑
输入参数检查:
- 检查
fnotch
、Q
和fs
是否为正值。如果任一参数不符合要求,则返回False
以及四个None
。
- 检查
创建陷波滤波器:
- 使用
scipy.signal.iirnotch
函数创建陷波滤波器系数b
和a
。这个函数会根据给定的中心频率fnotch
和质量因数Q
生成滤波器系数。 - 使用
scipy.signal.dlti
函数将滤波器转换为离散时间线性时不变系统对象dsys
,其中dt
为1.0/fs
。 - 将
dsys
转换为状态空间表示。dsys
是dlti
类型,但通过signal.StateSpace
函数将其转换为状态空间表示,获得状态矩阵A
、输入矩阵B
、输出矩阵C
和直接传递矩阵D
。
- 使用
返回值:
- 返回
True
表明滤波器设计成功,同时返回状态矩阵Ad
、输入矩阵Bd
、输出矩阵Cd
和直接传递矩阵Dd
。
- 返回
总之,这个函数用于设计一个指定中心频率的陷波滤波器,并返回其状态空间表示以便进一步使用。
示例
下面是一个使用该函数 design_notch_filter
的示例。这个示例将设计一个陷波滤波器,并打印出滤波器的状态空间矩阵。
1 | import numpy as np |
在上述例子中,我们设计了一个陷波频率为 60 Hz(通常是电源频率噪声)、质量因数为 30、采样频率为 1000 Hz 的陷波滤波器。程序运行后将输出设计后的状态空间矩阵 Ad
、Bd
、Cd
和 Dd
。
运行后,你应该能看到类似于如下的输出:
1 | 设计成功! |
这表示你成功设计了一个离散的陷波滤波器,如有问题请确保你已经导入必要的库,例如 numpy
和 scipy.signal
。