我对编程相当陌生,但这个问题在 python 和 excel 中也发生。
我使用以下公式来计算 RC 传递函数
s/(s+1) for High Pass
1/(s+1) for Low Pass
with 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)
这是一个典型的例子,为什么你应该避免 pylab
以及更常见的表单导入
from module import *
除非你确切地知道它的作用,因为它使 namespace 变得困惑。
使用,
import matplotlib.pyplot as plt
import numpy as np
然后调用np.log
和plt.plot
等将解决您的问题。
<小时/>
进一步解释
这里发生的事情是这样的,
from pylab import *
从 numpy
定义一个对数组(您想要的)进行操作的 log
函数。
但是,后来的导入,
from cmath import *
用只接受标量的版本覆盖它,因此出现错误。
我是一名优秀的程序员,十分优秀!