于是我把这个问题丢个GPT
vReal[0]和vReal[1]的结果在FFT频谱中通常会显示较大的值,这是由FFT算法的性质所决定的。
在FFT变换中,vReal[0]表示直流分量(DC component),即信号的平均值或直流偏移量。vReal[1]表示基频(fundamental frequency)分量,即信号的最低频率成分。
通常情况下,vReal[0]和vReal[1]的值较大是正常的,尤其在音频信号处理中。它们所代表的是频谱中的直流分量和基频成分。
如果您的应用中不需要考虑这些直流分量和基频成分,可以将它们从频谱图中去除或忽略,仅关注其他频率成分的显示。您可以通过修改绘制频谱的循环来实现:
- // 绘制频谱
- int barWidth = 1;
- for (int i = 2; i < (SAMPLES / 2); i++) {
- int barHeight = map(vReal[i], 0, 512, 0, 32); // 调整频谱高度范围
- display.fillRect((i - 2) * barWidth, 32 - barHeight, barWidth, barHeight, SSD1306_WHITE);
- // 计算频率值
- double frequency = (i - 2) * frequencySpacing;
- display.setCursor((i - 2) * barWidth, 32 - barHeight - 8);
- display.setTextSize(1);
- display.setTextColor(SSD1306_WHITE);
- display.print(int(frequency));
- display.print("Hz");
- }
通过将绘制频谱的循环起始值从2开始,跳过直流分量和基频分量,您可以在频谱图中排除它们并显示其他频率成分的结果。
|