Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Сортировка данных
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > Программирование
Sneg_87
Какие посоветуете методы сортировки данных в реальном времени? Данные поступают с АЦП и поэтому времени на их обработку мало.
ЗЫ Метод пузырька не предлагать smile.gif
Goodefine
Какая глубина сортировки требуется?
Sneg_87
Цитата(Goodefine @ Oct 21 2009, 22:39) *
Какая глубина сортировки требуется?

Дело пожалуй не в глубине, а в скорости обработки данных. Данные с АЦП будут записываться в некоторый массив фиксированной длинны из которого надо найти MIN,MAX и их номера. Вот пожалуй и все требования к алгоритму внешней сортировки.
ЗЫ Чтобы не тратить время на перемещение, сравнение, умножение и прочие ненужности. Требуется простой и быстрый smile.gif ну или можно непростой - тоже сойдет
DRUID3
Фильтр скользящий или блочный?
Rst7
Вообще то теория различных методов сортировки более чем разработана. Можно начинать курить хоть прямо с википедии - http://ru.wikipedia.org/wiki/Алгоритм_сортировки

Добиваться более знатного результата можно только допиливая выбранных алгоритм под реальное задание, т.е. уменьшать значение, которое скрывается за обозначением О(чего-то)
rezident
А запись в массив с предобработкой или с постобработкой?
P.S. Гы smile.gif DRUID3 то же самое спросил, но в других терминах smile.gif
Rst7
Хотя стоп. Если вот это и есть задание:
Цитата
Данные с АЦП будут записываться в некоторый массив фиксированной длинны из которого надо найти MIN,MAX и их номера.
, то ничего сортировать не надо, просто по появлению каждого значения надо проверять и обновлять при необходимости 2 переменные, минимальное и максимальное значение. Номера тоже можно сохранять. Сложность O(n), при этом множитель минимален.
Sneg_87
Цитата(rezident @ Oct 21 2009, 23:37) *
А запись в массив с предобработкой или с постобработкой?
P.S. Гы smile.gif DRUID3 то же самое спросил, но в других терминах smile.gif

Спасибо за разъяснения smile.gif значит все-таки с постобработкой.
С начального момента в пустой массив, размер которого не меняется, записываются данные, а старое значенеи заменяется новым.

Цитата(Rst7 @ Oct 21 2009, 23:41) *
Номера тоже можно сохранять

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

PS Да, чет мне тут мысль нехорошая попала в голову, что даже скажем 10 значений из массива но их всеравно надо будет перезаписывать в массив, чтобы добавить новое значение с АЦП.
Может есть методы более оптимальные?
Rst7
Цитата
потому как нужны не значения конктретно из массива, а вообще со старта оцифровки.


Так зачем Вам вообще массив? wink.gif
Sneg_87
Цитата(Rst7 @ Oct 22 2009, 00:05) *
Так зачем Вам вообще массив? wink.gif

Хорошо, когда все хорошо smile.gif В сигнале просто будут появляться импульсные помехи, а если без сохранения предыдущих значений сигнала, то сложно сказать помеха или максимум. Я исходил из таких соображений.
rezident
Цитата(Sneg_87 @ Oct 21 2009, 23:54) *
значит все-таки с постобработкой.
Постобработки или блочный фильтр означает, что значения сначала записываются в массив, а потом с ними что-либо делают. Предобработка или скользящая фильтрация подразумевают наоборот, сначала новое значение как-либо обрабатывается и только потом записывается (или не записывается) в массив.
Цитата(Sneg_87 @ Oct 21 2009, 23:54) *
С начального момента в пустой массив, размер которого не меняется, записываются данные, а старое значенеи заменяется новым.

Цитата(Sneg_87 @ Oct 21 2009, 23:54) *
потому как нужны не значения конктретно из массива, а вообще со старта оцифровки.
Дык зачем писать в массив, если содержимое его не нужно? Храните два значения (минимум и максимум) и соответственно два номера отсчета. Итого всего четыре переменных.

