您好 我正在探索WP7平台的音频可能性,而我第一次尝试使用Cooley-Tukey方法实现FFT。结果是频谱图按此顺序显示4个相同的图像:一个正常,一个反转,一个正常,一个反转。 代码来自另一个C#项目(用于桌面),实现和所有变量似乎都与算法一致。 所以我可以立即看到两个问题:降低分辨率和浪费CPU以产生四个相同的频谱图。 鉴于样本大小为1600(可能是2048),我知道只有512个可用的频率信息,这使得我在8kHz频率范围内具有15Hz的分辨率。不错,但也不是那么好。
我应该放弃代码并使用NAudio吗?我似乎无法解释为什么频谱是四倍的,输入数据没问题,算法似乎没问题。
答案 0 :(得分:1)
这听起来很正确。你有2个镜子,我只能假设一个是Real部分而另一个是Image部分。这是标准的FFT。
从真实和图像中,您可以计算出更常见的每个谐波的幅度或幅度,或者计算每个谐波的角度或相移,这种情况不太常见。
吉拉德。
答案 1 :(得分:0)
我切换到NAudio,现在FFT正常工作。但是我可能找到了原因(我可能不会尝试再次测试):当我构建一个双数组来输入FFT函数时,我做了类似的事情:
for (int i = 0; i < buffer.Length; i+= sizeof(short))
{
samples[i] = ReadSample(buffer, i);
}
作为参考,'samples'是fft的double []输入,ReadSample可以处理little / big endian。现在不记得代码是怎么回事,但它正在跳过每个奇怪的样本。
我的数学知识从来都不是很好,但我认为这会导致一些混淆模式,最终可能产生我所经历的效果。
无论如何,问题已解决,但感谢您的意见,如果您仍能解释这一现象,我将不胜感激。