Показать сообщение отдельно
  #1  
Старый 22.09.2012, 17:18
Dmitry_DM Dmitry_DM вне форума
Активный
 
Регистрация: 07.08.2012
Сообщения: 258
Версия Delphi: Delphi 7
Репутация: 11
По умолчанию Сэмплы, асимметрия и эксцесс

Здравствуйте! Столкнулся с проблемой. Надо вычислить асимметрию и эксцесс по сэмплам wav файла. Я точно не знаю правильно ли оно считается, потому что возникли непонятки с сэмплами и Max Amplitude. Я вывожу все сэмплы в txt файл и вижу, например следующее:
Код:
65529 {Я считаю, это не настоящие значение}
9 {А вот такое - нормальное}
65525
15 {Ну и такое - нормальное}
65510
78 {И такое}
50
65514
13
65521
65528
65504
65506
В общем понятно. Из-за этого постоянно Max Amplitude = 65535. И так с любым файлом. Этого же не может быть, верно? Так вот что здесь не так, помогите! Следовательно и формулы не правильно вычисляют.
Вот код этого всего дела.
P.S Выводы в memo сделал просто для наглядности.
Код:
      Sample := 0;
      Sl:=tStringlist.Create;
      for I := 1 to NumSamples do
      begin
        for J := 1 to WavInfo.WaveFormat.nChannels do
        begin
          fs.ReadBuffer(Sample, BytsPerSample);
         case BytsPerSample of
            1: Sample := Int64(Sample);
            2: Sample := Int64(Sample);
          end;
      WavInfo.Samples[J - 1, I - 1] := Sample;
      if Abs(Sample) > WavInfo.MaxAmplitude then WavInfo.MaxAmplitude := Abs(Sample);

         sl.Add(IntToStr(Sample));

        end;
      end;
      sl.SaveToFile('Samples.txt');
         SL.Free;
    WavInfo.NumSamples := LongInt(NumSamples);
    end;

    for Sample := 1 to NumSamples do
      begin
        s:=s+Sample;
      end;
    Xch:=S/NumSamples;

    S2:=0;
    for Sample := 1 to NumSamples do
    begin
    S2:=s2+Sqr(Sample-Xch);
    end;
    M1:=Sqrt((s2/NumSamples)*(s2/NumSamples)*(s2/NumSamples));
      {Form1.Memo3.Lines.Add('S2(1): '+FloatToStr(s2));  }
    S2:=0;
    for Sample := 1 to NumSamples do
    begin
    S2:=s2+(Sample-Xch)*(Sample-Xch)*(Sample-Xch);
    end;
    M2:=(s2/NumSamples);
      {Form1.Memo3.Lines.Add('S2(2): '+FloatToStr(s2)); }
    S2:=0;
    for Sample := 1 to NumSamples do
    begin
    S2:=s2+sqr(Sample-Xch);
    end;
    M3:=Sqr(s2/NumSamples);
      {Form1.Memo3.Lines.Add('S2(3): '+FloatToStr(s2)); }
    S2:=0;
    for Sample := 1 to NumSamples do
    begin
    S2:=s2+sqr(Sqr(Sample-Xch));
    end;
    M4:=(s2/NumSamples);
      {Form1.Memo3.Lines.Add('S2(4): '+FloatToStr(s2));  }
    A:=M2/m1;
    E:=m4/m3;

    Form1.Memo3.Lines.Add('S: '+intToStr(s));
    Form1.Memo3.Lines.Add('Xch: '+FloatToStr(Xch));
    Form1.Memo3.Lines.Add('M1: '+FloatToStr(m1));
    Form1.Memo3.Lines.Add('M2: '+FloatToStr(m2));
    Form1.Memo3.Lines.Add('M3: '+FloatToStr(m3));
    Form1.Memo3.Lines.Add('M4: '+FloatToStr(m4));
     Form1.Memo3.Lines.Add('Asymmetry: '+FloatToStr(A));
     Form1.Memo3.Lines.Add('Excess: '+FloatToStr(E));
    Form1.Memo3.Lines.Add('MaxAmplitude: ' + IntToStr(WavInfo.MaxAmplitude));
Ответить с цитированием