Цитата(HardEgor @ Apr 29 2017, 14:36)

Берите первую производная от горба - как-только переход из положительной в отрицательную,то это центр горба.
Лучше формализуйте задачу.
Не очень понятно - проблема в том что горбы будут накладываться друг на друга?
Или в том что надо однозначно привязать горбы от одного предмета друг к другу?
И что такое "там может и не быть начального горба"?
Первая производная от горба будет в моем примере дельта Y (дельта X всегда 1). В случае зашумленного сигнала эта производная будет тоже шуметь, то есть быть то больше, то меньше нуля, однозначный переход уловить невозможно. Только если усреднить или как-то еще отфильтровать шум, чтобы функция стала монотонной на возрастающем и спадаюшем участках горба, но вот как это сделать - я не знаю. Размерность производной будет "болтаться" около нуля, что тоже не радует.
Горбы одного канала накладываться друг на друга не могут, горбы междуканальные будут накладываться однозначно. Следовательно, если горбы наложены друг на друга в обоих каналах - то они принадлежат одному и тому же предмету.
Но тут возникает проблема, допустим я отфильтровал начальные значения скользящим средним с окном 8, и получил горб с монотонной функцией и с мЕньшей максимальной амплитудой. Но тогда может возникнуть ситуация, что один горб большой, второй маленький, и находится "внутри" большого с небольшим смещением (или вообще, немного несимметричный).
Как определить центр горба?
Как понять, что это горб не от помехи?
"Может и не быть изначального горба" - тут имеется в виду, что буфер у меня секунда, и если я начну анализировать буфер где-то в середине пролета большого количества предметов - то корреляция может не дать корректный результат. Например, там может быть остаток горба от первого канала и не быть вообще всплеска на втором (он уже закончился).
Полагаться на 100% надежность детекта горбов я тоже не могу, то есть считать их тоже не получится.
В общем и целом - есть некий буфер, там данные. Если там есть горбы, хотелось бы получить, например, их список, каждое вхождение с некоей метрикой, отражающей интенсивность горба и каким-то показателем, отражающем положение его центра.
Сейчас вижу что-то типа такого:
1. фильтруем сигнал скользящим средним
2. все всплески меньше threshold - отбрасываем.
3. по оставшимся - находим интеграл между моментами перехода через threshold (суммированием) и находим точку, в которой набралась половина этого интеграла.
4. интеграл - интенсивность, точка половины - центр горба
К сожалению, моего образования не хватает, чтобы понять, будет такое работать или нет, не допустил ли я тут каких-то идиотских ошибок, и нет ли способа проще/традиционнее/правильнее.
Как-то так..
Цитата(Михась @ Apr 29 2017, 15:08)

Решали в свое время такую задачу - счет зернышек фотосенсором. Там был "уровень компаратора", который брался относительно постоянного сигнала засветки. Т.к АЦП через ПДП гнало данные в озу с частотой 1кГц в течении секунды, было два массива. В один льем, другой обрабатываем. При определении импульса в момент переключения массивов устанавливался специальный флаг. Длительность импульсов усреднялась, получали среднюю длительность. Если зернышки слипались, то на основании длительности такого импульса вычисляли их количество. Импульсы малой длительности - пыль, просто отрезали. Массив можно еще предварительно фильтрануть.
А как определялся уровень компаратора? Эмпирически?
Что делали, если зернышки летели то дальше, то ближе (допустим, сигнал при этом мог не достичь "уровня компаратора")?
У меян проблема в том, что предметы могут по-разному детектироваться двумя сенсорами, если "перевести на зернышки"

- то зернышко могло лететь не параллельно линии датчиков, и тогда оно может пролететь близко к одному датчику и далеко от другого (на первом дельта сигнала - 100, на втором - 10, и ширина чуть больше, так как летит под другим углом).