为何scipy.signal.cont2discrete返回的分子系数数组是二维的?
关于Scipy中cont2discrete与lfilter参数约定差异的疑问
问题背景
我正在使用Scipy信号处理库中的cont2discrete函数将连续时间动态系统转换为离散时间,代码如下:
import scipy.signal import numpy as np dt = 0.1 num, den, dt = scipy.signal.cont2discrete(([1], [5, 1]), dt) print(num, den)
输出结果为:
[[0. 0.01980133]] [ 1. -0.98019867]
之后我想使用lfilter进行仿真,但lfilter要求输入的分子/分母系数向量为一维序列,因此需要写成:
u = np.ones(50) y = scipy.signal.lfilter(num[0], den, u)
想了解为何cont2discrete与lfilter的num、den参数约定不同?
原因解析
两者参数格式的差异源于设计目标和适用场景的不同:
cont2discrete的设计考虑了多输入多输出(MIMO)系统的通用性:这类系统的分子系数本质是矩阵结构(行数对应输出通道数,列数对应输入相关的延迟项数)。即便是单输入单输出(SISO)系统,它也会返回二维数组格式,保证API在MIMO场景下的一致性,避免用户切换系统类型时还要调整代码格式。lfilter则专注于单输入单输出(SISO)的线性滤波仿真:它不需要处理多输出场景,因此直接要求一维系数序列即可,这样的设计让单通道信号处理的调用更简洁,符合常规使用习惯。
简单来说,cont2discrete用二维数组兼容所有系统类型,lfilter用一维数组适配单通道信号处理的简化需求。
内容的提问来源于stack exchange,提问作者Bill
相关产品推荐
相关产品推荐

