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

arduino怎么解决问题

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

img

  • 写回答

3条回答 默认 最新

  • 檀越@新空间 2024-06-01 22:32
    关注

    晚上好🌙🌙🌙
    本答案参考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日