Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > Мультимедиа
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

 
 
Опции темы Поиск в этой теме Опции просмотра
  #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));

Последний раз редактировалось Dmitry_DM, 22.09.2012 в 17:25.
Ответить с цитированием
 


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

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

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 06:43.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter