Форум программистов, компьютерный форум CyberForum.ru

Сглаживание сигнала - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 23, средняя оценка - 4.74
ALFer181
0 / 0 / 0
Регистрация: 31.07.2012
Сообщений: 8
31.07.2012, 12:13     Сглаживание сигнала #1
Приветствую Вас!
Возник следующий вопрос: даны показатели датчика,
приходят они в виде ступенек. Необходимо "сгладить" или "отфильтровать"
сигнал, чтобы избавиться от этих ступенек. Другими словами, чтобы
полученная функция проходила по "вершинам" ступенек.
Считал,что неплохой вариант - это экстраполяция, но,
толи я не до конца разобрался как правильно ее применить,
толи она сюда не подходит.
В существующих программах "гладил" функцию методом Савицкого-Голея,
и FFT фильтром и т. д. Но тут уже проблема в моих знаниях,
не хватает мне мозгов самостоятельно разобраться в тонкостях их
работы, для создания своего модуля на основе этих способов сглаживания.

Хочу добавить, что новые данные приходят каждые 0.03 сек
Еще одно условие - это избегать запаздывания.

Было бы отлично получить еще и математическое обоснования
предложенных способов т е формулы, что откуда вытекает и
какие обозначения как расшифровываются.

Помогите кто чем и как может!
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
31.07.2012, 12:13     Сглаживание сигнала
Посмотрите здесь:

Сглаживание C++
C++ Сглаживание матрицы
C++ Как исправить программу (сглаживание функции)
задержка сигнала c++ C++
C++ Получения спектра сигнала
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
HomeR_J_SimpsoN
59 / 59 / 2
Регистрация: 15.10.2010
Сообщений: 356
31.07.2012, 12:22     Сглаживание сигнала #2
Я поднимал не так давно эту тему.
Гляньте, может поможет.

Правда особой математической трактовки там нет. Но тем не менее работает. И не плохо.
ALFer181
0 / 0 / 0
Регистрация: 31.07.2012
Сообщений: 8
31.07.2012, 12:31  [ТС]     Сглаживание сигнала #3
Большое спасибо,я обязательно попробую разобраться с этим алгоритмом,тем более,что у меня были уже такие потуги
Тут возникают 2 проблемы:
1: я настолько начинающий программист,что не могу подключить данный исходник к своему модулю.
2: насколько мне показали мои эксперименты,метод савицкого-голея запаздывает.
HomeR_J_SimpsoN
59 / 59 / 2
Регистрация: 15.10.2010
Сообщений: 356
31.07.2012, 12:36     Сглаживание сигнала #4
Цитата Сообщение от ALFer181 Посмотреть сообщение
не могу подключить данный исходник к своему модулю
Вам его придется переписать на stl. Там используются Qt-шные библы, которые Вам вряд ли удастся использовать в студийном проекте. Хотя рекомендую.

Цитата Сообщение от ALFer181 Посмотреть сообщение
метод савицкого-голея запаздывает
Быть может. У меня данные считывались раза по 3-4 в секунду. Не тормозил.
Попробуйте немного упростить алгоритм если у Вас таки будет тормозить.

Что интересно, алгоритм работал действительно хорошо (давал хороший результат) именно с этими коэффициентами. Убил около суток для поиска более подходящих -=) Не нашел.
mimicria
return (true);
 Аватар для mimicria
1956 / 1093 / 91
Регистрация: 19.04.2011
Сообщений: 2,344
31.07.2012, 13:00     Сглаживание сигнала #5
Цитата Сообщение от ALFer181 Посмотреть сообщение
Считал,что неплохой вариант - это экстраполяция, но,
толи я не до конца разобрался как правильно ее применить, толи она сюда не подходит.
Чисто теоретически, если нужно сгладить график по уже имеющимся значениям используется интерполяция (многочленами, сплайнами - методов много). Экстраполяция используется для вычисления возможного дальнейшего поведения графика функции по имеющимся данным.
ALFer181
0 / 0 / 0
Регистрация: 31.07.2012
Сообщений: 8
31.07.2012, 13:39  [ТС]     Сглаживание сигнала #6
to HomeR_J_SimpsoN, вот про Qt и библы и каким образом переписать это все в тот вид,который мне нужен, я вообще ничего не знаю

А как же быть?

to mimicria, это я понимаю, суть в том, что я считал, что экстраполяция поможет избежать большого запаздывания, потому как достаточно небольшого массива полученных данных. Повторюсь,что данные приходят каждые 0.03 сек и запаздывание самого прибора равно 0.5 сек(из-за его конструктивных особенностей).

привожу картинки с участками функции, замечу что это всего-лишь небольшая ее часть,чтобы показать характер ступеней. Она не постоянно возрастает, а имеет и прямые участки и спады.

на картинках исходная функция и желаемый результат.
Миниатюры
Сглаживание сигнала   Сглаживание сигнала  
OhMyGodSoLong
~ Эврика! ~
 Аватар для OhMyGodSoLong
