2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




 
 Кривые(вариации) Аллана
Сообщение22.10.2013, 15:19 
Аватара пользователя
Доброго времени суток, уважаемые форумчане!
Довольно долго занимаюсь вопросом построения кривых аллана. Узнал, что, оказывается, эти кривые бывают совсем различные(в программе AlaVAR их вида 4, я же когда строил эти вариации, получил совсем другой результат) Подскажите, как правильно вычислять эти вариации?
Делаю так:
Код:

function AllanVariance(const Data: array of Single): Extended;
var
  I: Integer;
begin
  Result := 0.0;
  for I := Low(Data) to High(Data)-1 do
    Result:= Result + sqr(Data[I+1] - Data[I]);
  Result:=Result/(2 * (High(Data) - Low(Data))); 
end;

function AllanDev(const a: array of Single): Extended;
begin
  Result := Sqrt(AllanVariance(a))
end;

procedure sredn_2x; // усреднение пар чисел
var x1,x2:integer;
    c:Extended;
begin
  x2:=0; c:=0;
    if length(res)<>0 then
    begin
      for x1:=1 to length(res) do
        begin
          c:=c+res[x1-1];
          if x1 mod 2 = 0 then
          begin
            res[x2]:=c/2;
            x2:=x2+1;
            c:=0;
          end;
        end;
      x2:=0;
      setlength(res,length(res) div 2);
    end;
end;

procedure usredn(const N: integer); // усреднение в массиве каждых N чисел
var x1,x2:integer;
    c:Extended;
begin
  x2:=0; c:=0;
    if length(kans)<>0 then
    begin
      setlength(res,length(kans) div N);
      for x1:=1 to length(kans) do
        begin
          c:=c+kans[x1-1];
          if x1 mod N = 0 then
          begin
            res[x2]:=c/N;
            x2:=x2+1;
            c:=0;
          end;
        end;
      x2:=0;
    end;
end;

Расчет:

var i:integer;
    sps,smin:extended;
begin
  smin:=maxint;
  With Form1 do
  begin
    l:=round(int(log2(length(kans))));
    KansGrid.Hide;
    KansGrid.RowCount:=l;
    if length(ala[0])<l then setlength(ala,2,l+1);
    i2:=0;
    ala[0,0]:=0;
    While i2<l do
    begin
      begin
        if i2=0 then        begin sps:=int(StdDev(kans)*sqrt(midd/(3600*Np))*10000)/10000; ala[1,i2]:=int(AllanDev(kans)*1000)/1000 end else
                            begin sps:=int(StdDev(res)*sqrt(midd/(3600*Np))*10000)/10000; ala[1,i2]:=int(AllanDev(res)*1000)/1000 end;
        if ala[1,i2]<smin then begin Calcgrid.Cells[1,3]:=floattostr(sps); smin:=ala[1,i2]; end; // запоминаем минимальное значение вариации
        Kansgrid.Cells[1,i2]:=floattostr(ala[1,i2]); // записываем очередную точку
      end;
      if i2=0 then                     // усреднение с шагом степени двойки:
      usredn(2) else                   // первая точка - подготавливаем для быстрого усреднения пар
      sredn_2x;                        // все последующие точки
      i2:=i2+1;
      ala[0,i2]:=intpower(2,i2);
      KansGrid.Show; // показываем таблицу значений вариаций
    end;
  end;
end;

 
 
 
 Re: Кривые(вариации) Аллана
Сообщение28.10.2013, 09:36 
Аватара пользователя
АП

 
 
 
 Re: Кривые(вариации) Аллана
Сообщение01.11.2013, 08:58 
Аватара пользователя
Никто ничего даже не подскажет? тут же вроде море специалистов! Подскажите, где хоть найти компетентного в данном вопросе )

 
 
 
 Re: Кривые(вариации) Аллана
Сообщение02.11.2013, 03:32 
Daemvil в сообщении #783093 писал(а):
Никто ничего даже не подскажет? тут же вроде море специалистов!

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

