Результаты ошибок : получить БПФ от микрофона
привет, так что мне нужно получить частоту от микрофона в android-устройстве .. на большинстве частот я получаю правильные результаты, но на некоторых частотах я получаю половину частоты или частоты *1.5 .. пример, если реальная частота равна 200, то несколько раз я получаю 100, а несколько раз 300
это мой код
enter code here async Task voicein() { int intsizee = AudioRecord.GetMinBufferSize(11025, ChannelIn.Mono, Android.Media.Encoding.Pcm16bit); recorder = new AudioRecord(AudioSource.Mic,11025, ChannelIn.Mono, Android.Media.Encoding.Pcm16bit, intsizee); recorder.StartRecording(); short[] buffer3 = new short[(256*64)]; while (true) { // start recording int count = await recorder.ReadAsync(buffer3, 0, buffer3.Length); System.Numerics.Complex[] x = new System.Numerics.Complex[buffer3.Length]; int i = 0; // put short buffer3 in complex array foreach (short n in buffer3) { x[i] = new System.Numerics.Complex(n , 0.0); i++; } int a = 0; int index = 0; int temp = 0; // fourier transformation using MathNet librrary Fourier.BluesteinForward(x, FourierOptions.Matlab); // gave me the largest value foreach (System.Numerics.Complex c in x) { if (c.Magnitude >(int) a ) { a = (int)c.Magnitude; index = temp; } temp++; } // and thats should be the last frequency int lastfrequency = Convert.ToInt32 ( 11025- index * 0.6729); if ((11024 - index) > (11025 / 2)) lastfrequency = Convert.ToInt32( index * 0.6729); RunOnUiThread(() => button.Text = lastfrequency + ":" + index); } }
Я использую xamarin android его почти такая же java так что любой знает что там происходит спасибо
Примечание: метод FFT работает нормально, я проверил результат, используя чистый синусоидальный сигнал, и результаты идеальны, проблема появляется только тогда, когда я использую микрофон .
Что я уже пробовал:
изменение алгоритма БПФ, изменение частоты дискретизации и размера буфера