当信号变为周期时找到策略点

时间:2017-05-27 19:38:36

标签: matlab signal-processing

我试图在信号变为周期性并达到稳定状态后找到Meanthree周期。我有一个信号在开始时不是周期性的,但在一段时间后它变成了周期性的。我想找到下一个Mean个周期的three,每个周期都有five个点。

现在我通过打开绘图并找到信号变为周期性的点然后我将该点输入MATLAB,然后我得到了结果。该计划工作正常,但我有一个大问题。我有500,000个数据记录,无法打开每个数据记录并找到信号成为周期性的起始点。有没有什么方法可以在不打开情节的情况下找到起点,因为每个情况都有不同的起始点,信号变成周期性的?

我现在使用下面的代码

close all,clear variables,clear all;
clc;
prompt = 'Enter Strating Point?';    
N= input(prompt);
Result=mean(mean(1,N:N+4)+mean(1,N+5:N+9)+mean(1,N+10:N+14));

enter image description here

我附上数据样本,第一列是信号,第二列是时间。

https://www.dropbox.com/sh/27lebrp1lwnmm3l/AABIhN1tzUSJQjjED954Yvyka?dl=0

enter image description here

谢谢!

1 个答案:

答案 0 :(得分:2)

完整编辑:

%inputs: time and y (the response), both same length vectors
ppc = 5; % points per cycle
A = zeros(ppc,1);
for i = 1:ppc
    A(i) = mean(y(i:ppc:length(y))); 
end
[~,b] = min(A);

possidx = (length(time)+b-ppc):-ppc:b; %idx of lowest points
lowlist = fliplr(y(possidx));% lowest points
for i = 2:length(lowlist) %start from behind
    se = std(lowlist(1:i))/sqrt(i); %calculate SE for all current points
    if se > 0.05 %depending on your filed you might wanna change it to a lower value
        periodstart = time(possidx(i-1)); %lowest point of first period
        break
    end 
end

它的作用:第一个循环找到哪一组总是在底部。因此,如果每个周期有10个点,则将ppc调整为10。如果您有很多循环,每个循环的点数不必完全相同,它应该仍然相当准确。

然后我们从后面逐一添加这些最低点并计算标准误差。一旦它大于0.05,我们就不在期间。

我觉得可以自由地使用标准错误,因为这是我所知道的,在这种情况下是有意义的。我将阈值设置为0.05,因为它是许多领域的标准,如果你的领域不同,可以改变它。