0

我有一个信号在某些地方是周期性的,而在其他地方没有,我希望能够找到它周期性的范围(及时)。我无法在这里展示我的原始信号,但我将使用一个示例信号来说明我的问题:

示例信号:

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

我想要一些能告诉我信号在 500 到 1500 之间的 x 的周期性信号,基本上。

我尝试使用该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))))
4

2 回答 2

0

运行[~,F,T,P] = spectrogram(vect, 128, 120, 128, 1),你得到 在此处输入图像描述

通过目视检查,您会看到元素 500 和 1500 之间存在单色信号。您可以检查P具有非常低值的矩形区域,可能更好地使用10*log10(P),并使用FandT来提取间隔和频率。

于 2013-06-20T16:11:59.410 回答
0

我认为最容易开始的地方是对数据进行窗口化,然后使用这样的技术查找功率高于某个本底噪声的频率。这种分析很像季节性,但周期不同,但这不是问题。从 Cross Validated查看此链接。

于 2013-06-20T15:14:55.370 回答