В настоящее время я пишу анализатор спектра для Android для университета, и часть этого включает в себя построение БПФ звука. Однако у меня возникла проблема с отображением частот. Значения частоты начинаются правильно, но с переходом на более высокие частоты ошибка становится все больше и больше (при 3000 Гц график покажет ~ 3750). Я чувствую, что в способе вычисления значений оси X или частоты есть ошибка. Это нарисованный вручную график для скорости.
Если нужно больше информации / кода, просто дайте мне знать, но я думаю, что это что-то простое, что я упустил из виду. Спасибо
xVal - это значение частоты. а значение масштаба - масштабировать его в соответствии с реальными размерами графика.
int length = currentWaveDataDouble.length;
int pow2 = Integer.highestOneBit(length) << 1;
int sampleRate = 44100;
...
//actual plot part
for(int i =0; i<p2.length; i++) {
float xVal = (float)(i * scaleX.ScaleValue(((double) sampleRate / (pow2 >> 1))));
if (xVal < maxFreqPlus1) {
xVal += axisWidth + yAxisMargin;
float yVal = (float) scaleY.ScaleValue(p2[i]);
yVal += axisWidth + xAxisMargin;
canvas.drawPoint(xVal,yVal, marker);
if(yVal > yMax)
{
yMax = yVal;
xMax = xVal;
}
}
}
Генератор частоты установлен на 4000 Гц
Частотный генератор установлен на 1000 Гц (значение 1250 Гц)