У меня есть очередь данных с размером окна 300. Новые данные добавляются на одном конце, старые значения удаляются с другого конца.
Я ожидаю, что данные очереди останутся более или менее непротиворечивыми, например: 10,12,15,10,20, а затем начнут резко расти: 15,10,20,22,25,26,28,30,32 ... вплоть до 150 или около того. Там данные могут немного колебаться, затем они будут снижаться с аналогичным уклоном (120,118,116,115 ...) вплоть до 20 или около того.
Я пытаюсь программно определить поворотный момент в этом ряду данных, но мой код обнаруживает пики чаще, чем хотелось бы. Как я могу определить, когда график поднимается, когда он достигает определенной поворотной точки и когда он начинает падать?
NSNumber* last10 = [queue5Min objectAtIndex:[queue5Min count]-10];
NSNumber* last240 = [queue5Min objectAtIndex:[queue5Min count]-240];
int value = 0;
int last240Int = [last240 intValue];//debug
//compare against some point in the past
for(int i = 10; i<20;i++)
{ last10 = [queue5Min objectAtIndex:[queue5Min count]-i];
value += [last10 intValue];
}
value = value/10; //find the average of the point in the past
//attempt to detect sharp rise compared to the past
if( queueValue5Min >25 && queueValue5Min> [last240 intValue]*2)
{
if(queueValue5Min>value)
{
stateMachine5Min = kActivityRising;
NSLog(@">>>>>>>>>>>> 5 min Rising @ %i:, %i, %i",epoch, value,queueValue5Min);
}else if(queueValue5Min <value)
{
NSLog(@">>>>>>>>>>>> 5 min FALLING @ %i:, %i, %i",epoch, value,queueValue5Min);
stateMachine5Min = kActivityFalling;
}
else if(smallActivityCount5Min == value)
{
NSLog(@">>>>>>>>>>>> 5 min peak @ %i:, %i, %i",epoch, value,queueValue5Min);
stateMachine5Min = kSmallActivityAnalyzerActivityPeaked;
}
}else
{
stateMachine5Min = kSmallActivityAnalyzerActivityFlat;
}