【发布时间】:2018-08-17 00:25:01
【问题描述】:
我正在用 c# 编写吉他调音器。使用 NAudio 库,我可以实时计算麦克风数据的 FFT。当我将 FFT 可视化时效果很好,但是当我尝试提取基频时,我得到的结果与我应该得到的结果相去甚远。 我想这与我研究傅里叶数据峰值的相当简单的方法有关:
//fft_size=size of the array containing the processed FFT
//Xs is the frequency axis of my computed FFT (double array)
//Ys is the amplitude axis of my computed FFT (double array)
int pk=0;
for (int p = 0; p < fft_size; p++)
{
if (Ys[p] > Ys[pk])
{
pk = p;
}
}
labelfrequency.Text=Xs[pk].ToString();
然后在windows窗体上显示频率
【问题讨论】:
-
可能需要比这更相关的代码... fft_size - 这是原始数据缓冲区的大小吗?还是 FFT 处理的数组大小?您使用什么数据类型?什么是pk?等等......请用更多信息编辑您的问题
-
你是说你没有找到正确的 FFT 峰值索引?
-
@PaulF 是的,当我播放正弦波时,返回的值远非正确。我知道问题不是来自我的 FFT,因为我可以将其可视化
标签: c# signal-processing fft naudio