poli-smen, теперь я все понял как должно быть. Но не знаю как это посчитать, как раз с этим прошу помощи.
Короче так: опишу на примере, так понятнее. Есть 1079 сэмплов, они разбиты на 11 интервалов m. Каждый из 1079 сэмплов имеет свою амплитуду, например
Код:
-0,00266193433895297
0,00443655723158829
-0,00798580301685892
0,0164152617568767
-0,163265306122449
-0,131322094055013
0,91659272404614
Так вот Nj - это сума амплитуд, именно для каждого интервала. Допустим:
Код:
N[1] = столько-то
N[2] = столько-то
N[3] = столько-то
...
N[m] = столько-то
Наконец-то я пришел к разгадке. Теперь помогите оформить цикл, пожалуйста!
Вот сам кусок кода, отвечающий за подсчеты.
Код:
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 := ShortInt(Sample);
2: Sample := SmallInt(Sample);
end;
WavInfo.Samples[J - 1, I - 1]:=Sample;
if Sample > WavInfo.MaxAmplitude then WavInfo.MaxAmplitude := Sample;
if Sample < WavInfo.MinAmplitude then WavInfo.MinAmplitude := Sample;
end; ////////
end;
WavInfo.NumSamples := LongInt(NumSamples);
for I := 1 to NumSamples do
for J := 1 to WavInfo.WaveFormat.nChannels do
begin
Samp1[j,i]:=WavInfo.Samples[J - 1, I - 1];
Samp2[j,i]:=WavInfo.Samples[J - 1, I - 1] / wavInfo.MaxAmplitude ;
if form1.chk1.Checked = False then
begin
Form1.Series1.Add(samp1[J , I ]) ;
sl.Add(FloatToStr(samp1[J , I ]));
end else
begin
Form1.Series1.Add(samp2[J , I ]) ;
sl.Add(FloatToStr(samp2[J , I ]));
end
end;
for I := 1 to NumSamples do
begin
for J := 1 to WavInfo.WaveFormat.nChannels do
begin
if form1.chk1.Checked = False then
s:=(s+Samp1[j,i])
else
s:=(s+Samp2[j,i]);
end;
end;
Xch := S / (NumSamples * WavInfo.WaveFormat.nChannels);
//
S2:=0;
for I := 1 to NumSamples do
begin
for J := 1 to WavInfo.WaveFormat.nChannels do
begin
if form1.chk1.Checked = False then
S2:=s2+Sqr(Samp1[j,i]-Xch)
else
S2:=s2+Sqr(Samp2[j,i]-Xch);
end;
end;
M1:=Sqrt( Sqr(s2/NumSamples)*(s2/NumSamples) );
//
S2:=0;
for I := 1 to NumSamples do
begin
for J := 1 to WavInfo.WaveFormat.nChannels do
begin
if form1.chk1.Checked = False then
S2:=s2+sqr(Samp1[j,i]-Xch)*(Samp1[j,i]-Xch)
else
S2:=s2+sqr(Samp2[j,i]-Xch)*(Samp2[j,i]-Xch);
end;
end;
M2:=(s2/NumSamples);
//
S2:=0;
for I := 1 to NumSamples do
begin
for J := 1 to WavInfo.WaveFormat.nChannels do
begin
if form1.chk1.Checked = False then
S2:=s2+sqr(Samp1[j,i]-Xch)
else
S2:=s2+sqr(Samp2[j,i]-Xch);
end;
end;
M3:=Sqr(s2/NumSamples);
//
S2:=0;
for I := 1 to NumSamples do
begin
for J := 1 to WavInfo.WaveFormat.nChannels do
begin
if form1.chk1.Checked = False then
S2:=s2+sqr(Sqr(Samp1[j,i]-Xch))
else
S2:=s2+sqr(Sqr(Samp2[j,i]-Xch));
end;
end;
M4:=(s2/NumSamples);
Asymmetry:=M2/m1;
Excess:=m4/m3;
for I := 1 to NumSamples do
begin
for J := 1 to WavInfo.WaveFormat.nChannels do
begin
if form1.chk1.Checked = True then
begin
WavInfo.MinAmplitude:=WavInfo.MinAmplitude/WavInfo.MaxAmplitude;
WavInfo.MaxAmplitude:=1;
end;
end;
end;
///////////////////////////////////
m:=trunc(3.3*log10(NumSamples)+1);
delX:=(WavInfo.MaxAmplitude - WavInfo.MinAmplitude) / m;
Скажу только, что
Samp1[j,i] - не нормированные сэмплы
Samp1[j,i] - нормированные сэмплы (поделены на макс амплитуду)