2017-05-27 13 views
0

我試圖在信號變爲週期並達到穩定狀態後找到Mean週期爲three。我有一個信號在開始時並不是週期性的,但在一段時間後它變成了週期性信號。我想找到下一個three週期的Mean,每個週期有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

謝謝!

+0

您可以找到第一個點的索引,其中diff(y)> 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,因爲它在許多領域都是標準的,如果在您的領域不同,請將其更改爲0.05。

+0

非常感謝。我不確定這是否會奏效。我用一個新的情節更新這個問題。有時第一個週期不是第一個週期。因此,如果信號是週期性的,那麼信號的均值和均方根必須在所有的週期性週期中相同。我的意思是三個週期的平均值必須相同,如果信號是週期性的。 RMS相同。我的第二個陰謀解釋了我的意思。另外,我的實驗數據有時很嘈雜。我發現週期性週期達到穩定狀態時的意思。這就是爲什麼我提到Mean和RMS在接下來的三個週期中必須相同。 – user6052232

+0

我明白了。這使問題變得更復雜,但也更有趣。每個週期是否嚴格5分? –

+0

非常感謝。對於每個實驗,我有500,000個日期記錄,我正在改變每個實驗週期中的點數。因此,第一個是5,那麼下一個500,000的記錄是10.因此,每500,000條記錄都是固定的。這是一個開始,那麼當我將每個週期的動盪點數將會不同。 – user6052232