如何确定离散信号是否是周期性的?

信息处理 频率 信号分析
2021-12-24 06:37:12

我想知道如何确定一系列数据是否是周期性的。

我想使用傅立叶变换/级数。我的数据看起来不是周期性的

[111100001111000110010101010000101]

或定期

[11001100110011001100]

我需要自动决定它是哪个。我可以执行哪些类型的分析或计算来确定信号是否是周期性的?

2个回答

我会做一个归一化的自相关来确定周期性。如果它是周期个样本处看到峰值。“1”的归一化结果意味着完美的周期性,“0”意味着在该周期根本没有周期性,介于两者之间的值意味着不完美的周期性。在进行自相关之前从数据序列中减去数据序列的平均值,因为它会使结果产生偏差。PP

由于重叠样本较少,峰值将趋向于远离中心越远而减小。您可以通过将结果乘以重叠样本百分比的倒数来减轻这种影响。

U(n)=A(n)N|Nn|
其中是无偏自相关,是归一化自相关,是偏移量,是您正在检查周期性的数据序列中的样本数。U(n)A(n)nN

编辑:这是如何判断序列是否是周期性的示例。下面是matlab代码。

s1 = [1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 1 1 0 0 1 0 1 0 1 0 1 0 0 0 0 1 0 1];
s1n = s1 - mean(s1);
plot(xcorr(s1n, 'unbiased'))

xcorr 函数的“无偏”参数告诉它执行上面等式中描述的缩放。但是,自相关并未归一化,这就是为什么中心的峰值在 0.25 而不是 1 左右的原因。不过,这并不重要,只要我们记住中心峰值是完全相关的。我们看到除了最外边缘没有其他对应的峰。那些无关紧要,因为只有一个样本重叠,所以这没有意义。

非周期性

s2 = [1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 0];
s2n = s2 - mean(s2);
plot(xcorr(s2n, 'unbiased'))

在这里,我们看到序列是周期性的,因为存在多个与中心峰值具有相同幅度的无偏自相关峰值。

定期

吉姆的回答让我思考如何在统计上对此进行测试。这使我想到了Durbin-Watson 自相关检验

它的概括是形成:

DW(τ)=n=τN1[U(n)U(nτ)]2n=0N1U(n)2

我在 scilab 中实现这一点的尝试是:

// http://en.wikipedia.org/wiki/Durbin%E2%80%93Watson_statistic
s1 = [1 1 1 1 0 0 0 0 1 1 1 1 0 0 0 1 1 0 0 1 0 1 0 1 0 1 0 0 0 0 1 0 1];
s1n = s1 - mean(s1);
xs1 = xcorr(s1n,"unbiased");
N1 = length(xs1);

s2 = [1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 0 1 1 0 0];
s2n = s2 - mean(s2);
xs2 = xcorr(s2n,"unbiased");
N2 = length(xs2);

dwstat1 = [];
dwstat2 = [];

for lag = 1:15,

    dxs1 = xs1((lag+1):N1) - xs1(1:(N1-lag));
    dxs2 = xs2((lag+1):N2) - xs2(1:(N2-lag));


    dwstat1 = [dwstat1 sum(dxs1.^2) / sum(xs1.^2)];
    dwstat2 = [dwstat2 sum(dxs2.^2) / sum(xs2.^2)];

end;

结果是,如果DW(τ)对于给定的值,接近于零或接近于 4τ,那么那里就有一个周期性(自相关)。

如果我为我们的两个示例序列绘制结果:

在此处输入图像描述

然后很明显,第二个序列在滞后 4、8 等处表现出相关性,在滞后 2、6 等处表现出反相关。

我仍然不确定是怎么说DW(τ)是“接近” 0 或 4。我会进一步挖掘,看看我想出了什么。