Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > C# (си шарп)
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 16.07.2015, 16:00   #11
.Lexx.
 
Регистрация: 31.01.2011
Сообщений: 7
По умолчанию

у меня есть 50000 значений, которые фактически представляют собой SIN, но синус кривой, т.е. выполнена кривая не плавно, а ступеньками.
В каждой ступеньке по 33 или 34 значения.
Соответственно мне надо отловить первую ступень, потом делать проверку на 33 или 34.
Пока думал основной алгоритм, забыл про переполнение, сейчас смотрю.
А вот то, что я писал про список и контейнер. можете посоветовать какое чтиво в контексте поставленной задачи, а не просто вообще теория.
А то котелок уже свистит и раскраснелся.
.Lexx. вне форума Ответить с цитированием
Старый 16.07.2015, 16:08   #12
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Ну в целом то контейнерами называют любой механизм обработки списка.
vector, list, stack... Даже обычный список, который дают в ВУЗах тоже можно назвать контейнером. Т.е. контейнер, это некий обьект, в который можно засунуть какие-то данные не обязательно сходные по типу, например положить туда строку и число, так, что они будут как бы элементами списка.
Ну а чтива про списки можешь поискать. Можно про коллекции почитать: https://msdn.microsoft.com/ru-ru/lib...v=vs.110).aspx
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 16.07.2015, 16:17   #13
.Lexx.
 
Регистрация: 31.01.2011
Сообщений: 7
По умолчанию

Что-то текст сообщения не передался.
Короче говоря я читаю массив [50000,2] из файла, представляющий собой 2 кривые, одна изменяется плавно, другая ступеньками.
Я работаю над той которая ступеньками соответственно.
33 и 34 это кол-о тактов на одну ступеньку(идёт 33 33 34 33 33 34 и т.д. но опять же не до конца уверен, что такое соотношение на всём промежутке).
1.5 - я подобрал исключительно из наблюдений за 2 соседними ступеньками. изменение между ними превышает любое изменение в ступеньке в 1.5 раза(и я надеюсь, так и будет оставаться)
начинается кривая не с полноценной ступеньки, поэтому вначале ищу самую большую дельту за 34 такта. Её номер и делаю стартовым для основной функции.
вот так.
Если существует лучшее решение подобной проблемы, прошу подскажите. И соответственно где про можно о нём почитать, в котексте моей проблемы

Ахаа терь отправилось триндец, видать мозила коньки отбрасывает.
.Lexx. вне форума Ответить с цитированием
Старый 17.07.2015, 08:27   #14
Akeloya
Форумчанин
 
Регистрация: 27.01.2014
Сообщений: 115
По умолчанию

Цитата:
Сообщение от .Lexx. Посмотреть сообщение
Что-то текст сообщения не передался.
Короче говоря я читаю массив [50000,2] из файла, представляющий собой 2 кривые, одна изменяется плавно, другая ступеньками.
Я работаю над той которая ступеньками соответственно.
33 и 34 это кол-о тактов на одну ступеньку(идёт 33 33 34 33 33 34 и т.д. но опять же не до конца уверен, что такое соотношение на всём промежутке).
1.5 - я подобрал исключительно из наблюдений за 2 соседними ступеньками. изменение между ними превышает любое изменение в ступеньке в 1.5 раза(и я надеюсь, так и будет оставаться)
начинается кривая не с полноценной ступеньки, поэтому вначале ищу самую большую дельту за 34 такта. Её номер и делаю стартовым для основной функции.
вот так.
Если существует лучшее решение подобной проблемы, прошу подскажите. И соответственно где про можно о нём почитать, в котексте моей проблемы

Ахаа терь отправилось триндец, видать мозила коньки отбрасывает.

Зачем такие сложности? У вас синус, если речь идет о нем, представляется функцией Asin(x + fi) + b.
Сам синус имеет два экстремума. В общем случае дискретизация может захватить экстремум или нет. Тогда вы получите три точки если она захватила экстремум (- 0 + или + 0 -) и не захватывает (- + и + -), минусы и плюсы - это поведение производной, а в алгоритме такую проверку можно сделать просто.
Если каждое следующее значение возрастает, мы приближаемся к верхнему экстремуму, как только встретили значение которое не возрастает - мы перешагнули этот экстремум. Аналогично и про нижний экстремум.
В итоге вы таким образом можете проверить гипотезу, что ваш синус описывается 33 или 34 тактами.
Опять же, получив информацию о том, где находится первый экстремум, вы получаете информацию о фазовом сдвиге синуса и сможете правильно разбить данную дискретизацию на блоки.