1234 / 983 / 42
Регистрация: 24.07.2012
Сообщений: 2,002
31.07.2012, 13:45     Сглаживание сигнала #7
Ну вот вам надо сдетектировать эти ступени.
1. Небольшое сглаживание чем-угодно, чтобы уменьшить шумы.
2. Смотрим на производную. Где у неё резкий дёрг вверх и тут же спад — там угол ступеньки.
3. Находим все углы, строим интерполяцию по этим точкам.
ALFer181
0 / 0 / 0
Регистрация: 31.07.2012
Сообщений: 8
31.07.2012, 14:03  [ТС]     Сглаживание сигнала #8
~OhMyGodSoLong~, Если следовать Вашему методу,то получается сильное запаздывание,а этого надо избегать. Сигнал не приодит уже готовый,а формируется в процессе работы прибора, другими словами,работает в режиме реального времени и в этом вот режиме и нужно "отсекать" все лишнее.
OhMyGodSoLong
~ Эврика! ~
 Аватар для OhMyGodSoLong
1234 / 983 / 42
Регистрация: 24.07.2012
Сообщений: 2,002
31.07.2012, 15:03     Сглаживание сигнала #9
Ну сглаживать можно на лету. Производную вычислять тоже можно на лету. Прилеплять новые сплайны (и, возможно, чуть править предыдущие) по новым приходящим точкам тоже можно на лету.
ALFer181
0 / 0 / 0
Регистрация: 31.07.2012
Сообщений: 8
31.07.2012, 15:11  [ТС]     Сглаживание сигнала #10
Не затруднит ли Вас подкинуть метод для обработки,у меня собственно с этим проблема. Ну а за исходничек с комментариями, я был бы очень,ну прям ооочень признателен
novi4ok
549 / 502 / 8
Регистрация: 23.07.2009
Сообщений: 2,359
Записей в блоге: 1
31.07.2012, 15:17     Сглаживание сигнала #11
как используются данные? кто-то смотрит на график, или по этим данным вырабатывается сразу управляющий сигнал? ну и чем не устраивают несглаженные данные?
ALFer181
0 / 0 / 0
Регистрация: 31.07.2012
Сообщений: 8
31.07.2012, 21:52  [ТС]     Сглаживание сигнала #12
novi4ok, Дело в том, что по полученным данным должен формироваться как раз управляющий сигнал, но так как данные приходят "скачками" или "ступеньками", то не всегда можно сказать, действительно ли была ступенька(т е показатель не менялся) или это своего рода "шум". Ну и график это, вобщем говоря, критерий оценки работы прибора, тоже немало важен.
ALFer181
0 / 0 / 0
Регистрация: 31.07.2012
Сообщений: 8
02.08.2012, 10:26  [ТС]     Сглаживание сигнала #13
Товарищи, и все-таки прошу о помощи!
Если у кого-то есть возможность "поднатаскать" меня в программировании на С++ на решении конкретной задачи,посредством репетиторства, отзовитесь пожалуйста(естественно не безвозмездно).
Лучше бы из Москвы или ближайшего Подмосковья, так как сам я из города Жуковский.
Кто что посоветует или сам готов взяться - пишите или тут в лс или на почту ivannekrasov88@mail.ru
raxp
10140 / 6527 / 475
Регистрация: 28.12.2010
Сообщений: 21,167
Записей в блоге: 1
02.08.2012, 10:45     Сглаживание сигнала #14
ALFer181, есть мысль, что у вас не столько проблема с С++, сколько с пониманием алгоритмов сглаживания. Может книжки почитать?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
02.08.2012, 18:59     Сглаживание сигнала
Еще ссылки по теме:

Создание АМ-сигнала C++
Выполнить сглаживание одномерного массива C++
C++ Эмуляция сигнала I и Q

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
novi4ok
549 / 502 / 8
Регистрация: 23.07.2009
Сообщений: 2,359
Записей в блоге: 1
02.08.2012, 18:59     Сглаживание сигнала #15
Цитата Сообщение от ALFer181 Посмотреть сообщение
novi4ok, Дело в том, что по полученным данным должен формироваться как раз управляющий сигнал, но так как данные приходят "скачками" или "ступеньками", то не всегда можно сказать, действительно ли была ступенька(т е показатель не менялся) или это своего рода "шум". Ну и график это, вобщем говоря, критерий оценки работы прибора, тоже немало важен.
для качественного решения нужно понимать природу процессов, а мы ее не знаем. на твоих картинках ты изобразил некий процесс изменения в сторону увеличения, скажем, "в среднем под 45 градусов", но ступеньками. допустим, средняя длина ступеньки - 10, высота - тоже 10. и ты выдвигаешь протеворечивоые требования.
допустим, мы имеем уже три ступеньки позади, и находимся в конце четверной (правая точка на горизонтали).
т.е. "текущие координаты сигнала" - х 40, у 30.
ты, с одной стороны, хочешь, чтобы "не было запаздывания", т.е. нужно за текущее значение сигнала (ордината у) принимать 30. с другой стороны, ты хочешь "сглаживания", т.е. нам для этого должно быть все равно, какое значение имеет сигнал в настоящий момент, важно, как он менялся несколько ступенек назад.
нужно определиться, что в данный момент хуже - рассчитать управляющий сигнал, приняв текущее значение за 30 или 40? а если следующая ступенька будет прыгать не на 40, а вниз, на 20 - это сильно плохо или потерпит? нужно знать ответы на все эти вопросы, т.е. насколько инерционен твой объект, какова его реакция на управляющее воздействие, насколько критичны отклонения и т.д., а до того - голая спекуляция, и никакие методы и репетиторство не помогут.
Yandex
Объявления
02.08.2012, 18:59     Сглаживание сигнала
Ответ Создать тему
Опции темы

Текущее время: 14:52. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru