使用 FFT 计算频率时的错误值

2023-12-24

我得到了错误的频率,我不明白为什么我得到了错误的值。因为我已经按照 stackoverflow 后面的指令进行了计算。 我用过FFThttp://introcs.cs.princeton.edu/java/97data/FFT.java.html http://introcs.cs.princeton.edu/java/97data/FFT.java.html和复杂的http://introcs.cs.princeton.edu/java/97data/Complex.java.html http://introcs.cs.princeton.edu/java/97data/Complex.java.html

audioRec.startRecording();
audioRec.read(bufferByte, 0,bufferSize);
for(int i=0;i<bufferSize;i++){
    bufferDouble[i]=(double)bufferByte[i];    
    }
Complex[] fftArray = new Complex[bufferSize];
    for(int i=0;i<bufferSize;i++){
    fftArray[i]=new Complex(bufferDouble[i],0);
    }
    FFT.fft(fftArray);
double[] magnitude=new double[bufferSize];
for(int i=0;i<bufferSize;i++){
      magnitude[i] = Math.sqrt((fftArray[i].re()*fftArray[i].re()) + (fftArray[i].im()*fftArray[i].im()));
    }
double max = 0.0;
int index = -1;
for(int j=0;j<bufferSize;j++){
    if(max < magnitude[j]){
            max = magnitude[j];
        index = j;
        }
    }
    final int peak=index * sampleRate/bufferSize;
    Log.v(TAG2, "Peak Frequency = " + index * sampleRate/bufferSize);
    handler.post(new Runnable() {
            public void run() {
                textView.append("---"+peak+"---");
            }
        });

我得到的值如 21000,18976,40222,30283 等... 请帮我..... 谢谢..


你的源代码几乎没问题。唯一的问题是您要在整个光谱中搜索峰值,即从 0 通过 Fs/2 到 Fs。