А на счет предположения что, изменение между двух ступенек кратно 1,5 на мой взгляд спорно. Если у вас A сравнительно небольшое (небольшая амплитуда), тогда приближаясь к экстремуму, ваши 1,5 начнут уменьшаться вплоть до нуля.

Или я не правильно вас понял
Akeloya вне форума Ответить с цитированием
Старый 17.07.2015, 09:28   #15
.Lexx.
 
Регистрация: 31.01.2011
Сообщений: 7
По умолчанию

Цитата:
Сообщение от Akeloya Посмотреть сообщение
Или я не правильно вас понял
Как я понимаю в своём сообщении вы предполагаете что функция монотонно возрастает и убывает. Это немного не так. На каждую ступеньку приходится 33-34 значения и они имеют произвольное значение для этой ступени.
Насчёт полтора с вами полностью согласен, но не вижу варианта лучше. Кроме того 1.5 я выбрал для самой маленькой амплитуды, и оставлю это знач для больших.
.Lexx. вне форума Ответить с цитированием
Старый 17.07.2015, 09:51   #16
Akeloya
Форумчанин
 
Регистрация: 27.01.2014
Сообщений: 115
По умолчанию

Цитата:
Сообщение от .Lexx. Посмотреть сообщение
Как я понимаю в своём сообщении вы предполагаете что функция монотонно возрастает и убывает. Это немного не так. На каждую ступеньку приходится 33-34 значения и они имеют произвольное значение для этой ступени.
Насчёт полтора с вами полностью согласен, но не вижу варианта лучше. Кроме того 1.5 я выбрал для самой маленькой амплитуды, и оставлю это знач для больших.
т.е. вы хотите обработать дискретизированный сигнал с шумом?
Akeloya вне форума Ответить с цитированием
Старый 17.07.2015, 09:59   #17
.Lexx.
 
Регистрация: 31.01.2011
Сообщений: 7
По умолчанию

угу.
Сейчас наконец нашёл ошибку, получился син, но ведётся относительно монотонно растущей прямой.
Всё убрал))))) Всё арбайтает.
Проблема была в переполнении индекса относительно количества значений матрицы. Моя первая прожка получается)
а росло из-за необнуления среднего после каждого цикла 33 значений
.Lexx. вне форума Ответить с цитированием
Старый 17.07.2015, 10:24   #18
Akeloya
Форумчанин
 
Регистрация: 27.01.2014
Сообщений: 115
По умолчанию

Цитата:
Сообщение от .Lexx. Посмотреть сообщение
угу.
Сейчас наконец нашёл ошибку, получился син, но ведётся относительно монотонно растущей прямой.
Всё убрал))))) Всё арбайтает.
Проблема была в переполнении индекса относительно количества значений матрицы. Моя первая прожка получается)
а росло из-за необнуления среднего после каждого цикла 33 значений
Ну вот.
Но я бы на вашем месте никаких констант не заводил бы, а воспользовался бегущими средними для выяснения поведения функции для последующей обработки.
Первая была бы по двум значениям - хотя бы как-то сгладила шумы, т.е. они бы частично схлопнулись (типа идеальное значение где-то по середине между двух зашумленных). Вторая была бы, например, по 5 последним - она бы очень сильно сгладила сигнал и по ней можно делать контрольную проверку, если вдруг имеются какие-то скачки.
Это в том случае, если вы хотите отвязаться от константы цикла значений и обработать, например сигнал, который на период функции имеет 330 значений (т.е. в 10 раз больше чем у вас) без переписывания кода.

ИМХО, получается "Угадай мелодию", для каждого нового сигнала вам нужно угадать сколько значений на период получается, чтобы его обработать.
Akeloya вне форума Ответить с цитированием
Старый 17.07.2015, 10:35   #19
.Lexx.
 
Регистрация: 31.01.2011
Сообщений: 7
По умолчанию

Идею понял. но для моего варианта для всех 40 вариантов получается 33-34 значения на уровень и меняться не будет.
Бегущее среднее = Aср(n-1) + (Acр(n)-Aср(n-k))/k
мы его зовём скользящее среднее))
.Lexx. вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
работа с функциями в C# Анастасия666 C# (си шарп) 3 16.11.2013 18:48
Работа с функциями !) vladtum Общие вопросы C/C++ 0 28.11.2010 17:25
Работа с функциями(С++) Scarletred Помощь студентам 5 06.04.2010 13:29
РАБОТА С ФУНКЦИЯМИ В С++ серг Помощь студентам 4 03.03.2010 22:26