Цитата(Sneg_87 @ Oct 22 2009, 00:09) *
если без сохранения предыдущих значений сигнала, то сложно сказать помеха или максимум.
Как соотносится предполагаемая длительность помехи с периодом оцифровки сигнала? И что предполагается делать с помехой? Выбрасывать эти значения или как-либо сглаживать?
Sneg_87
Цитата(rezident @ Oct 22 2009, 00:12) *
Дык зачем писать в массив, если содержимое его не нужно? Храните два значения (минимум и максимум) и соответственно два номера отсчета. Итого всего четыре переменных.

Как соотносится предполагаемая длительность помехи с периодом оцифровки сигнала? И что предполагается делать с помехой? Выбрасывать эти значения или как-либо сглаживать?

В принципе массив не нужен, если отфильтровывать помехи, используя скользящую фильтрацию ( to rezident Отдельное спасибо за объяснение терминологии)
Такс, а по помехам сложно конкретно ответить на вопрос (из-за отсутствия осциллограм или чего-то где их можно было увидеть). Мне в задании написали что мол защиту (фильтрацию) сделать от импульсных помех и от помехи, которую в спектре сигнала видно на частоте 200Гц.
Частота тактирования МК 50кГц, частота сигнала до 6,5кГц. Видимо длительность помехи вносит вклад т.к. если было бы наоборот о имп помехе никто бы и не сказал 05.gif
rezident
Цитата(Sneg_87 @ Oct 22 2009, 00:32) *
В принципе массив не нужен, если отфильтровывать помехи, используя скользящую фильтрацию
Вы опять что-то не поняли sad.gif Скользящая фильтрация (если вы имеете в виду SMA - простое скользящее среднее) это такой способ усреднения с постобработкой и необходимостью обязательно иметь буфер отсчетов. Каждое новое значение поступает в буфер, вытесняя самое старое. Затем считается среднее значение (сумма отсчетов деленная на количество отсчетов) и результатом фильтрации является как раз это среднее. Но тут есть один нюанс, который может облегчить вычисления. Если в качестве отсчетов используются целые числа, то не обязательно каждый раз считать сумму всех отсчетов. Достаточно хранить эту сумму в отдельной переменной и при вычислении среднего вычитать из нее старое (выбывающее) значение и добавлять новое значение, а затем делить на количество отсчетов. Для чисел в плавающем формате такой способ не подходит, т.к. очень быстро накапливаются ошибки округления в сумме отсчетов.
Цитата(Sneg_87 @ Oct 22 2009, 00:32) *
Частота тактирования МК 50кГц, частота сигнала до 6,5кГц. Видимо длительность помехи вносит вклад т.к. если было бы наоборот о имп помехе никто бы и не сказал 05.gif
Дык в том и вопрос: какова длительность помехи?
Sneg_87
Цитата(rezident @ Oct 22 2009, 00:48) *
Для чисел в плавающем формате такой способ не подходит, т.к. очень быстро накапливаются ошибки округления в сумме отсчетов.

Тип данных с плавающей запятой для данных с АЦП.
Цитата(rezident @ Oct 22 2009, 00:48) *
Дык в том и вопрос: какова длительность помехи?

Частота дискретизации 50кГц, значит длительность одного измерения ~ 20мкс и помехи в том числе (еслия правильно все понимаю smile.gif )

Сигнал может быль не очень идеальный (П-помеха импульсная, С-чистый сигнал), поэтому возможны следующие ситуации:
СССПСПСПССС
ССППССССССС
rezident
Цитата(Sneg_87 @ Oct 22 2009, 09:34) *
Тип данных с плавающей запятой для данных с АЦП.
Не понял. Что за АЦП, которое выдает данные в формате с плавающей точкой? 07.gif
Цитата(Sneg_87 @ Oct 22 2009, 09:34) *
Частота дискретизации 50кГц, значит длительность одного измерения ~ 20мкс и помехи в том числе (еслия правильно все понимаю smile.gif )
Блин! Да отвяжитесь вы от отсчетов вообще! В микро- или миллисекундах сколько? Ну или по-другому. Какие именно помехи фильтровать нужно? Сетевую наводку? Микросекундные помехи? Радиочастотные помехи?
ukpyr
бинарный поиск ?
Sneg_87
Цитата(rezident @ Oct 22 2009, 17:42) *
Не понял. Что за АЦП, которое выдает данные в формате с плавающей точкой? 07.gif

Да, соглашусь - чего то я попутал. Целочисленные же все значения smile.gif
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.