Форум по 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 файл и вижу, например следующее:
Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
65529 {Я считаю, это не настоящие значение}
9 {А вот такое - нормальное}
65525
15 {Ну и такое - нормальное}
65510
78 {И такое}
50
65514
13
65521
65528
65504
65506
В общем понятно. Из-за этого постоянно Max Amplitude = 65535. И так с любым файлом. Этого же не может быть, верно? Так вот что здесь не так, помогите! Следовательно и формулы не правильно вычисляют.
Вот код этого всего дела.
P.S Выводы в memo сделал просто для наглядности.
Код:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
  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.
Ответить с цитированием
 


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

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

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

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


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


 

Сайт

Форум

FAQ

Соглашения

Прочее

 

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