You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 07:04:57