北鸢echo 2024-06-01 22:32 采纳率: 81%
浏览 3
已结题

arduino怎么解决问题

如下图,那个副傅立叶变换,那个应该怎么改?并且求问如何将一段频率转化成频谱,然后再映射在8×8的点阵上

img

  • 写回答

3条回答 默认 最新

  • 关注

    晚上好🌙🌙🌙
    本答案参考ChatGPT-3.5

    看起来你想要使用Arduino进行音频处理,包括傅立叶变换(FFT)和将频率数据映射到点阵显示。然而,你在代码中遇到了一些问题,包括ArduinoFFT模板类的使用错误。首先,让我们解决这个问题。

    问题1:ArduinoFFT类的使用 ArduinoFFT似乎是一个自定义的类,但你的代码没有提供这个类的实现或者导入。你需要确保已经正确地包含了这个类,并且在使用时提供了参数。如果它是一个库的一部分,确保你已经正确地引用了库。

    解决方案1:

    • 如果ArduinoFFT是自定义库的一部分:

      • 确保在#include语句中添加正确的库路径:
        #include <ArduinoFFT.h>
        
      • 如果需要实例化,提供适当的参数,例如采样率:
        ArduinoFFT FFT(sampling_rate);
        
    • 如果ArduinoFFT是一个第三方库:

      • 按照库文档的指示安装和包含库。

    问题2:函数void setup()中的错误 invalid use of template-name 'ArduinoFFT' without an argument list表明ArduinoFFT类的构造函数没有被正确调用。

    解决方案2:setup()函数中,确保在创建FFT对象时传递适当的参数,如上面提到的sampling_rate

    void setup() {
      // 其他初始化代码...
      ArduinoFFT FFT(sampling_period_us); // 使用正确的参数
      // ...
    }
    

    其他步骤:

    1. 采集音频数据:

      • 使用analogRead()获取音频输入,并将其存储在vRealvImag数组中。
      for (int i = 0; i < SAMPLES; i++) {
          double sample = analogRead(tonepin);
          microseconds += sampling_period_us;
          // 将样本时间戳转换为频率
          double frequency = 1.0 / (microseconds / 1000000);
          // 更新频谱数据
          FFT.update(sample, frequency);
      }
      
    2. 执行傅立叶变换:

      FFT.calculate();
      
    3. 处理频谱数据:

      • 将结果转换为8x8点阵数据,可能需要对数据进行归一化和裁剪,然后映射到点阵上。
    4. 显示点阵:

      • 使用点阵库(如Adafruit_GFX)绘制频谱图。

    请确保在实际项目中根据你的需求和所使用的库进行相应的调整。如果你还没有找到对应的库或教程,可以查阅Arduino FFT库的文档或搜索相关教程。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(2条)

报告相同问题?

问题事件

  • 系统已结题 6月23日
  • 已采纳回答 6月15日
  • 创建了问题 6月1日

悬赏问题

  • ¥15 Windows Script Host 无法找到脚本文件"C:\ProgramData\Player800\Cotrl.vbs”
  • ¥15 matlab自定义损失函数
  • ¥15 35114 SVAC视频验签的问题
  • ¥15 impedancepy
  • ¥15 求往届大挑得奖作品(ppt…)
  • ¥15 如何在vue.config.js中读取到public文件夹下window.APP_CONFIG.API_BASE_URL的值
  • ¥50 浦育平台scratch图形化编程
  • ¥20 求这个的原理图 只要原理图
  • ¥15 vue2项目中,如何配置环境,可以在打完包之后修改请求的服务器地址
  • ¥20 微信的店铺小程序如何修改背景图