我目前正在为大学的android编写一个频谱分析仪,其中一部分涉及绘制声音的FFT。然而,我在绘制频率图时遇到了一个问题。频率值一开始是正确的,但随着我移动到更高的频率,误差变得越来越大(在3000 The时,曲线图将显示~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;
}
}
}发布于 2018-05-13 21:18:19
找到问题所在。它在刮水器里。
ValueScaler scaleY = new ValueScaler(0,maxAmpPlus1 - yAxisMargin,0,baseY);
ValueScaler scaleX = new ValueScaler(0,maxFreqPlus1 - xAxisMargin,0,baseX);在缩放数字时,我没有考虑x和y的差值。
https://stackoverflow.com/questions/50316206
复制相似问题