Подскажите алгоритм (Поиск максимумов в сигнале))

Discussion in 'С/С++, C#, Rust, Swift, Go, Java, Perl, Ruby' started by Marana, 8 Dec 2009.

  1. Marana

    Marana New Member

    Joined:
    6 Dec 2009
    Messages:
    1
    Likes Received:
    0
    Reputations:
    0
    Собственно стоит задача средствами, к примеру Delphi, отыскать все позиции пиков в некотором сигнале (скажу сразу - сигналы могут быть разные). Пиком будем считать позицию, где амплитуда сигнала составляет скажем 15% от максимального пика, но, на один всплеск должен приходиться только один пик (его координата). Т.е, это не просто поиск максимальных элементов в массиве - это поиск масимального элемента во всплеске.

    Сигнал задан огромным массивом значений. Для наглядности прилеплю картинку с кусочком сигнала.


    Вот мой алгоритм - он вроде как и работает, но не точно (Может пропустить максимум, может указать два максимума в 1 всплеске).

    Собственно алгоритм:

    0. Находим наибольший эл-т в Массиве (это максимум сигнала от которого берется 15 %)

    1. Находим все амплитуды (т.е справа и слева от таких точек будет меньший элемент)

    2. Записываем 0 туда, где амплитуда меньше 15% от максимума

    3. Начинаем поиск максимального элемента. В момент, когда слева не 0, а справа 0, меняем индекс массива, в который записываем максимумы. Т.е у нас получается поиск максимумов не по всему исходному массиву, а по всплескам.

    Но, как я уже и сказал метод весьма не точен :(

    Ломаю башку уже 2 недели, вот решил написать, может кто сообразительней меня будет или уже имел опыт с такого рода задачами :)


    И да, собственно фрагмент сигнала:

    [​IMG]
     
  2. Algol

    Algol New Member

    Joined:
    29 May 2002
    Messages:
    1,759
    Likes Received:
    4
    Reputations:
    0
    1)непонятно что такое всплеск
    2)чем не устраивает прведеный алгоритм? Что значит "Может пропустить максимум, может указать два максимума в 1 всплеске" ? Откуда ты знаешь что там должен быть один максимум а не два ?

    А вообще мне кажется эта задача не имеет однозначного решения. Все зависит от того, что считать "всплеском", а всплески у тебя, я так подозреваю, это низкочастотные колебания сигнала. Если это действительно так, то задача решаема только если задается еще и максимальная частота всплесков (то есть все колебания более высокой частоты - игнорируются). А отсюда выплывает и решение - низкочастотный фильтр + поиск простых максимумов на нем.
     
  3. Marika-92

    Marika-92 New Member

    Joined:
    9 Dec 2009
    Messages:
    3
    Likes Received:
    0
    Reputations:
    0
    Подскажите алгоритм простого написания спама в Delphi.
    Хочу проанализировать весь код и написать обнаружение спама...
    а сам спам никак не выходит
     
  4. Algol

    Algol New Member

    Joined:
    29 May 2002
    Messages:
    1,759
    Likes Received:
    4
    Reputations:
    0
    Попробуй свои силы в бредогенератрах :D
    Они, кстати, в спаме тоже используются :cool: