2012-07-14 158 views
1

我想了解如何將過濾器(在此例中爲Notch(阻帶))過濾器轉換爲Python,但我不知道如何。將過濾器函數轉換爲Python代碼

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

任何人都可以幫助我嗎?

在此先感謝。

回答

3

如果您使用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. 
+0

不錯的答案,你應該增加他需要導入的內容。另外對於操作系統,如果你使用的是windows,你將不得不dl numpy:http://scipy.github.com/content.html – pyInTheSky 2012-07-14 16:38:21

+0

@pyInTheSky - 你不需要爲這段代碼導入任何東西。 ..(當然,numpy需要導入某處以獲得一個numpy數組,但它不需要在這裏),但我想這是一個合理的想法... – mgilson 2012-07-14 16:40:26

+0

OP似乎是python的新手,所以道具給你添加編輯。當你得到可以按原樣執行的答案時,我發現它總是很好。 – pyInTheSky 2012-07-14 17:01:06

0
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])) 
+0

這應該引發IndexError,因爲'result [lower_bound]'還不存在。而且,如果結果是以空列表之外的其他形式開始的,那麼您將追加到結果而不是更改其中的值。 – mgilson 2012-07-14 16:38:00

+0

對於這種操作,使用numpy數組加快for循環的速度要好得多,就像在mgilson的答案中一樣。 – Luke 2012-07-14 16:45:08

+0

是的,我將使用numpy數組。 – 2012-07-14 16:47:55