[英]Converting fft to ifft in C#
我的FFT工作正常,但我的問題是如何將其轉換為IFFT? 有人告訴我,IFFT應該像您正在使用的FFT一樣。 那么我該如何從fft ic#進行ifft? 有人告訴我,應該只進行一些更改以獲取ifft。
我嘗試自己做,但是我沒有得到與我輸入的相同的價值觀...
所以我制作了一個值數組並將其放入fft中,然后將其放入了ifft中,我無法獲得與我輸入的相同的值...
所以我認為我沒有正確地改變它。
這是我擁有的FFT:
public Complex[] FFT(Complex[] x )
{
int N2 = x.Length;
Complex[] X = new Complex[N2];
if (N2 == 1)
{
return x;
}
Complex[] odd = new Complex[N2 / 2];
Complex[] even = new Complex[N2 / 2];
Complex[] Y_Odd = new Complex[N2 / 2];
Complex[] Y_Even = new Complex[N2 / 2];
for (int t = 0; t < N2 / 2; t++)
{
even[t] = x[t * 2];
odd[t] = x[(t * 2) + 1];
}
Y_Even = FFT(even);
Y_Odd = FFT(odd);
Complex temp4;
for (int k = 0; k < (N2 / 2); k++)
{
temp4 = Complex1(k, N2);
X[k] = Y_Even[k] + (Y_Odd[k] * temp4);
X[k + (N2 / 2)] = Y_Even[k] - (Y_Odd[k] * temp4);
}
return X;
}
public Complex Complex1(int K, int N3)
{
Complex W = Complex.Pow((Complex.Exp(-1 * Complex.ImaginaryOne * (2.0 * Math.PI / N3))), K);
return W;
}
根據FFT的不同,您可能需要將整個復數矢量(輸入或結果矢量,而不是兩者)乘以1 / N(FFT的長度)。 但是此比例因子在FFT庫之間有所不同(有些已經包含1 / sqrt(N)因子)。
然后取輸入向量的復共軛,對其進行FFT,然后進行另一個復共軛以獲得IFFT結果。 這等效於對基本矢量指數使用-i而不是i進行FFT。
同樣,通常,由於算術舍入將至少一些低電平數值噪聲添加到結果中,因此不會從輸入的IFFT(FFT())中獲得相同的值。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.