四、频谱显示优化技巧
对数频率轴映射
将FFT频点分组为巴克刻度(Bark Scale)或倍频程:
// 例:将0~4kHz分为24组(人耳敏感区域)
int band_edges[] = {0,100,200,300,400,510,630,770,920,1080...4000};
for(int b=0; b<24; b++) {
band_power[b] = sqrt(sum(fft[edge[b]:edge[b+1]]^2));
}
动态柱状图缩放
垂直方向:自动调整Y轴最大值:
y_max = max(current_max_band * 1.2, 固定最小值)
水平方向:低频区分配更多显示资源(如0-500Hz占50%屏幕宽度)
峰值保持与衰减
// 峰值保持显示(瀑布图效果)
for(int i=0; i<BAND_NUM; i++) {
if(new_band[i] > peak_band[i])
peak_band[i] = new_band[i]; // 捕获新峰值
else
peak_band[i] *= 0.95; // 缓慢衰减(每帧下降5%)
display_column(i, peak_band[i]); // 显示衰减后的峰值
}
五、系统校准与调试
基准信号注入
用函数发生器输入1kHz正弦波(0.5Vrms),调整增益使频谱主瓣高度占屏幕70%
噪声抑制测试
短接输入端测量噪声底,软件中设置阈值过滤(如if(band_power < 2*noise_floor) band_power=0)
实时参数调整
通过串口发送指令动态修改:
SET AGC ON/OFF, SET COMPRESS 0.5, SET Y_SCALE AUTO/FIXED
|