亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

scipy.lfilter 的替代品

scipy.lfilter 的替代品

鳳凰求蠱 2024-01-12 10:41:34
有沒有辦法在 scipy 中替代 lfilter 的實現?我想使用 cusignal 庫,但目前不支持 lfilter。這是我當前想要加速的代碼:from scipy import signalimport numpy as npdata = np.random.rand(192,334)a = [1,-1.086740193996892,0.649914553946275,-0.124948974636730]b = [0.054778173164082,0.164334519492245,0.164334519492245,0.054778173164082]x[range(0, len(x)),:] = signal.lfilter(b, a, x[range(0, len(x)),:])有沒有辦法使用 numpy 的 convolve 函數或 scipy 的 fftconvolve 或 firfilter 來執行此操作?最終,我希望比當前版本更快地執行上面的代碼片段。任何想法或想法將不勝感激!
查看完整描述

1 回答

?
慕桂英3389331

TA貢獻2036條經驗 獲得超8個贊

盡管您的濾波器原則上是無限脈沖響應 (IIR) 濾波器,但該特定濾波器的脈沖響應衰減得非??臁D梢酝ㄟ^使用 lfilter 之類的函數運行脈沖來計算脈沖響應lfilter(b, a, [1] + [0]*99)。這是我得到的:

https://img1.sycdn.imooc.com/65a0a7470001e55606430395.jpg

正如您所看到的,在樣本 20 左右以上,抽頭幾乎為零。因此,您可以獲取脈沖響應的前 20 個樣本來進行精確的截斷 FIR 近似。從那里,您可以將 FIR 近似與任何 FIR 濾波函數一起應用,例如 np.convolve、scipy.signal.convolve 或 scipy.signal.fftconvolve。

另一個想法:使用任何這些過濾函數,您可以嘗試將所有參數轉換為 np.float32。它們可能會在內部切換到比 64 位浮點實現更快的 32 位浮點實現。


查看完整回答
反對 回復 2024-01-12
  • 1 回答
  • 0 關注
  • 192 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號