logo elektroda
logo elektroda
X
logo elektroda
REKLAMA
REKLAMA
Adblock/uBlockOrigin/AdGuard mogą powodować znikanie niektórych postów z powodu nowej reguły.
REKLAMA
  • #1 5223749
    Netzu
    Poziom 11  
    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

    
    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;
                    }
    
  • REKLAMA
REKLAMA