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

Цитата:
Сообщение от Dmitry_DM
Хм.. Да, вы правы. так будет для всех случаев. А что на счет формул?
Вроде правильно вычисляется. Только немного сбивает с толку странное переименование переменных (т.е. то что m3 это m2, m2(3/2) это m1, m2(в квадрате) это m3, ...).
И ещё я это всё сократил бы примерно так:
Код:
var
  Sample, s: LongInt;
  NumSamples, I, J, N: LongWord;
  Xch, S1, S2, M1, M2, M3, M4, A, E: Extended;
....
begin
....
  N := NumSamples * WavInfo.WaveFormat.nChannels; // Общее количество сэмплов

  Xch := 0;
  for I := 1 to NumSamples do
  begin
    for J := 1 to WavInfo.WaveFormat.nChannels do
    begin
      Xch := Xch + WavInfo.Samples[J - 1, I - 1];
    end;
  end;
  Xch := Xch / N; // Среднее арифметическое всех сэмплов

  M2 := 0;
  M3 := 0;
  M4 := 0;
  for I := 1 to NumSamples do
  begin
    for J := 1 to WavInfo.WaveFormat.nChannels do
    begin
      S1 := WavInfo.Samples[J - 1, I - 1] - Xch; // Отклонение от среднеарифметического
      S2 := Sqr(S1); // Квадрат отклонения от среднеарифметического
      M2 := M2 + S2; // Сумма квадратов
      M3 := M3 + S1 * S2; // Сумма кубов
      M4 := M4 + Sqr(S2); // Сумма 4 степени
    end;
  end;
  M2 := M2 / N;
  M3 := M3 / N;
  M4 := M4 / N;

  E := M4 / Sqr(M2);
  A := M3 / Sqrt(M2 * M2 * M2);
....
end;
Здесь переменные M2, M3, M4 получили своё оригинальное значение (т.е. как в формулах) и отсутствует кусок кода выводящий сэмплы в файл, так как он не имеет отношения к вычислениям формул.
Ответить с цитированием