【问题标题】:Transform filter function to Python code将过滤器函数转换为 Python 代码
【发布时间】:2012-07-14 04:24:57
【问题描述】:

我正在尝试了解如何将过滤器(在本例中为 Notch(阻带)过滤器)转换为 Python,但我不知道如何。

x(n)=-2*x(n)/(-0.9*x(n) -0.9*x(n-1))

谁能帮帮我?

提前致谢。

【问题讨论】:

    标签: python filter signal-processing


    【解决方案1】:

    如果您使用的是 numpy 数组,这应该可以:

    x[1:]=-2*x[1:]/(-0.9*x[1:]-0.9*x[:-1])
    

    这会更改您的数组,但您可以轻松地将其分配给一个新数组。

    y=-2*x[1:]/(-0.9*x[1:]-0.9*x[:-1])
    

    请注意,您的算法对第 0 个元素的定义并不十分明确,因此我的翻译使 x[0] 保持不变。

    编辑

    将可迭代对象更改为 numpy 数组:

    import numpy as np
    x=np.array(iterable)  #pretty easy :) although there could be more efficient ways depending on where "iterable" comes from.
    

    【讨论】:

    • 不错的答案,您应该添加他需要导入的内容。同样对于操作,如果您使用的是 Windows,则必须 dl numpy:scipy.github.com/content.html
    • @pyInTheSky -- 你不需要为这段代码导入任何东西......(当然,首先需要在某个地方导入 numpy 才能获得一个 numpy 数组,但是它不需要在这里),但我想这是一个合理的想法......
    • OP 对 python 来说似乎是新的,所以支持你添加编辑。我发现当你得到一个可以按原样执行的答案时总是很好。
    【解决方案2】:
    result = []
    #prime your result, that is, add the initial values to handle indexing
    lower_bound = #
    upper_bound = #
    for n in range(lower_bound,upper_bound):
        result.append( 2*result[n]/(-0.9*result[n] -0.9*result[n-1]) )
    

    【讨论】:

    • 这应该引发 IndexError 因为result[lower_bound] 还不存在。而且,如果 result 开始时不是一个空列表,那么您将附加到 result 而不是更改其中的值。
    • 对于这种操作,最好使用 numpy 数组来加快 for 循环,如 mgilson 的回答。
    • 是的,我将使用 numpy 数组。
    猜你喜欢
    • 2021-03-15
    • 1970-01-01
    • 1970-01-01
    • 2015-09-05
    • 1970-01-01
    • 2016-08-10
    • 2018-11-05
    • 2020-02-21
    • 1970-01-01
    相关资源
    最近更新 更多