Matlab 当信号变为周期信号时寻找起始点

Matlab 当信号变为周期信号时寻找起始点,matlab,signal-processing,Matlab,Signal Processing,我试图找到信号变得周期性并达到稳定状态后三个周期的平均值。我有一个信号,一开始不是周期性的,但过了一段时间,它变成了周期性的。我想找出下一个三个周期的平均值,每个周期有五个点 现在,我打开绘图,找到信号周期性的点,然后将该点输入MATLAB,然后得到结果。程序运行良好,但我有一个大问题。我有500000数据记录,不可能打开每个记录并找到信号周期性变化的起点。有没有办法不打开绘图就找到起点,因为每种情况都有一个不同的起点,信号会变得周期性 我现在使用下面的代码 close all,clear va

我试图找到信号变得周期性并达到稳定状态后三个周期的
平均值。我有一个信号,一开始不是周期性的,但过了一段时间,它变成了周期性的。我想找出下一个
三个
周期的
平均值
,每个周期有
五个

现在,我打开绘图,找到信号周期性的点,然后将该点输入MATLAB,然后得到结果。程序运行良好,但我有一个大问题。我有
500000
数据记录,不可能打开每个记录并找到信号周期性变化的起点。有没有办法不打开绘图就找到起点,因为每种情况都有一个不同的起点,信号会变得周期性

我现在使用下面的代码

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));

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

谢谢大家!

完全编辑:

%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,因为它在许多字段中都是标准值,如果您的字段不同,请更改它。

完全编辑:

%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,因为它在许多领域是标准的,如果在您的领域不同,请更改它。

您可以找到diff(y)>0的第一个点的索引并将其用作起点。您可以找到diff(y)>0的第一个点的索引并将其用作起点。非常感谢。我不确定这是否有效。我用一个新的情节更新了这个问题。有时,第一个周期不是第一个周期。因此,如果信号是周期性的,那么所有周期的信号的平均值和均方根值必须相同。我的意思是,如果信号是周期性的,三个周期的平均值必须是相同的。RMS也是如此。我的第二个情节解释了我的意思。而且,我的实验数据有时很嘈杂。我在寻找周期达到稳定状态时的平均值。这就是为什么我提到,在接下来的三个周期中,平均值和RMS必须相同。我明白了。这使得问题更加复杂,但也更加有趣。每个周期都有严格的5分吗?非常感谢。对于每个实验,我有500000个日期记录,并且我正在更改每个实验周期中的点数。所以,第一个是5,接下来的500000记录是10。因此,每500000条记录的值是固定的。这是一个开始,然后我会去一个湍流的点,每个周期的点数都会不同。你有关于周期信号频率的信息吗?所有数据都一样吗?如果是的话,滑动窗口FFT可能是一个很好的解决方案。我认为这个问题非常复杂,你必须想出自己的策略来解决它。您只是比我们更了解数据的行为。然后我们可以帮助你实现它。非常感谢你。我不确定这是否有效。我用一个新的情节更新了这个问题。有时,第一个周期不是第一个周期。因此,如果信号是周期性的,那么所有周期的信号的平均值和均方根值必须相同。我的意思是,如果信号是周期性的,三个周期的平均值必须是相同的。RMS也是如此。我的第二个情节解释了我的意思。而且,我的实验数据有时很嘈杂。我在寻找周期达到稳定状态时的平均值。这就是为什么我提到,在接下来的三个周期中,平均值和RMS必须相同。我明白了。这使得问题更加复杂,但也更加有趣。每个周期都有严格的5分吗?非常感谢。对于每个实验,我有500000个日期记录,并且我正在更改每个实验周期中的点数。所以,第一个是5,接下来的500000记录是10。因此,每500000条记录的值是固定的。这是一个开始,然后我会去一个湍流的点,每个周期的点数都会不同。你有关于周期信号频率的信息吗?所有数据都一样吗?如果是的话,滑动窗口FFT可能是一个很好的解决方案。我认为这个问题非常复杂,你必须想出自己的策略来解决它。您只是比我们更了解数据的行为。然后我们可以帮助您实现它。