powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / C++ [игнор отключен] [закрыт для гостей] / Распознование синусоид
15 сообщений из 15, страница 1 из 1
Распознование синусоид
    #33066629
C955
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Неподскажите уважаемый All метод распознования синусоид. Т.е есть график, нужно определить синусоида это или нет (какая синусоида - неважно ).

Спасибо.
...
Рейтинг: 0 / 0
Распознование синусоид
    #33066699
Фотография XM
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Преобразования Фурье?

---
"Raffiniert ist der Herr Gott, aber boshaft ist Er nicht." Albert Einstein
...
Рейтинг: 0 / 0
Распознование синусоид
    #33066855
dmitry
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я конечно не специалист, но как бы стал делять я:
Есть график - значит надо понимать есть двумерный массив точек (x;y).
Во-первых, точно определить по нему не удастся в любом случае, поскольку количество точек конечное. И даже что происходит с функцией между двумя соседними точками неизвестно. Т.е. определить можно будет только с определенной погрешностью.
1) под "любой" синусоидой понимаем y=A*sin(k*x+b)+M?
2) Найти минимум YMin и максимум YMax функции. Вообще говоря любой максимум и минимум но чтобы между ними не было других минимумов и максимумов. В идеальном графике максимумы у синусоиды все одинаковые (минимумы тоже), в реальном могут отличаются на допустимую погрешность, т.е. в массиве может просто не быть точке настоящего максимума, а только точка близкая к нему. Также запомнить значение аргумента функции при котором имеем эти минимум и максимум Xmin и Xmax.
2)Разницу между минимумом и максимумом делим пополам и получаем амплитуду A=(YMax-YMin)/2.
3) M=YMax-A
4) Период синусоиды получим как T=2*abs(XMax-XMin); соответственно k=T/(2*pi)
5) b=pi/2-Xmax

Теперь получены все параметры - A, k, b, M. Подставляем их в исходную формулу и получаем формулу конкретной синусоиды. проверяешь подходят ли остальные точки графика под эту формулу. Если да - значит синусоида; нет - значит нет
Вроде так :-)
...
Рейтинг: 0 / 0
Распознование синусоид
    #33067144
С995
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
DmitryЯ конечно не специалист, но как бы стал делять я:
Есть график - значит надо понимать есть двумерный массив точек (x;y).
Во-первых, точно определить по нему не удастся в любом случае, поскольку количество точек конечное. И даже что происходит с функцией между двумя соседними точками неизвестно. Т.е. определить можно будет только с определенной погрешностью.
1) под "любой" синусоидой понимаем y=A*sin(k*x+b)+M?
2) Найти минимум YMin и максимум YMax функции. Вообще говоря любой максимум и минимум но чтобы между ними не было других минимумов и максимумов. В идеальном графике максимумы у синусоиды все одинаковые (минимумы тоже), в реальном могут отличаются на допустимую погрешность, т.е. в массиве может просто не быть точке настоящего максимума, а только точка близкая к нему. Также запомнить значение аргумента функции при котором имеем эти минимум и максимум Xmin и Xmax.
2)Разницу между минимумом и максимумом делим пополам и получаем амплитуду A=(YMax-YMin)/2.
3) M=YMax-A
4) Период синусоиды получим как T=2*abs(XMax-XMin); соответственно k=T/(2*pi)
5) b=pi/2-Xmax

Теперь получены все параметры - A, k, b, M. Подставляем их в исходную формулу и получаем формулу конкретной синусоиды. проверяешь подходят ли остальные точки графика под эту формулу. Если да - значит синусоида; нет - значит нет
Вроде так :-)

идея, реально правда массив одномерный :)
и график может и не быть синусоидой, но этот подход можно использовать для построение шаблона и вычисления коэф. корреляции с исходным графиком.
...
Рейтинг: 0 / 0
Распознование синусоид
    #33067474
dmitry
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plaintext
график может и не быть синусоидой
Так мы исходим из допущения что является. Если же это предположение было неверно, то мы это увидем по несоответствию других точек графика полученной формуле.

Код: plaintext
правда массив одномерный 
Тогда можно вторую размеренность (x) ввести самому. Т.е. берешь произвольную точку на X и произвольный шаг между точками (маленький). Потом добавляя это шаг получаешь вторую размеренность. Т.е. размечаешь X. То что будет отличаться от исходной (по которой были получены твои x-ы) не важно. Синусоида ведь :-)
...
Рейтинг: 0 / 0
Распознование синусоид
    #33067555
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2 Dmitry

Расчет периода у тебя - неверный. Из постановки никак не вытекает что массив точек задан для 1 периода.

2 C955

Анализ Фурье будет самым верным решением.
...
Рейтинг: 0 / 0
Распознование синусоид
    #33067698
Dmitryzzzz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ну если задано точек для меньше чем одного периода то вполне может и не работать
Если меньше полупериода, то не будет работать точно. А если период и более, то тогда будет работать правильно
...
Рейтинг: 0 / 0
Распознование синусоид
    #33068637
C955
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
mayton2 C955

Анализ Фурье будет самым верным решением.

непонял, а как можно использовать для распознования синусоидного графика преобразование Фурье ?
...
Рейтинг: 0 / 0
Распознование синусоид
    #33068754
Фотография Ggg_old
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
2C955:
Преобразование Фурье для этого и существует - "распознавать" в сигнале различные синусоиды... ;-). Возьмите какой-нибудь Маткад, Матлаб и попробуййте сами.

все наши на www.corba.kubsu.ru
...
Рейтинг: 0 / 0
Распознование синусоид
    #33069938
Карабас Барабас
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть еще вариант - вычислить 2-ю производную, и сравнить с исходным графиком ...
...
Рейтинг: 0 / 0
Распознование синусоид
    #33070562
C995
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Карабас БарабасЕсть еще вариант - вычислить 2-ю производную, и сравнить с исходным графиком ...
а подробнее ? :)
...
Рейтинг: 0 / 0
Распознование синусоид
    #33071092
Карабас Барабас
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sin''(x)=-sin(x)
...
Рейтинг: 0 / 0
Распознование синусоид
    #33073388
YRinat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Карабас БарабасЕсть еще вариант - вычислить 2-ю производную, и сравнить с исходным графиком ...

А если точки довольно дискретные то как производную считать? Слишком большая ошибка будет при вычисление второй производной.

Разложение в ряд Фурье получше будет. Но мне кажется период все-равно самому придется высчитывать...

Походу самый лучший выход, из простых, предложен Dmitry
...
Рейтинг: 0 / 0
Распознование синусоид
    #33073629
C995
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
YRinat Карабас БарабасЕсть еще вариант - вычислить 2-ю производную, и сравнить с исходным графиком ...

А если точки довольно дискретные то как производную считать? Слишком большая ошибка будет при вычисление второй производной.

Разложение в ряд Фурье получше будет. Но мне кажется период все-равно самому придется высчитывать...

Походу самый лучший выход, из простых, предложен Dmitry

а если синусоида затухающая или период переменный, а если это вообще кривая у которой только часть имеет вид синусоиды ? :)

Вообщем, разрулила все автокорреляционная функция, которая для таких графиков имеет вполне определенный вид - затухающей синусоиды с равными периодами.
...
Рейтинг: 0 / 0
Распознование синусоид
    #33075616
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не удивительно. Автокорреляционный анализ и
анализ Фурье имеют много общего. ИМХО.
...
Рейтинг: 0 / 0
15 сообщений из 15, страница 1 из 1
Форумы / C++ [игнор отключен] [закрыт для гостей] / Распознование синусоид
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]