2. Вопрос, который Вы задали, наверняка очень важен для Вас. Но вопрос этот - очень специальный. А задали Вы его так, как будто обращаетесь к коллеге за соседним рабочим столом.

3. Что значит "Подскажите, как правильно вычислять..."? Отладить Вашу программу? Написать Вам программу?

4. Погуглите "allan variance", "allan deviation". А еще лучше - "allan variance example code".

 
 
 
 Re: Кривые(вариации) Аллана
Сообщение05.11.2013, 09:11 
Аватара пользователя
Yuri Gendelman в сообщении #783496 писал(а):
1. Вам здесь никто ничем не обязан. Подтверждать свой профессиональный статус ответом на Ваш вопрос никому не интересно.

2. Вопрос, который Вы задали, наверняка очень важен для Вас. Но вопрос этот - очень специальный. А задали Вы его так, как будто обращаетесь к коллеге за соседним рабочим столом.

3. Что значит "Подскажите, как правильно вычислять..."? Отладить Вашу программу? Написать Вам программу?

4. Погуглите "allan variance", "allan deviation". А еще лучше - "allan variance example code".

1. Ничего не требую, просто досадно :oops:
2. Непонятно задаю вопрос? Извините. Где пояснить, чтобы мой вопрос был понят?
3. Вопрос именно в том, "как правильно вычислять". Возможно, найдете где-то в расчетах ошибку, я допускаю это, но сам перепроверял расчеты раз 20. Вопрос в методиках, т.к. существует, похоже, несколько способов их вычисления, дающих разные результаты. И я бы хотел, чтобы мне помогли разобраться в сути. Все делают по-разному, у всех разные результаты, однако называют одним и тем же. Согласитесь, что должен быть единственно верный расчет для одного термина. Мой расчет делался по формулам, которые расписаны в интернете, взяты из математических формул.
4. Опять же, задаю вопрос не просто так, в интернете конечно же искал. Есть какие-то свои применённые формулы, без пояснений, что откуда берется. Где-то даже математика совпадает, но алгоритмы вычисления различны и дают разный результат! (пример - в программе Alavar считаются различные кривые, но ни одна из них не совпадает с моими результатами)

 
 
 
 Re: Кривые(вариации) Аллана
Сообщение05.11.2013, 09:33 
Аватара пользователя
Daemvil в сообщении #781186 писал(а):
АП
Daemvil в сообщении #783093 писал(а):
Никто ничего даже не подскажет?
 !  Daemvil, замечание за искусственный подъем темы бессодержательными сообщениями.

 
 
 
 Re: Кривые(вариации) Аллана
Сообщение05.11.2013, 21:28 
Daemvil в сообщении #784906 писал(а):
3. Вопрос именно в том, "как правильно вычислять". Возможно, найдете где-то в расчетах ошибку,...
1. Вы привели текст Вашей программы и говорите, что она считает "не так". Предположим, кто-то хочет Вам помочь. Как по-Вашему он может это сделать?
2. Я уже советовал Вам погуглить "allan variance example code". Первая же ссылка дает пример с кодом на с++ и исходными данными в формате .gnumeric. Вы можете сравнить вычисления с Вашими.

 
 
 
 Re: Кривые(вариации) Аллана
Сообщение29.11.2013, 18:41 
Аватара пользователя
Yuri Gendelman в сообщении #785335 писал(а):
1. Вы привели текст Вашей программы и говорите, что она считает "не так". Предположим, кто-то хочет Вам помочь. Как по-Вашему он может это сделать?
2. Я уже советовал Вам погуглить "allan variance example code". Первая же ссылка дает пример с кодом на с++ и исходными данными в формате .gnumeric. Вы можете сравнить вычисления с Вашими.

Ну прочитайте же наконец вопрос целиком.... :facepalm:

 
 
 [ Сообщений: 8 ] 


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group