如何在python中为RC电路创建传递函数

时间:2015-06-08 01:58:43

标签: python function filter transfer rc

我对编程很新,但是这个问题也发生在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)

1 个答案:

答案 0 :(得分:1)

这是一个经典的例子,为什么你应该避免pylab以及更常见的表格导入

 from module import *

除非你确切地知道它的作用,因为它无可救药地混淆了名称空间。

使用,

import matplotlib.pyplot as plt
import numpy as np

然后调用np.logplt.plot等将解决您的问题。

Furether解释

这里发生的是,

from pylab import *

定义log numpy函数,它对数组(你想要的数组)进行操作。

然而,后来导入,

from cmath import *

用一个只接受标量的版本覆盖它,因此你的错误。