首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >手动绘制图表的频率不正确

手动绘制图表的频率不正确
EN

Stack Overflow用户
提问于 2018-05-13 20:38:31
回答 1查看 23关注 0票数 0

我目前正在为大学的android编写一个频谱分析仪,其中一部分涉及绘制声音的FFT。然而,我在绘制频率图时遇到了一个问题。频率值一开始是正确的,但随着我移动到更高的频率,误差变得越来越大(在3000 The时,曲线图将显示~3750)。我觉得我计算x轴或频率值的方式好像有误。这是一个手动绘制的图表,用于提高速度。

如果需要更多的信息/代码,请让我知道,但我猜这是我忽略的一些简单的东西。谢谢

xVal是频率值。而比例值是根据真实的图形尺寸对其进行缩放。

代码语言:javascript
复制
    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;
            }
        }
    }

Freq generator set to 4000 Hz

Freq generator set to 1000 Hz (value is 1250Hz)

EN

回答 1

Stack Overflow用户

发布于 2018-05-13 21:18:19

找到问题所在。它在刮水器里。

代码语言:javascript
复制
    ValueScaler scaleY = new ValueScaler(0,maxAmpPlus1 - yAxisMargin,0,baseY);
    ValueScaler scaleX = new ValueScaler(0,maxFreqPlus1 - xAxisMargin,0,baseX);

在缩放数字时,我没有考虑x和y的差值。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50316206

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档