Избавьтесь от ошибочных пиков на графике iOS

У меня есть NSArray значений с плавающей запятой, и я представляю этот массив на графике, он выглядит так:

введите здесь описание изображения

Как вы видите, есть пиковые значения... Я могу легко их посчитать, когда смотрю на график (11 пиков), но если я смотрю на значения моего массива, есть несколько "ложных" пиков, см. следующий рисунок:

введите здесь описание изображения

Мой вопрос: как я могу избавиться от таких ошибочных пиков, чтобы нарисовать более плавный график?

Я хочу иметь массив с пиковыми значениями примерно с тем же интервалом и с увеличенными значениями, чтобы выделить их, примерно так:

введите здесь описание изображения

PS: значения в моем массиве графиков постоянно меняются, но график выглядит почти одинаково.


person iOS Dev    schedule 23.02.2015    source источник
comment
Прежде всего, вы должны описать, как (без компьютера, а только с вашим мозгом) определить, что такое ложный пик. Затем мы можем подумать о том, как обнаружить их по коду. Например, должны ли 2 пика быть разделены значениями 4/5?   -  person Larme    schedule 23.02.2015
comment
Я просто выделил все значения, которые больше, чем его соседи, и наблюдал значения, которые расположены примерно на том же интервале (не обязательно между 4-5 элементами), и все пики между ними бесполезны. Я понимаю, что немного сложно понять, что я имею в виду.. Я делаю все возможное, чтобы объяснить :)   -  person iOS Dev    schedule 23.02.2015


Ответы (2)


Разделите массив на подинтервалы и найдите в них максимумы.

person riodoro1    schedule 23.02.2015
comment
Можете ли вы рассказать об этом немного? - person mmmmmpie; 23.02.2015
comment
Если вы разделите массив на интервалы, скажем, длины 4, вы можете взять максимальное значение из интервала и пометить его как пик во всем массиве, взять следующий интервал и отметить еще один пик, и еще, и еще... Надеюсь, это то, что вы имели в виду . - person riodoro1; 23.02.2015
comment
PS. Сложная часть будет заключаться в том, чтобы определить длину интервала, в Вашем случае это должно быть 6 из второго изображения. Мое предположение состояло бы в том, чтобы получить индекс первого пика и установить длину интервала на этот +1 (для пика нужны два соседних значения) - person riodoro1; 23.02.2015
comment
Теперь я понимаю, но, пожалуйста, добавьте больше смысла в свой ответ - и не только в комментариях. - person Daij-Djan; 23.02.2015
comment
дополнение: возможно: чтобы выяснить, что такое пик, вы можете посмотреть на первые (например) 10 значений и найти максимальное (которое значительно больше, чем все остальные) и на основе того, где максимальное значение, вы бы определили длину интервала - person Daij-Djan; 23.02.2015

В итоге я использовал фильтры Lowpass и Highpass из AccelerometerGraph, представленный в документации Apple iOS. Теперь мой график выглядит намного лучше:

введите здесь описание изображения

person iOS Dev    schedule 30.03.2015