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

晚上好🌙🌙🌙
本答案参考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); // 使用正确的参数
// ...
}
其他步骤:
采集音频数据:
analogRead()获取音频输入,并将其存储在vReal和vImag数组中。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);
}
执行傅立叶变换:
FFT.calculate();
处理频谱数据:
显示点阵:
Adafruit_GFX)绘制频谱图。请确保在实际项目中根据你的需求和所使用的库进行相应的调整。如果你还没有找到对应的库或教程,可以查阅Arduino FFT库的文档或搜索相关教程。