![]()  | 
	
 
  | 
		
			
  | 	
	
	
		
		|||||||
| Регистрация | << Правила форума >> | 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.  |