|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Значения случайной величины, интервалы
Здравствуйте. Вот уже несколько дней ломаю голову над поставленной задачей. В общем: есть значения случайной величины - сэмплы из wav файла. Надо подсчитывать кол-во значений случайной величины, которые попадают в j-ый интервал (N[j]).
Nj - абсолютная частота для j-го интервала; j - номер интервала, j меняется от 1 до m; m - кол-во интервалов; Считается m так: Код:
m:=trunc(3.3*log10(NumSamples)+1); Считается delX так: Код:
delX:=NumSamples / m; NumSamples - кол-во значений случайной величины; С этим все ясно. Вернемся к задаче.. (выделена красным) Для этого надо создать цикл по i , которое изменять от 1 до NumSamples. В цикле проверять, в какой интервал попало i -е значение и при этом изменять соответствующий счетчик - абсолютную частоту. Вот такой у меня цикл для всех операций с сэмплами: Код:
for I := 1 to NumSamples do begin for J := 1 to WavInfo.WaveFormat.nChannels do // так как бывает 2 канала. begin ////////////////////////Здесь все происходит end; end; Но пока Yj отложим на потом. И на этом я застрял. Не знаю как это все осмыслить и как должно считаться. Как найти Nj??? Еще добавлю, что Nj по количеству должно быть столько же, сколько и m. Пока все. Надеюсь на вашу помощь. Заранее благодарен! Для меня это очень важно.. |
#2
|
||||
|
||||
Цитата:
Цитата:
|
#3
|
|||
|
|||
Цитата:
Можно как-то сделать пример и посмотреть что вышло? И еще - Nj должны быть ТОЛЬКО положительного значения. И их кол-во равняться кол m столбиков. Цитата:
Ниже мой юнит, весь проект нету смысла выкладывать. |
#4
|
||||
|
||||
Цитата:
Цитата:
|
#5
|
|||
|
|||
Цитата:
|
#6
|
|||
|
|||
Ну что, poli-smen, есть идеи?
|
#7
|
|||
|
|||
poli-smen, теперь я все понял как должно быть. Но не знаю как это посчитать, как раз с этим прошу помощи.
Короче так: опишу на примере, так понятнее. Есть 1079 сэмплов, они разбиты на 11 интервалов m. Каждый из 1079 сэмплов имеет свою амплитуду, например Код:
-0,00266193433895297 0,00443655723158829 -0,00798580301685892 0,0164152617568767 -0,163265306122449 -0,131322094055013 0,91659272404614 Код:
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] - нормированные сэмплы (поделены на макс амплитуду) Последний раз редактировалось Dmitry_DM, 21.12.2012 в 19:52. |