我正在为程序化音频文件编写一个应用程序,我必须分析我的新文件,得到它的频谱并在计算中改变它。C#逆向FFT#
我想用快速傅立叶变换(FFT)做到这一点。这是我的递归C#FFT:
void ft(float n, ref Complex[] f)
{
if (n > 1)
{
Complex[] g = new Complex[(int) n/2];
Complex[] u = new Complex[(int) n/2];
for (int i = 0; i < n/2; i++)
{
g[i] = f[i * 2];
u[i] = f[i * 2 + 1];
}
ft(n/2, ref g);
ft(n/2, ref u);
for (int i = 0; i < n/2; i++)
{
float a = i;
a = -2.0f * Mathf.PI * a/n;
float cos = Mathf.Cos(a);
float sin = Mathf.Sin(a);
Complex c1 = new Complex(cos, sin);
c1 = Complex.Multiply(u[i], c1);
f[i] = Complex.Add(g[i], c1);
f[i + (int) n/2] = Complex.Subtract(g[i], c1);
}
}
}
鼓舞人心的例子是
然后我比较我与那些从wolframalpha对于相同的输入0.6,0.7,0.8,0.9
的结果,但结果是不一样的。我的结果是Wolfram的两倍,虚部是Wolfram的-2倍。
此外,维基表示FFT的逆可以与
来计算,但我比较输入和输出,它们是不同的。
有没有人知道什么是错的?
查找处理FFT的现有库。不太确定您希望从其他人为您调试代码中获得什么。 –
我想要一个有fft经验的人,怎么能解释我如何得到fft的反例,例如使用其他算法,或者这是不可能的。我的代码工作。我尝试使用正弦和余弦输入并获得正确的输出。 –