2013-07-24 207 views
7

我想將Matlab代碼轉換爲Python。我想在Python中實現Matlab的fdesign.lowpass()。什麼會使用scipy.signal.firwin()是這個Matlab代碼的確切替代:Python中的低通濾波器

demod_1_a = mod_noisy * 2.*cos(2*pi*Fc*t+phi); 
d = fdesign.lowpass('N,Fc', 10, 40, 1600); 
Hd = design(d); 
y = filter(Hd, demod_1_a); 

回答

5

一個非常基本的方法是調用

# spell out the args that were passed to the Matlab function 
N = 10 
Fc = 40 
Fs = 1600 
# provide them to firwin 
h = scipy.signal.firwin(numtaps=N, cutoff=40, nyq=Fs/2) 
# 'x' is the time-series data you are filtering 
y = scipy.signal.lfilter(h, 1.0, x) 

這應該產生一個過濾器類似到最終成爲了一個在Matlab代碼中製作。 如果您的目標是獲得功能相同的結果,則應提供有用的 過濾器。然而,如果你的目標是python代碼提供完全相同的結果,那麼你將不得不在design調用(在Matlab中)下面看看;如果你的目標是python代碼提供完全相同的結果,那麼你將不得不在design調用(在Matlab中)。從我的快速檢查中,通過Matlab調用來分析它確切地做了什麼,即使用什麼設計方法等等,以及如何將它映射到相應的scipy調用中並不是微不足道的。如果您真的需要兼容性,並且您只需要爲有限數量的 過濾器執行此操作,那麼您可以親自查看Hd.Numerator字段 - 此數字數組直接對應於上述python代碼中的h變量。因此,如果您手動將這些 數字複製到數組中,您將獲得數值上相同的結果。