尝试为我制作的信号创建一个过滤器,但似乎无法获得。每当我调用我的过滤器功能时,我都会收到关于'/'的错误。
import numpy as np
from numpy import sqrt
import matplotlib.pyplot as plt
import scipy as sp
import math
def sinyal(N,c,f,p):
y=np.zeros(N)
t=np.linspace(0,2*np.pi,N)
Nf=len(c)
for i in range(Nf):
y+=c[i]*np.sin(f[i]*t)
return y;
def filter (w,wn):
yf=1.0/sqrt(1.0+(w/wn)**(2.0*n))
return yf;
c=[2,5,10]
f=[50, 150, 300]
p=[0,0]
N=2000
w=[50,150,300]
x=np.linspace(0,2.0*math.pi,N)
y=sinyal(N,c,f,p)
yf=filter(w,200)
plt.plot(x[:100],y[:100])
plt.show()
答案 0 :(得分:1)
w
是一个列表,wn
是int
,因此w/wn
提升
TypeError: unsupported operand type(s) for /: 'list' and 'int'
您可以通过使w
成为NumPy数组来修复错误:
w = np.array([50, 150, 300])
n
。filter
被调用,但结果从未使用过。filter
是Python builtin的名称。它的
最好不要定义与内置相同名称的函数或变量,
因为它使访问内置更难,可能会令人困惑
对其他人。