2017-09-25 143 views
0

我正在尋找檢測到斑點的平均速度,一旦它被檢測到,直到它離開屏幕,我在如何設置邊界的值到使用。Matlab - 計算非NaN幀的平均值

下面是一些示例性數據:

#35 x_cen=NaN y_cen=NaN curSpeed=0 
Elapsed time is 0.263965 seconds. 
#36 x_cen=NaN y_cen=NaN curSpeed=0 
Elapsed time is 0.263827 seconds. 
#37 x_cen=NaN y_cen=NaN curSpeed=0 
Elapsed time is 0.420120 seconds. 
#38 x_cen=3.052941e+01 y_cen=1.147059e+01 curSpeed=0 
Elapsed time is 0.302205 seconds. 
#39 x_cen=30 y_cen=1.104167e+01 curSpeed=6.813593e-01 
Elapsed time is 0.294330 seconds. 
#40 x_cen=30 y_cen=1.104167e+01 curSpeed=6.813593e-01 
Elapsed time is 0.281333 seconds. 
#41 x_cen=30 y_cen=1.104167e+01 curSpeed=6.813593e-01 
Elapsed time is 0.293527 seconds. 
#42 x_cen=NaN y_cen=NaN curSpeed=0 
Elapsed time is 0.272795 seconds. 
#43 x_cen=NaN y_cen=NaN curSpeed=0 
Elapsed time is 0.271102 seconds. 
#44 x_cen=NaN y_cen=NaN curSpeed=0 

在這個例子中數據我想從幀39開始在對象上的平均速度到框架41

目前我可以calcualte平均

avgSpeed = (curSpeed + sum(speedData(end-2:end)))/4; 

我打算如果我CA來包裝上面的行中的if語句:使用下面的代碼幀的指定數量的速度n有辦法使用可變的行號。

+0

如果有一個包含所有的數據的矩陣,可以使用的邏輯索引,以提取所述非NaN值。 – m7913d

回答

0

我用下面的代碼,以確定幀的數量與平均速度:

moving = false; 
startFrame = 0; 
endFrame = 0; 
counter = 0; 
     speedTotal = 0; 
     if curSpeed > 0 && moving == false 
      counter = counter + 1; 
      speedTotal = speedTotal + curSpeed; 
     elseif curSpeed == 0 
      moving = false; 
      avgSpeed = speedTotal/counter 
      counter = 0; 
      avgSpeed = 0; 
      speedTotal = 0; 
     end