我有一個信號在某些地方是週期性的,而不是在其他地方,我想能夠找到週期性的時間範圍。我不能在這裏展示我原來的信號,但我會用信號爲例來說明我的問題: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))))
你能分享你到目前爲止的代碼嗎? – Schorsch
我加了,雖然沒有多少。 – Aria
頻率是否已知? –