Цитата:
Сообщение от 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
|