对于任何实值输入信号(您拥有的),Fs/2 和 Fs(=采样频率)之间的频谱是 0 和 Fs/2 之间频谱的精确镜像(我发现这个很好的背景解释 https://dsp.stackexchange.com/a/4827)。因此,对于每个频率都存在两个峰值almost相同的幅度。我写“几乎”是因为由于机器精度有限,它们不一定exactly完全相同的。因此,您可以在包含低于奈奎斯特频率 (=Fs/2) 的频率的频谱前半部分或包含高于奈奎斯特频率的频率的频谱后半部分中随机找到峰值。

如果您想自己纠正错误,请停止阅读此处。否则继续:

只需更换

for(int j=0;j<bufferSize;j++){

with

for(int j=0;j<=bufferSize/2;j++){

在您提供的源代码中。

P.S.:通常,最好将窗函数应用于分析缓冲区(例如汉明窗),但对于峰值选取的应用,它不会对结果产生太大影响。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 FFT 计算频率时的错误值 的相关文章

  • 如何让 BlazeDS 忽略属性?

    我有一个 java 类 它有一个带有 getter 和 setter 的字段 以及第二对 getter 和 setter 它们以另一种方式访问 该字段 public class NullAbleId private static final
  • 在 Java 中克隆对象 [3 个问题]

    这样做会调用Asub的clone方法吗 或者Asub深度克隆是否正确 如果没有的话 有没有办法通过这种方法对Asub进行深度克隆呢 abstract class Top extends TopMost protected Object cl
  • 序列的排列?

    我有具体数量的数字 现在我想以某种方式显示这个序列的所有可能的排列 例如 如果数字数量为3 我想显示 0 0 0 0 0 1 0 0 2 0 1 0 0 1 1 0 1 2 0 2 0 0 2 1 0 2 2 1 0 0 1 0 1 1 0
  • 为什么 JTables 使 TableModel 在呈现时不可序列化?

    所以最近我正在开发一个工具 供我们配置某些应用程序 它不需要是什么真正令人敬畏的东西 只是一个具有一些 SQL 脚本生成功能并创建几个 XML 文件的基本工具 在此期间 我使用自己的 AbstractTableModel 实现创建了一系列
  • 使用 LinkedList 实现下一个和上一个按钮

    这可能是一个愚蠢的问题 但我很难思考清楚 我编写了一个使用 LinkedList 来移动加载的 MIDI 乐器的方法 我想制作一个下一个和一个上一个按钮 以便每次单击该按钮时都会遍历 LinkedList 如果我硬编码itr next or
  • 如何在java中将一个数组列表替换为另一个不同大小的数组列表

    我有两个大小不同的数组列表 如何从此替换 ArrayList
  • jQuery AJAX 调用 Java 方法

    使用 jQuery AJAX 我们可以调用特定的 JAVA 方法 例如从 Action 类 该 Java 方法返回的数据将用于填充一些 HTML 代码 请告诉我是否可以使用 jQuery 轻松完成此操作 就像在 DWR 中一样 此外 对于
  • 在接口中使用默认方法是否违反接口隔离原则?

    我正在学习 SOLID 原则 ISP 指出 客户端不应被迫依赖于他们所使用的接口 不使用 在接口中使用默认方法是否违反了这个原则 我见过类似的问题 但我在这里发布了一个示例 以便更清楚地了解我的示例是否违反了 ISP 假设我有这个例子 pu
  • 在 junit 测试中获取 javax.lang.model.element.Element 类

    我想测试我的实用程序类 ElementUtils 但我不知道如何将类作为元素获取 在 AnnotationProcessors 中 我使用以下代码获取元素 Set
  • 帮助将图像从 Servlet 获取到 JSP 页面 [重复]

    这个问题在这里已经有答案了 我目前必须生成一个显示字符串文本的图像 我需要在 Servlet 上制作此图像 然后以某种方式将图像传递到 JSP 页面 以便它可以显示它 我试图避免保存图像 而是以某种方式将图像流式传输到 JSP 自从我开始寻
  • Hibernate 的 PersistentSet 不使用 hashCode/equals 的自定义实现

    所以我有一本实体书 public class Book private String id private String name private String description private Image coverImage pr
  • Spring Boot Data JPA 从存储过程接收多个输出参数

    我尝试通过 Spring Boot Data JPA v2 2 6 调用具有多个输出参数的存储过程 但收到错误 DEBUG http nio 8080 exec 1 org hibernate engine jdbc spi SqlStat
  • tomcat 中受密码保护的应用程序

    我正在使用 JSP Servlet 开发一个Web应用程序 并且我使用了Tomcat 7 0 33 as a web container 所以我的要求是tomcat中的每个应用程序都会password像受保护的manager applica
  • 如何在谷歌地图android上显示多个标记

    我想在谷歌地图android上显示带有多个标记的位置 问题是当我运行我的应用程序时 它只显示一个位置 标记 这是我的代码 public class koordinatTask extends AsyncTask
  • Android - AudioRecord类不读取数据,audioData和fftArray返回零

    我是 Android 新手 一直在开发音调分析器应用程序 最低 SDK 8 我读了很多关于如何实现 Audiorecord 类的文章 但我想知道为什么它在我录制时不读取任何数据 我尝试显示 audioData 和 fftArray 的值 但
  • java for windows 中的文件图标叠加

    我正在尝试像 Tortoise SVN 或 Dropbox 一样在文件和文件夹上实现图标叠加 我在网上查了很多资料 但没有找到Java的解决方案 Can anyone help me with this 很抱歉确认您的担忧 但这无法在 Ja
  • 读出 Matlab / Octave fft2() 函数输出的特定点

    我正在熟悉 Octave 及其功能fft2 在此玩具示例中 我的目标是生成以下 256 x 256 png 图像的 2D DFT 为了能够轻松理解输出 我尝试将此图像转换为 256 x 256 图像 消除颜色信息 Im imread cir
  • 最新的 Hibernate 和 Derby:无法建立 JDBC 连接

    我正在尝试创建一个使用 Hibernate 连接到 Derby 数据库的准系统项目 我正在使用 Hibernate 和 Derby 的最新版本 但我得到的是通用的Unable to make JDBC Connection error 这是
  • 如何将双精度/浮点四舍五入为二进制精度?

    我正在编写对浮点数执行计算的代码的测试 不出所料 结果很少是准确的 我想在计算结果和预期结果之间设置一个容差 我已经证实 在实践中 使用双精度 在对最后两位有效小数进行四舍五入后 结果始终是正确的 但是usually四舍五入最后一位小数后
  • Spring Rest 和 Jsonp

    我正在尝试让我的 Spring Rest 控制器返回jsonp但我没有快乐 如果我想返回 json 但我有返回的要求 完全相同的代码可以正常工作jsonp我添加了一个转换器 我在网上找到了用于执行 jsonp 转换的源代码 我正在使用 Sp

随机推荐

  • NSColor 系统颜色在暗/亮模式切换时不改变

    我正在尝试通过切换暗 亮模式来改变图像的颜色NSViewController 我正在使用此代码来更改图像的颜色 NSImage image NSImage image withColour NSColor colour NSImage im
  • java中是否有Thread.sleep的替代方案

    这是我的代码 while true try Thread sleep 5 60 1000 processData data processing job catch InterruptedException e SystemMessageB
  • 如何使用 OCR 检测图像中的下标数字?

    我在用tesseract对于 OCR 通过pytesseract绑定 不幸的是 当我尝试提取包含下标样式数字的文本时遇到困难 下标数字被解释为字母 例如 在基本图像中 我想将文本提取为 CH3 即我不关心知道该数字3是图像中的下标 我对此的
  • Linq to SQL 的单元测试实践

    我正在尝试进行单元测试 但遇到了一种我不确定的行为 可以备份库存 基本上 Inventory 表被复制到 InventoryHistory 表 并给出备份发生时间的时间戳 HistoryDate 以下是备份库存的代码 DateTime hi
  • 在 r-bloggers 上获取 Hugo-goa 的 blogdown

    我尝试带来以下博客风格blogdown new site theme shenoybr hugo goa 致 r 博主 下列的如何在 R Bloggers 上获取我的 blogdown 博客 https stackoverflow com
  • Spring Security:始终将登录用户重定向到页面

    Spring security 有一个很好的功能 它会记住请求资源的 url 并在身份验证成功后将用户重定向到该资源 但我希望用户在登录后始终重定向到其他页面 这是如何完成的 在您的 spring security 配置中使用以下内容
  • 使用 __init__ 继承属性

    我是一个Java人 刚刚开始学习Python 举个例子 class Person def init self name phone self name name self phone phone class Teenager Person
  • 可选后备 SPARQL 模式的替代方案?

    我需要为目标集中的每个资源检索单个图像 并按优先级顺序测试多个非独占谓词 I m 使用标准的可选回退模式 select r i where r a dbo Automobile optional r
  • 无法使用 Xcode 存档(错误 - PhaseScriptExecution 因非零退出代码而失败),但构建成功

    I am sorry for the black marks in the image 我已经看到多个帖子建议解决这个问题 Lock 解锁钥匙串 尝试过 pod 更新 尝试过 清除构建 尝试过 签名 在构建设置中跳过安装 尝试过 实际上没有
  • 如何在Nose2中运行特定测试

    在以前版本的 Nose 测试框架中 有多种方法可以仅指定所有测试的子集 nosetests test module nosetests another test TestCase test method nosetests a test T
  • 带套接字的 TCP 客户端/服务器、服务器向客户端发送文件、客户端挂起、Python

    我想用Python 中的套接字编写一个简单的TCP 服务器 服务器应将图像发送到连接的客户端 客户端应该收到图像 但是 现在客户端只收到图像的一部分 我什至无法打开它 服务器是使用 select 的多客户端 但这不是这里的问题 我认为问题出
  • PHP 命名空间和动态类名

    我在尝试 spl autoload 命名空间和动态类名时遇到了一件 奇怪 的事情 我使用 PHP 5 3 2 像这样调用自动加载 set include path get include path PATH SEPARATOR classe
  • 替代 (?!y) 但在单词之前

    如果我想排除 yapple 为什么我不能使用 my apple y 的替代品是什么before a word http jsfiddle net ksevlyar SbCCx 4 http jsfiddle net ksevelyar Sb
  • 从现有源创建android项目后缺少R类[重复]

    这个问题在这里已经有答案了 我下载了 SpriteMethodTest 的源代码 我想在 Eclipse 中构建它 所以我去了 文件 gt gt 新建 gt gt Android项目 gt gt 从现有源创建项目 gt gt SpriteM
  • Mllib依赖错误

    我正在尝试使用 Mllib 构建一个非常简单的 scala 独立应用程序 但在尝试构建程序时出现以下错误 Object Mllib is not a member of package org apache spark 然后 我意识到我必须
  • 验证参数是序列而不是字符串的 Pythonic 方法

    我有一个函数 它获取数据库表列表作为参数 并返回要在这些表上执行的命令字符串 例如 pg dump file tmp dump sql tables stack overflow port 5434 name europe 应该返回类似 p
  • 我应该在哪里放置可以显示 Flash 消息的 Laravel 4 辅助函数?

    我写了一个简单的display messages 将搜索的函数Session get errors 获取闪存数据并将其回显到屏幕上 我把这个功能放在哪里 在 Codeigniter 中 您有一个 helpers 文件夹 您可以在其中放置所有
  • 如何合并多个不包含在数组中的单独数组? [复制]

    这个问题在这里已经有答案了 如何合并存储在变量中但不包含在数组本身中的多个单独数组 变量 unique answer title包含这些单独的数组 但是 我试图将它们的所有元素组合成一个大的数字数组 当我使用array merge uniq
  • 在 C++ 中删除部分文件的最快方法

    我想知道在 C 中删除部分文件的最快方法是什么 我知道编写第二个文件并跳过你想要的部分的方法 但我认为当你处理大文件时速度很慢 数据库系统怎么样 它们如何如此快速地删除记录 数据库保留索引 元数据列出文件的哪些部分有效 哪些部分无效 要删除
  • 使用 FFT 计算频率时的错误值

    我得到了错误的频率 我不明白为什么我得到了错误的值 因为我已经按照 stackoverflow 后面的指令进行了计算 我用过FFThttp introcs cs princeton edu java 97data FFT java html