我想在Matlab中應用butterworth濾波器。我已經設置了過濾器,如下所示:Matlab巴特沃斯濾波器returing NaN
[z,p,k] = butter(5,[30/2000,1000/2000]);
即切斷低於30赫茲和高於1000赫茲(在2000 Hz的採樣)
輸入數據是在一個較大的矩陣的列,A.
我然後將過濾器如下:
M=filter(z,p,A(:,2));
,並曾嘗試:
M=filtfilt(z,p,A(:,2));
A有1577563行。過濾器將實際值返回到約1700行左右,但在此之後,條目爲NaN。我試圖從A(:,2)
中提取出一些選項,它們在M中生成NaN,但是在它們自己的這些返回數字中,所以我假設它與A的長度有關,而不是特定的值。看起來這是過濾器功能的不穩定性,因爲NaN的開始在不同的測試中有所不同。
我試過減少順序,但得到與第二甚至第一階濾波器類似的結果。
如果有一種方法,我會愉快地上傳A(:,2)
中的數據,但我不知道如何在StackExchange中執行此操作。
我猜想,'NaN'從發生某處有一個「0/0」操作。我以前從未見過這種情況,但請問您的信號是否靜止?或者信號有多大幅度(近似)? – patrik
我正在將它應用於多個不同的數據集,併爲每個數據集獲取相同的問題。平均信號強度爲0.1-1。我注意到,通過將濾波器的階數增加到n,NaN開始的點增加到~9900。 – 218
好的,但信號不僅取值在0-1之間,對吧?所以說,它的平均接近0? – patrik