Обнаружение частоты ниже 40 Гц с помощью TarsosDSP java android

Я делаю мобильное приложение для Android, в котором пытаюсь определить шаг с помощью TarsosDSP. Который отлично работает, только если он больше 43 Гц. Но у меня есть требование заставить его работать с 40 Гц. Когда я воспроизвожу звук, он даже не дает результатов ниже 43. здесь Вы можете создать мелодию онлайн с нужной частотой. вот код.

void connectsAudioDispatchertoMicrophone() {

  AudioDispatcher dispatcher = AudioDispatcherFactory.fromDefaultMicrophone(22050, 1024, 0);

  PitchDetectionHandler pdh = new PitchDetectionHandler() {
     @Override
     public void handlePitch(final PitchDetectionResult result, AudioEvent e) {
        final float pitchInHz = result.getPitch();
        runOnUiThread(new Runnable() {
           @Override 
           public void run() {
              if (pitchInHz > 1)  
                 Log.d(TAG, "pitchInHz: " + pitchInHz);

           }
        });
     }
  };
  AudioProcessor p = new PitchProcessor(PitchProcessor.PitchEstimationAlgorithm.FFT_YIN,
          22050,
          1024,
          pdh);
  dispatcher.addAudioProcessor(p);

  thread = new Thread(dispatcher, "Audio Dispatcher");
  thread.start();
}

person Rohaitas Tanoli    schedule 03.02.2020    source источник


Ответы (1)


Это звучит как ограничение БПФ, которое Tarsos использует внутри. FFT разделяет обнаруженные звуки на один из нескольких частотных интервалов. Центральная частота каждого бина является функцией:

  • Частота дискретизации и:
  • Ширина (в выборках) БПФ.

Для частоты дискретизации 22050 Гц с шириной БПФ 1024 выборки:

Fмин = 22050/1024 * 2 = 43,066 Гц

(Fmin — это центральная частота второго самого нижнего бина. По-видимому, это самая низкая частота, которую может обнаружить алгоритм.)

Чтобы уменьшить Fmin, A.) уменьшите частоту дискретизации или B.) увеличьте ширину БПФ:

Fмин = 16000/1024 * 2 = 31,25 Гц

Fмин = 22050/2048 * 2 = 21,53 Гц

Обязательно придерживайтесь степеней двойки для ширины БПФ и утвержденных допустимых настроек для частоты дискретизации.

person greeble31    schedule 03.02.2020
comment
Я ПОЛУЧИЛ pitchInHz: 31.387342 С 16000 Спасибо..! - person Rohaitas Tanoli; 04.02.2020