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。