2014 dxdy logo

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

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




Начать новую тему Ответить на тему
 
 Кривые(вариации) Аллана
Сообщение22.10.2013, 15:19 
Аватара пользователя


11/11/10
6
Доброго времени суток, уважаемые форумчане!
Довольно долго занимаюсь вопросом построения кривых аллана. Узнал, что, оказывается, эти кривые бывают совсем различные(в программе 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 
Аватара пользователя


11/11/10
6
АП

 Профиль  
                  
 
 Re: Кривые(вариации) Аллана
Сообщение01.11.2013, 08:58 
Аватара пользователя


11/11/10
6
Никто ничего даже не подскажет? тут же вроде море специалистов! Подскажите, где хоть найти компетентного в данном вопросе )

 Профиль  
                  
 
 Re: Кривые(вариации) Аллана
Сообщение02.11.2013, 03:32 
Заслуженный участник


15/05/05
3445
USA
Daemvil в сообщении #783093 писал(а):
Никто ничего даже не подскажет? тут же вроде море специалистов!

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

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

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

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

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


11/11/10
6
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 
Админ форума
Аватара пользователя


19/03/10
8952
Daemvil в сообщении #781186 писал(а):
АП
Daemvil в сообщении #783093 писал(а):
Никто ничего даже не подскажет?
 !  Daemvil, замечание за искусственный подъем темы бессодержательными сообщениями.

 Профиль  
                  
 
 Re: Кривые(вариации) Аллана
Сообщение05.11.2013, 21:28 
Заслуженный участник


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

 Профиль  
                  
 
 Re: Кривые(вариации) Аллана
Сообщение29.11.2013, 18:41 
Аватара пользователя


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

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

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 8 ] 

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group