2014-02-27 15 views
0

我對記錄的信號的插值有疑問。非單調數據的插值

我有更多的這些信號,並想比較它們。所以我最初的想法是在定義的時間間隔內對它們進行映射/插值。 我之前用meshgrid()griddata()完成了此操作。 它工作正常,但我有一個2D數據的問題。

的數據看起來如下(只是其中的一小部分):

y   x 
-11,04 0,2301 
-11,04 0,2301 
-11,04 0,2301 
-11,03 0,2302 
-11,04 0,2302 
-11,04 0,2303 
-11,04 0,2303 
-11,03 0,2303 
-11,03 0,2303 
-11,03 0,2304 

有真的,因爲高採樣率的微小變化。

因此,在這種情況下,我想它映射在

xq=0,2301:0,0001:0,2304; 
using 
interp1(x,y,xq,'method') 

但數據不是單調的,我不知道如何繞過這一點。有什麼建議麼?

+0

也許這將有助於:http://stackoverflow.com/questions/21702110/interpolating-trajectory-from-unsorted-array-of-2d-points-where-order-matters/21702563#21702563 – Dan

+0

也許你只是發佈僞代碼,但要製作帶有小數點而不是逗號的'xq':'xq = 0.2301:0.0001:0.2304'。只有你的x數據需要單調,y可以是任何東西。 – chappjc

回答

0

我期待奈奎斯特採樣。在發生變化的時候找出最小的步驟,並且確定步長。

%find places where measurement changes 
ind=find(diff(x)~=0) 

%compute minimum y-step 
dy=min(diff(y(ind))) 

%create new sampling vector 
y2=0.2301:dy:0.2304 

%sample at that spacing 
x2=interp1(x,y,y2); 

就我個人而言,我不喜歡在沒有真正明確的理由的情況下扔掉數據。如果您可以爲您的項目提供更多背景資料,那麼我可以更好地驗證不同的抽樣方法。

編輯:

一旦它被清洗乾淨後,你想要做什麼?

我會使用樣條平滑。讓我們看看我能不能挖出一個。

ft = fittype('loess'); 
opts = fitoptions(ft); 
opts.Robust = 'on'; 

opts.Weights = zeros(1,0); 
opts.Span = 0.04; 

nu=10.^linspace(-5,log10(0.5)); 
nu=[nu fliplr(1-nu(1:end-1))]; 
%plot(nu) 

for i=1:length(nu) 
    opts.Span=nu(i) 
[fr, gof, myout] = fit([X, Y], temp, ft, opts); 
    n= myout.numobs; 
    rss=gof.sse; 
    k=myout.numparam; 
    AIC(i)=-2*n*log(rss/n)+2*k; 
end 

plot(AIC) 

然後我會選擇一個不是端點的局部最小值,並將其用作感興趣的跨度。這將允許我繞過離散化和一些噪音。如果你沒有得到良好的內部最小值,那麼你可能會考慮調整低端點,關閉強勁,或使用AICc而不是AIC。

AICc (i)=-2*n*log(rss/n)+2*k+(2*k*(k+1))/(n-k-1) 

然後,我可能會將結果包裝在一個函數中,並使用FPLOT來獲得良好的採樣。

然而,我被認爲是一個數字的受虐狂和一個誰使用火箭發射器來拍攝蚊子。

+0

這就是我一直在做的事情。但我自己決定(0.0001基本上是最低限度)。 問題是interp1函數不起作用。因爲數據不是單調的 設置如下。我正在測量2400 Hz的力位移曲線,因爲我需要精度。但是在很多情況下,一個時間步沒有變化,導致測量值相等。 這對你有幫助嗎? 到目前爲止,感謝您的時間和幫助:D – chkdsk

+0

哦,我錯過了這行「ind = find(diff(x)〜= 0)」需要試試這個來確認它是否解決了我的問題。我試圖使用「獨特」功能,但有一些問題 – chkdsk

+0

我終於有機會測試/實施您的建議! 它沒有解決插值,但它解決了我的問題:D 我使用ind = find(diff(x)〜= 0)和xnew = x(ind)來擺脫冗餘數據。 (我不喜歡把它扔掉,但目前看起來很好,而且我仍然保留原來的)。 平滑我使用的是savitzky golay的基礎功能(因爲我知道如何使用它們)。但我會試一試你的方法!謝謝 – chkdsk