Найти максимальное значение в очереди? - PullRequest
0 голосов
/ 18 октября 2011

У меня есть очередь данных с размером окна 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;
                }
...