我对编程很新,但是这个问题也发生在python和excel中。
我正在使用以下公式进行RC传递函数
高通s /(s + 1)
低通1 /(s + 1)
使用 s = jwRC
下面是我在python中使用的代码
from pylab import *
from numpy import *
from cmath import *
"""
Generating a transfer function for RC filters.
Importing modules for complex math and plotting.
"""
f = arange(1, 5000, 1)
w = 2.0j*pi*f
R=100
C=1E-5
hp_tf = (w*R*C)/(w*R*C+1) # High Pass Transfer function
lp_tf = 1/(w*R*C+1) # Low Pass Transfer function
plot(f, hp_tf) # plot high pass transfer function
plot(f, lp_tf, '-r') # plot low pass transfer function
xscale('log')
我无法发布图片,所以无法显示情节。但这里的问题是每个截止频率不同。它们应该在y = 0.707处交叉,但实际上它们在约0.5处交叉。
我认为我的公式或方法在某处错了,但我找不到任何人可以帮助我的错误?
此外,在相关说明中,我尝试转换为dB比例,我收到以下错误:
TypeError: only length-1 arrays can be converted to Python scalars
我正在使用以下
debl=20*log(hp_tf)
答案 0 :(得分:1)
这是一个经典的例子,为什么你应该避免pylab
以及更常见的表格导入
from module import *
除非你确切地知道它的作用,因为它无可救药地混淆了名称空间。
使用,
import matplotlib.pyplot as plt
import numpy as np
然后调用np.log
和plt.plot
等将解决您的问题。
Furether解释
这里发生的是,
from pylab import *
定义log
numpy
函数,它对数组(你想要的数组)进行操作。
然而,后来导入,
from cmath import *
用一个只接受标量的版本覆盖它,因此你的错误。