如何在 scipy.signal.filter_design.ellip 中使用 rp、rs 和 Wn 参数?
Posted
技术标签:
【中文标题】如何在 scipy.signal.filter_design.ellip 中使用 rp、rs 和 Wn 参数?【英文标题】:How to use rp, rs, and Wn parameters in scipy.signal.filter_design.ellip? 【发布时间】:2012-02-14 16:44:40 【问题描述】:我想在 scipy.signal.filter_design.ellip 中试用 SciPy 的椭圆滤波器设计功能。我熟悉 Octave 中的过滤器设计功能,但不知道如何使用:
来自http://www.scipy.org/doc/api_docs/SciPy.signal.filter_design.html的文档
椭圆(N,rp,rs,Wn,btype = 'low',模拟 = 0,输出 = 'ba')
椭圆 (Cauer) 数字和模拟滤波器设计。
说明:
Design an Nth order lowpass digital or analog elliptic filter and return the filter coefficients in (B,A) or (Z,P,K) form.
另见椭圆。
我了解 N(顺序)、btype(低或高)、模拟(真/假)和输出(ba 与 zpk)。
什么是 rp、rs 和 Wn,它们应该如何工作?
根据我使用 Octave 的经验,我猜测 rp 和 rs 与通带和阻带中允许的最大纹波有关,而 Wn 是权重或控制截止频率,但它们的工作原理不是' t 记录在案,我找不到任何示例。
【问题讨论】:
【参考方案1】:我相信 HYRY 是正确的。根据我使用 Python Matlab 克隆脚本的经验,它们运行良好,但文档很差。是的,Rp 和 Rs 分别是通带和阻带中允许的最大纹波。 Wn 是数字截止频率或边沿频率。
所以...这里有一些代码说明如何使用它来复制 mathworks 用作示例的过滤器:
import pylab
import scipy
import scipy.signal
[b,a] = scipy.signal.ellip(6,3,50,300.0/500.0);
import matplotlib.pyplot as plt
import numpy as np
fig = plt.figure()
plt.title('Digital filter frequency response')
ax1 = fig.add_subplot(111)
h,w = scipy.signal.freqz(b, a)
plt.semilogy(h, np.abs(w), 'b')
plt.semilogy(h, abs(w), 'b')
plt.ylabel('Amplitude (dB)', color='b')
plt.xlabel('Frequency (rad/sample)')
plt.grid()
plt.legend()
ax2 = ax1.twinx()
angles = np.unwrap(np.angle(w))
plt.plot(h, angles, 'g')
plt.ylabel('Angle (radians)', color='g')
plt.show()
对不起,格式太蹩脚了,但它有效!您会注意到频率范围与 matlab 显示的不同,这只是装饰性的。这就是你得到的:
【讨论】:
感谢您的回答和示例!【参考方案2】:我认为这个函数和 Octave 或 MATLAB 是一样的,所以你可以阅读 MATLAB 文档。
http://www.mathworks.com/help/toolbox/signal/ref/ellip.html
【讨论】:
以上是关于如何在 scipy.signal.filter_design.ellip 中使用 rp、rs 和 Wn 参数?的主要内容,如果未能解决你的问题,请参考以下文章
如何在异步任务中调用意图?或者如何在 onPostExecute 中开始新的活动?