Здравствуйте! Столкнулся с проблемой. Надо вычислить асимметрию и эксцесс по сэмплам 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));