我想得到多级CIC滤波器的频率响应。在import numpy as np
from matplotlib import pyplot as plt
from control.matlab import *
def main():
mm=256
nn=5
dt=True
omega_range=np.linspace(0.00,np.pi,100000)
syscic=tf([1,],[1,],dt)
num=np.zeros(mm+1);num[0]=1;num[-1]=-1
den=np.zeros(mm+1);den[0]=1;den[1]=-1
# print(den)
for n in range(nn):
syscic=syscic*tf(num,den,dt)/mm
bode(syscic, omega_range,dB=True, deg=True)
plt.show()
if __name__=="__main__":
main()
在非常低的频率下可以看到意想不到的响应。
(直流时应为0dB)
如果nn小于3,我得到正确的结果。在
我想这是数值错误,因为num和den接近于零。在
另一方面,Scilab计算正确,即使有10个阶段。在
有没有使用python控件库的解决方案?在
我的环境是:
Windows 10,Python 3.6.1::Anaconda 4.4.0(64位),
控制(0.7.0)由pip安装,无slycot。在