封装一个SyPy过滤器

通过封装两个库模块中的一些功能,我们可以清楚地看到数字滤波器的外观。 另外,通过将__init__分为两部分,可以即时重置过滤器的创建参数和内部条件。

 
""" Encapulates a scipy filter. Given type, freq and order,
    create the coefficients and internal conditions, etc."""
import scipy.signal.filter_design as fd
import scipy.signal.signaltools as st
_filterTypeDict = {'elliptic':'ellip', 'Butterworth':'butter',
                    'Chebyshev I':'cheby1', 'Chebyshev II':'cheby2',
                    'Bessel':'bessel'}
DefaultFilterType = 'Butterworth'
DefaultFilterOrder = 2
DefaultFilterFreq = 0.1 
class FilterObject(object):
    def __init__(self, channelNumber, nTaps, freq,
                 bType='lowpass', fType="butter", output='ba'):
        self.channelNumber = channelNumber
        self.InitFilter(nTaps, freq, bType, fType, output)
    def InitFilter(self, nTaps, freq, bType, fType, output):
        print "taps = %d: freq = %f" % (nTaps, freq)
        b, a = fd.iirfilter(nTaps, freq, btype=bType, ftype=fType, output=output)
        self.b, self.a = b, a
        self.ic = st.lfiltic(b, a, (0.0,))
    def Filter(self, dataArray):
        resTuple = st.lfilter(self.b, self.a, dataArray, zi=self.ic)
        self.ic = resTuple[-1]
        return resTuple[0] 
if __name__ == "__main__":
    x = (1.5, 1.4, 1.5, 1.6, 1.5, 1.4, 1.5, 1.6)
    f = FilterObject(2, .05)
    for a in range(20):
        print f.Filter(x)  
这是另一个很好的例子。

_filterTypeDict是“名称修改”的示例。 这是保持模块作用域变量为半私有的方法。

导入myModule时

模块作用域的类,函数和变量由引用

myModule.myClass(),myModule.myFunction(),myModule.myVariable。

当您使用以下命令导入模块的对象时

从myModule导入*

除_semiprivate变量外,该模块中的所有名称均置于导入模块的范围内。 他们是半私人的,因为您仍然可以

a = myModule._semiprivate(名称已导入到当前作用域中,并在其前面添加了模块名称)。

From: https://bytes.com/topic/python/insights/568075-encapsulating-sypy-filter

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值