如何在 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 中开始新的活动?

在 Avkit 中如何使用这三行代码,以及如何将音乐静音”

如何在 JDBC 中启动事务?

如何在 Fragment 中调用 OnActivityResult 以及它是如何工作的?

如何使用 Firebase 在 Web 上托管 Flutter?它的效果如何?