Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Синтаксис
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 28.12.2009, 09:26
Аватар для student2009
student2009 student2009 вне форума
Прохожий
 
Регистрация: 27.10.2009
Сообщения: 5
Репутация: 10
Восклицание массив

Здрасьте! Уже сломал всю голову над следующей задачей.
На вход функции подается большой массив, состоящий из значений, достаточно близких к нулю(0), и значений больше наперед заданного числа(1). Получается вроде логической последовательности: ...000000111000000111... На выходе должно быть расстояние между группами единиц и их счетчик. Такая задача необходима для обработки входных данных с АЦП, подключенного к датчику Холла, поэтому алгоритм должен быть достаточно быстрым.
Ответить с цитированием
  #2  
Старый 28.12.2009, 10:05
Аватар для NIch
NIch NIch вне форума
Продвинутый
 
Регистрация: 02.06.2008
Адрес: Бендеры ПМР
Сообщения: 754
Репутация: 2446
По умолчанию

Задача не тривиальная...ИМХО...
Для начала давай определимся в каком виде должны быть выходные данные...Ведь промежутков много, а количество одно...т.е. в данных вида
001110000111000111
1-ый промежуток = 2
2-ой промежуток = 4
3-ий промежуток = 3
Количество 3
Счетчики групп и промежутков, должны быть в разных функциях...
Или чтобы программа понимала, последовательность вида 2-4-3-3 где первые числа, это промежутки, а последнее число количество групп...
__________________
В начале был Бит, потом Байт и только потом появилось Слово...
Ответить с цитированием
  #3  
Старый 28.12.2009, 18:16
Аватар для student2009
student2009 student2009 вне форума
Прохожий
 
Регистрация: 27.10.2009
Сообщения: 5
Репутация: 10
По умолчанию

А если массив ну ооооочень большой (порядка 20 тысяч значений) и его надо обработать за примерно полсекунды? Не отразится ли прогон через 2 цикла на скорости? Я пытался сделать след. образом:

Код:
procedure holl(M: arr; Length: Integer; Rate: Double; var Freq: double; var Counter: integer;
                      var t0, t: integer; var NextKadr: boolean);
var i: integer;
begin
i:=0;
if HiLevel(M[i], 3.0)=true then
if NextKadr=true then
begin
        repeat
                inc(i);
        until HiLevel(M[i], 3.0)=false;
        t0:=t;
        t:=i;
        Freq:=60*1000*Rate/abs(Length-t0+t);
        NextKadr:=false;
end;
repeat
        if HiLevel(M[i], 3.0)=true then
        begin
             repeat
                inc(i);
                if i=Length-1 then NextKadr:=true;
             until (HiLevel(M[i], 3.0)=false) or (NextKadr=true);
             if NextKadr=false then
             begin
                t0:=t;
                t:=i;
                inc(counter);
                Freq:=60*1000*Rate/abs(t-t0)
             end;
        end;
until i=Length;
end;

function HiLevel(Data, MAX: Double): boolean;
begin
        if abs(Data)>MAX then result:=true else result:=false;
end;
Проблема заключается еще и в том, что массивы надо обрабатывать один за другим и учитывать то, что единицы могут продолжаться в следующем массиве. Как при всем этом проследить, чтобы не посчитать один за два? Там такая ситуация возникает практически в каждом кадре и погрешность выйдет за все рамки. Хотя эта процедура вообще вешает программу так, что проц грузится на все 100% и выдает результат явно неправильный - очень много знаков до запятой! ЭТОГО БЫТЬ ТОЧНО НЕ ДОЛЖНО!!! Короче, то ли я дурак, то ли лыжи не едут

Последний раз редактировалось student2009, 28.12.2009 в 18:26.
Ответить с цитированием
  #4  
Старый 22.03.2010, 12:45
Аватар для student2009
student2009 student2009 вне форума
Прохожий
 
Регистрация: 27.10.2009
Сообщения: 5
Репутация: 10
По умолчанию

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


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 13:19.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter