Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/356.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用python求解freqz格式外的传递函数_Python_Signal Processing - Fatal编程技术网

用python求解freqz格式外的传递函数

用python求解freqz格式外的传递函数,python,signal-processing,Python,Signal Processing,我无法将函数转换为scipy FREKZ形式,因此我尝试直接用python进行求解,但无法将复数转换为浮点变量。错误的实现 T = 1/(0.0001) w_0 = m.pi/2 w = np.arange(-.005, .005, T) j= 1j h_num = 1-m.exp(j*w_0)-m.exp(-j*w_0)-2*m.exp(-j*w)+m.exp(-2*j*w) h_den = 1-(0.9)*m.exp(j*w_0)-(0.9)*m.exp(-j*w_0)-(1.8)*m.ex

我无法将函数转换为scipy FREKZ形式,因此我尝试直接用python进行求解,但无法将复数转换为浮点变量。错误的实现

T = 1/(0.0001)
w_0 = m.pi/2
w = np.arange(-.005, .005, T)
j= 1j
h_num = 1-m.exp(j*w_0)-m.exp(-j*w_0)-2*m.exp(-j*w)+m.exp(-2*j*w)
h_den = 1-(0.9)*m.exp(j*w_0)-(0.9)*m.exp(-j*w_0)-(1.8)*m.exp(-j*w)+(0.81)*m.exp(-2*j*w)
mag = abs(h_num/h_den)
phase = np.angle(h_num)-np.angle(h_den)
给出以下错误:


您可能正在使用
数学
模块中的函数,如

这些函数不能用于复数;如果需要支持复数,请使用cmath模块中相同名称的函数

因此,正如建议的那样,您可以使用。这将解决在计算
exp(j*w0)
时出现的当前错误

不幸的是,对于您发布的代码,您将在尝试计算数量
exp(j*w)
时遇到另一个错误,因为
cmath.exp
不支持数组参数(顺便说一句,
math.exp
)。要解决第二个错误,您可以创建一个数组,并对每个数组元素计算指数,每次一个循环。 但是,由于您已经在使用
numpy
,因此只使用它会简单得多

同时调整
T
w
计算以跨越整个频谱,您应该得到以下结果:

T = 0.0001
w_0 = np.pi/2
w = np.arange(-np.pi, np.pi, T)
j= 1j
h_num = 1-np.exp(j*w_0)-np.exp(-j*w_0)-2*np.exp(-j*w)+np.exp(-2*j*w)
h_den = 1-(0.9)*np.exp(j*w_0)-(0.9)*np.exp(-j*w_0)-(1.8)*np.exp(-j*w)+(0.81)*np.exp(-2*j*w)
mag = abs(h_num/h_den)
phase = np.angle(h_num)-np.angle(h_den)
作为旁注,使用
scipy.freqz
进行的相应计算如下所示:

b = [1-np.exp(j*w_0)-np.exp(-j*w_0), -2, 1]
a = [1-0.9*np.exp(j*w_0)-0.9*np.exp(-j*w_0), -1.8, 0.81]
w, h = freqz(b, a, whole=True)
mag = abs(h)
phase = np.angle(h)

您可能正在使用
数学
模块中的函数,如

这些函数不能用于复数;如果需要支持复数,请使用cmath模块中相同名称的函数

因此,正如建议的那样,您可以使用。这将解决在计算
exp(j*w0)
时出现的当前错误

不幸的是,对于您发布的代码,您将在尝试计算数量
exp(j*w)
时遇到另一个错误,因为
cmath.exp
不支持数组参数(顺便说一句,
math.exp
)。要解决第二个错误,您可以创建一个数组,并对每个数组元素计算指数,每次一个循环。 但是,由于您已经在使用
numpy
,因此只使用它会简单得多

同时调整
T
w
计算以跨越整个频谱,您应该得到以下结果:

T = 0.0001
w_0 = np.pi/2
w = np.arange(-np.pi, np.pi, T)
j= 1j
h_num = 1-np.exp(j*w_0)-np.exp(-j*w_0)-2*np.exp(-j*w)+np.exp(-2*j*w)
h_den = 1-(0.9)*np.exp(j*w_0)-(0.9)*np.exp(-j*w_0)-(1.8)*np.exp(-j*w)+(0.81)*np.exp(-2*j*w)
mag = abs(h_num/h_den)
phase = np.angle(h_num)-np.angle(h_den)
作为旁注,使用
scipy.freqz
进行的相应计算如下所示:

b = [1-np.exp(j*w_0)-np.exp(-j*w_0), -2, 1]
a = [1-0.9*np.exp(j*w_0)-0.9*np.exp(-j*w_0), -1.8, 0.81]
w, h = freqz(b, a, whole=True)
mag = abs(h)
phase = np.angle(h)