android - 最佳缓冲区大小

标签 android

使用 FFT 实现吉他调音器时,缓冲区大小的最佳值是多少?正在获取输出,但显示的值似乎没有我预期的那么准确。我认为这是我分配的缓冲区大小的问题。我使用 8000 作为缓冲区大小。是否有任何其他建议来检索更有效的结果?

最佳答案

您可以稍微调整一下结果。我完成 FFT 工作已经有一段时间了,但如果我记得,缓冲区为 8000,第 N 个桶将是 (8000/2)/N Hz(对吗?已经很久了)。所以第 79 到第 81 个桶是 50.63、50 和 49.38 Hz。

然后您可以使用稍微不同的桶数进行 FFT。因此,如果您减少到 6000 个桶,第 59 到第 61 个桶将是 50.84、50 和 49.18 Hz。

现在您已经获得了一种算法,您可以使用该算法返回特定频率。我认为是 O((log M) * (N log N)),其中 N 大致是您每次使用的桶数,M 是精度。

更新:示例拉伸(stretch)

public byte[] stretch(byte[] input, int newLength) {
  byte[] result = new byte[newLength];
  result[0] = input[0];

  for (int i = 1; i < newLength; i++) {
    float t = i * input.length / newLength;
    int j = (int) t;
    float d = t - j;

    result[i] = (byte) (input[j - 1] * d + input[j] * (1 - d))
  }

  return result;
}

您可能需要修复一些转换以确保获得正确的数字,但这看起来是正确的。

i = 结果中的索引[] j = input[] 中的索引(四舍五入) d = 要使用的输入 [j - 1] 的百分比 1 - d = 要使用的输入 [j] 的百分比

关于android - 最佳缓冲区大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9799467/

相关文章:

java - 如何将微调项目设置为等于某个值

android - 当sqlite数据库为空时如何在 Activity 中显示alertDialog

android - 我正在尝试为 android 本地服务器创建 https 自签名 keystore

android - 从 Html 标签中提取图像路径

android - 拨号应用程序中的暂停等待功能

Android 启动画面,不透明背景不起作用

android - 如何在android中实现延迟深度链接

android - 确定所选图像是否来自设备相机

android - 如何通过android从rails读取base64编码的图片

Android翻盖动画和ease up(翻书动画)