2012-04-25 10 views
0

 For this type of data I want to do an interpolation like fit from one maxima to a minima and so on, so I can look for superimposed high frequencies有沒有辦法在矩陣中多次進行線性最佳擬合,以便消除一系列MatLab?

我有值,如矩陣:

a=[ 3 7 10 3 1 5 10 5 3 2 4 8 10 7 4 3 4 2 1 4 5 7 10 8 7 6 6 4 3 2]; 

現在我想選擇相對最大值和最小值,從而

a=[ 3 0 10 0 1 0 10 0 0 2 0 0 10 0 0 0 0 0 1 0 0 0 10 0 0 0 0 0 0 2]; 

我基本上是要適應從(1)到(3),然後從(3)到(5)等直線,然後從數據中減去擬合。

我知道有一個函數「detrend」,它使用斷點方法,它表示爲「bp」,這是我發現的最接近我的目標的東西。

如果你知道MatLab可以做到這一點的方式,我將非常感激它,否則似乎我必須編寫一個m文件來做到這一點。

+1

你想做一個*分段插值*?可能是*分段線性插值*? – 2012-04-25 19:46:23

+0

沒錯,就是這樣。但是我現在很難做到這一點,或者找一個人去做。 – Abid 2012-04-25 19:50:31

+0

['interp1()'](http://www.mathworks.com.au/help/techdoc/ref/interp1.html)。 – 2012-04-25 19:52:48

回答

1

我覺得你的問題是要求是局部極小和時間序列局部最大值(你叫什麼「相對最小值和最大值」。)

this similar question之間的插值添加一些在局部最小值和最大值之間進行線性插值的代碼。

interp1()會做到這一點小心翼翼。輸入點或輸出點不需要均勻分佈。

>> x = sort(rand(1,10)); 
>> y = rand(1,10); 
>> plot (x,y,'r.'); 
>> xx = 0:0.01:1; 
>> yy = interp1(x,y,xx); 
>> hold on; 
>> plot (xx,yy,'b-') 

enter image description here


我以爲你真的想要做的是分解的信號轉換成基於本地時間尺度組件。 (即頻率隨時間變化的地方)。使用empirical mode decomposition。小波方法可能是一種替代方法,但EMD的輸出非常易於在視覺上進行解釋。所述FFT假定靜止(非變的)信號 -

Image


順便提及,滑動FFT不會如果應用於隨時間變化的信號的整個長度工作。

您需要應用短時傅立葉變換,即應用於數據滑動窗口的FFT,以獲得隨時間變化的頻率圖。請參閱spectrogram()函數。

>> plot (x,y) 
>> x=0:0.001:1; 
>> y = chirp(x); 
>> plot (x,y); 
>> figure; 
>> spectrogram(y); 

enter image description here

存在與時間與的短時頻率分辨率傅里葉變換限制其應用程序時的數據相比的頻率採樣的速率低的問題。對於您發佈圖片的示例數據來說,這將不太可能奏效。

+0

今天早些時候我發現了這個譜圖,並認爲它非常酷!儘管我猜想你的信號是否是非週期性的,但總的來說,這是一個驗證工具,這個答案非常有用,我期待着將它應用到我的學校工作中! – Abid 2012-04-25 20:46:00

相關問題