Witam
Napisałem nastepująca funkcje do liczenia fft w C# i nie wiem czemu liczy mi ja źle,tzn porównując wynik z fft matlaba, moze ktos widzi gdzie jest błąd
Napisałem nastepująca funkcje do liczenia fft w C# i nie wiem czemu liczy mi ja źle,tzn porównując wynik z fft matlaba, moze ktos widzi gdzie jest błąd
double[,] WyznaczFft(byte[] paramx)
{
int e, L, M, m, g, d;
double Wi_r, Wi_i, W_r, W_i, T_r, T_i, temp;
int a=1,b,c;
byte T;
int log2N = (int)Math.Log(N,2);
double[,] xWynik = new double[2,N];
for(e = 0 ; e < N ; e++)
{
xWynik[0,e] = paramx[e];
xWynik[1,e] = 0;
}
for(b=1;b<N;b++)
{
if (b<a)
{
T=xWynik[0,a-1];
XWynik[0,a-1]=XWynik[0,b-1];
XWynik[0,b-1]=T;
}
c=N/2;
while (c<a)
{
a-=c;
c/=2;
}
a+=c;
}
for ( e = 1 ; e <= log2N ; e++)
{
L = (int)Math.Pow(2,e);
M = L/2;
Wi_r = 1;
Wi_i = 0;
W_r = Math.Cos(2*pi/L);
W_i = -Math.Sin(2*pi/L);
for(m = 1 ; m <= M ; m++ )
{
for(g = m ; g <= N ; g +=L )
{
d = g + M;
T_r = xWynik[0,d-1]*Wi_r - xWynik[1,d-1]*Wi_i;
T_i = xWynik[0,d-1]*Wi_i + xWynik[1,d-1]*Wi_r;
xWynik[0,d-1] = xWynik[0,g-1] - T_r;
xWynik[1,d-1] = xWynik[1,g-1] - T_i;
xWynik[0,g-1] = xWynik[0,g-1] + T_r;
xWynik[1,g-1] = xWynik[1,g-1] + T_i;
}
temp = Wi_r;
Wi_r = Wi_r*W_r - Wi_i*W_i;
Wi_i = temp*W_i + Wi_i*W_r;
}
}
return xWynik;
}