Как использовать параметры rp, rs и Wn в scipy.signal.filter_design.ellip? - PullRequest
1 голос
/ 14 февраля 2012

Я бы хотел попробовать функцию создания эллиптического фильтра от SciPy в scipy.signal.filter_design.ellip.Я знаком с функциями проектирования фильтров в Octave, но я не уверен, как это использовать:

Из документации на http://www.scipy.org/doc/api_docs/SciPy.signal.filter_design.html

ellip (N, RP, rs, Wn, btype = 'low', аналоговый = 0, выход = 'ba')

Конструкция эллиптического (Кауэра) цифрового и аналогового фильтров.

Описание:

Design an Nth order lowpass digital or analog elliptic filter and return the filter coefficients in (B,A) or (Z,P,K) form.

См. Также ellipord.

Я понимаю N (порядок), btype (низкий или высокий), аналоговый (true / false) и вывод (ba против zpk).

Что такое rp, rs и Wn и как они должны работать?

Из моего опыта работы с Octave я предполагаю, что rp и rs связаны с максимально допустимой пульсацией на проходеи остановить полосы, и что Wn является весом или контролирует частоту среза, но как эти работы не задокументированы, и я не могу найти никаких примеров.

Ответы [ 2 ]

1 голос
/ 16 февраля 2012

Я верю, что Гайр прав.Из моего опыта использования скриптов-клонов Python Matlab они работают хорошо, за исключением плохой документации.Да, Rp и Rs - максимально допустимая пульсация в полосе пропускания и полосе пропускания соответственно.Wn - это цифровая частота среза, или граничная частота.

Итак ... вот некоторый код о том, как использовать его для репликации фильтра, который математика использует в качестве примера:

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, это просто косметика.Вот что вы получаете: Elliptical Filter with AWESOME Cutoff

1 голос
/ 16 февраля 2012

Я думаю, что эта функция такая же, как Octave или MATLAB, поэтому вы можете прочитать об этом документ MATLAB.

http://www.mathworks.com/help/toolbox/signal/ref/ellip.html

...