2013-06-20 100 views
0

我有一個信號在某些地方是週期性的,而不是在其他地方,我想能夠找到週期性的時間範圍。我不能在這裏展示我原來的信號,但我會用信號爲例來說明我的問題:Matlab找到信號週期的範圍

信號爲例:

vect=[randn([1,500]) sin(x) 1:500]; 
x=linspace(0, 20*Pi, 1000) 

我想要的東西,會告訴我,信號之間的x是週期性基本上是500和1500。

我嘗試使用xcorr函數(我使用xcorr(y,'unbiased'),然後找到零滯後峯值,發現其他峯值在零滯後的某個百分比範圍內以定義週期性區域,但我無法弄清楚如何涉及的滯後回X系列

編輯:代碼我使用至今

[c, lags] = xcorr(y,'unbiased'); 
    lag_zero=find(lags==0) 
    [peaks,locs]=findpeaks(c,'MINPEAKHEIGHT',.5*c(lag_zero)); %finding peaks 
    cindex=find(((c(lag_zero)-(0.5*c(lag_zero)))<c) & (c<(c(lag_zero)+(0.5*c(lag_zero))))); 
    maxlags=lags(max(cindex)); 
    [c2,lags2]=xcov(y,y,maxlags,'unbiased'); %this is just to narrow the periodic part down 
    plot(lags2,c2); 
    period=abs(x(locs(floor((length(locs))/2)))-x(locs(floor(((length(locs))/2)-1)))) 
+2

你能分享你到目前爲止的代碼嗎? – Schorsch

+0

我加了,雖然沒有多少。 – Aria

+0

頻率是否已知? –

回答

0

我想開始將是窗口中的數據,然後使用類似的技術來this最容易的地方找到功率高於某個本底噪聲的頻率,這種分析與海洋很相似雖然具有不同的時期,但這不是問題。從交叉驗證中檢出this link

+0

我覺得我的問題更多的是我想要的週期範圍以及頻率,而不僅僅是頻率。但是,謝謝你的指導 – Aria

0

運行[~,F,T,P] = spectrogram(vect, 128, 120, 128, 1),你會得到 enter image description here

有了你看到的元素500和1500之間你有一個單色信號目視檢查。您可以檢查P以獲得非常低的矩形區域,可能更好使用10*log10(P),並使用FT來提取區間和頻率。

+0

在光譜圖中,單色區域是否始終對應信號週期的範圍? – Aria