|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Сэмплы, асимметрия и эксцесс
Здравствуйте! Столкнулся с проблемой. Надо вычислить асимметрию и эксцесс по сэмплам wav файла. Я точно не знаю правильно ли оно считается, потому что возникли непонятки с сэмплами и Max Amplitude. Я вывожу все сэмплы в txt файл и вижу, например следующее:
Код:
65529 {Я считаю, это не настоящие значение} 9 {А вот такое - нормальное} 65525 15 {Ну и такое - нормальное} 65510 78 {И такое} 50 65514 13 65521 65528 65504 65506 Вот код этого всего дела. 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. |