Показать сообщение отдельно
  #20  
Старый 28.09.2012, 11:00
Dmitry_DM Dmitry_DM вне форума
Активный
 
Регистрация: 07.08.2012
Сообщения: 258
Версия Delphi: Delphi 7
Репутация: 11
По умолчанию

Цитата:
Сообщение от poli-smen
А какой смысл вводить посредника в виде массива z?
  1. Программа уже загрузила сэмплы звукового файла в массив WavInfo.Samples, а теперь мы их ещё копируем в массив z - получаем как минимум двойной расход памяти на пустом месте
  2. Первая размерность массива отвечает за количество каналов. Зачем здесь зарезервировано столько каналов? Бывает "моно" (1 канал), бывает "стерео" (2 канала), бывает ещё "4+1", "5+1", ну пусть 10 каналов, но десять тысяч это уже что-то невероятное - получаем ещё бесполезный перерасход памяти
  3. Вторая размерность массива отвечает за количество сэмплов. В массиве z зарезервировано память всего под десять тысяч семплов, а ведь недавно ты открывал звуковой файл в котором было 398592 сэмплов - в этот массив он никак не влезет
  4. Почему тип элементов массива z выбран Int64? Звуковые файлы в формате WAVEFORMATEX PCM бывают либо 8-битные (1 байт), либо 16-битные (2 байта), а массив z резервирует для них по 64 бита (8 байт) - опять бесполезный перерасход памяти
И ещё, где инициализируется переменная J вот в этом цикле?:
Код:
    for I := 1 to NumSamples do
      begin
        s:=(s+z[j,i]);
      end;
Да и в следующих циклах тоже?
Я так и думал, что так не правильно. А тем способом, что вы писали, он компилируется успешно, но возникает ошибка доступа (access violation).

А вот так работает! Я думаю, так правильнее всего. Как вы считаете? И хочу отметить, что при расчетах асимметрия должна быть близко к 0, у меня -0,4(Ну ладно, такое отклонение реальное, но не "-" же), а эксцесс должен быть близко к 3, но у меня 28,7(Это вообще как понимать??) Вот вроде бы успешный код, при
Код:
  Sample, s: LongInt;
  NumSamples: LongWord;
  Xch, S2, M1, M2, M3, M4, A, E: Extended;
:
Код:
      
      Sample := 0;
      S:=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 := ShortInt(Sample);
            2: Sample := SmallInt(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;
    WavInfo.NumSamples := LongInt(NumSamples);
    end;
          sl.SaveToFile('Samples.txt');
         SL.Free;

   for I := 1 to NumSamples do
      begin
        for J := 1 to WavInfo.WaveFormat.nChannels do
       begin
        Sample := WavInfo.Samples[J - 1, I - 1];
        s:=(s+Sample);
       end;
      end;
    Xch:=S/NumSamples;
//
    S2:=0;
      for I := 1 to NumSamples do
    begin
        for J := 1 to WavInfo.WaveFormat.nChannels do
      begin
    Sample := WavInfo.Samples[J - 1, I - 1];
    S2:=s2+Sqr(Sample-Xch);
      end;
     end;
     M1:=Sqrt((s2/NumSamples)*(s2/NumSamples)*(s2/NumSamples));
//

    S2:=0;
      for I := 1 to NumSamples do
    begin
        for J := 1 to WavInfo.WaveFormat.nChannels do
      begin
    Sample := WavInfo.Samples[J - 1, I - 1];
    S2:=s2+(Sample-Xch)*(Sample-Xch)*(Sample-Xch);
      end;
    end;
     M2:=(s2/NumSamples);
//
    S2:=0;
      for I := 1 to NumSamples do
    begin
        for J := 1 to WavInfo.WaveFormat.nChannels do
    begin
    Sample := WavInfo.Samples[J - 1, I - 1];
    S2:=s2+sqr(Sample-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
    Sample := WavInfo.Samples[J - 1, I - 1];
    S2:=s2+sqr(Sqr(Sample-Xch));
     end;
    end;
    M4:=(s2/NumSamples);
    A:=M2/m1;
    E:=m4/m3;
Но не может же быть:
Код:
S: -294637033
Xch: -739,194547306519
M1: 12680979913,2141
M2: -6053863801,8443
M3: 29571300156300,5
M4: 849049452165860
Asymmetry: -0,477397160414704
Excess: 28,7119419057725
MaxAmplitude: 24927
BytsPerSample: 2
NumSamples: 398592
Ниже txt с выведенными сэмплами.
Вложения
Тип файла: rar Samples.rar (731.0 Кбайт, 2 просмотров)
Ответить с цитированием