ある場所では周期的であり、他の場所では周期的でない信号があり、それが周期的である範囲 (時間内) を見つけたいと考えています。ここでは元の信号を示すことはできませんが、信号の例を使用して質問を説明します。
信号の例:
vect=[randn([1,500]) sin(x) 1:500];
x=linspace(0, 20*Pi, 1000)
基本的に、信号がxに対して500から1500の間で周期的であることを教えてくれるものが欲しいです。
xcorr
関数を使用してみました (ゼロ ラグ ピークを使用しxcorr(y,'unbiased')
て見つけ、ゼロ ラグの特定の % 内にある他のピークを見つけて、周期性の領域を定義しましたが、ラグを×範囲。
編集:これまでに使用しているコード
[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))))