Показать сообщение отдельно
  #13  
Старый 25.09.2012, 16:24
Аватар для poli-smen
poli-smen poli-smen вне форума
Профессионал
 
Регистрация: 06.08.2012
Адрес: Кривой Рог
Сообщения: 1,791
Версия Delphi: Delphi 7, XE2
Репутация: 4415
По умолчанию

Цитата:
Сообщение от Dmitry_DM
Здравствуйте! Столкнулся с проблемой. Надо вычислить асимметрию и эксцесс по сэмплам wav файла. Я точно не знаю правильно ли оно считается, потому что возникли непонятки с сэмплами и Max Amplitude.
Очень сильно сомневаюсь, что этот код действительно вычисляет "асимметрию и эксцесс по сэмплам wav файла". Почему? Потому-что единственное что участвует в вычислениях это NumSamples (количество сэмплов), а сами сэмплы нигде не участвуют.

Ну ладно. Теперь комментарии по коду:
Цитата:
Сообщение от Dmitry_DM
Код:
for Sample := 1 to NumSamples do
  begin
    s:=s+Sample;
  end;
Во-первых где инициализация переменной s?
Во-вторых зачем в цикле складывать числа от 1 до NumSamples если для этого есть формула суммы арифметической прогрессии: , благодаря которой этот кусок кода превращается в такой:
Код:
s := s + (NumSamples + 1) * NumSamples div 2;

А следующие 4 цикла можно объединить в один:
Код:
  M1 := 0;
  M2 := 0;
  M4 := 0;
  for Sample := 1 to NumSamples do
  begin
    S2 := Sample - Xch;
    M3 := Sqr(S2);

    M1 := M1 + M3;
    M2 := M2 + M3 * S2;
    M4 := M4 + Sqr(M3);
  end;

  S2 := M1 / NumSamples;
  M1 := S2 * S2 * S2;
  M2 := M2 / NumSamples;
  M3 := Sqr(S2); 
  M4 := M4 / NumSamples; 
Этот код я проверил - выдаёт тот же результат, что и твой
Например при NumSamples:=12345 и твой и мой код выводят:
Цитата:
S: 76205685
Xch: 6173
M1: 45258630618,8337
M2: 0
M3: 161287934139948
M4: 290318278911923
Asymmetry: 0
Excess: 1,79999998425187
Ответить с цитированием