А если массив ну ооооочень большой (порядка 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% и выдает результат явно неправильный - очень много знаков до запятой! ЭТОГО БЫТЬ ТОЧНО НЕ ДОЛЖНО!!! Короче, то ли я дурак, то ли лыжи не едут
