⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 fft.java

📁 This is a example about programming a neural network
💻 JAVA
字号:
/*
 * fft.java
 *
 * Created on 3 de febrero de 2008, 6:23
 *
 */

package rah;

public class fft {
    
    private double[] vector;
    private double[][] vectorValido;
    private int n;
    double vAux[][]=null;
    double[][] vectO=null ;
    
    public fft(double[] vector) {
    
        this.vector=vector;
        n=vector.length;
    }
    
    public void validarVector(){
        
        int i=0;
        double num=0.0;
        boolean cambiarVec=false;
        
        while(num < n){
            
            i++;
            num=Math.pow(2,i);                        
            
            if(num > n)
                
                cambiarVec=true;                        
        }
        if(cambiarVec==true){
            
            vectorValido= new double[(int)num][2];
            double [] temp=null;
            int j=0;
            double media,var;
            
            for(i=0;i<n;i++ ){
                
                vectorValido[i][0]=vector[i];
                vectorValido[i][1]=0;
            }
            temp=new double[5];

            for(i=n-5; i<n; i++){
                
                temp[j]=vector[i];
                j++;
            }
            media=media(temp);
            var=varianza(temp,media);
            j=(int)num-n;
                           
            for(i=n;i<num;i++ ){
                
                vectorValido[i][0]=0;                
               // vectorValido[i][0]=vectorValido[i-1][0] - (j*Math.sqrt(var))/100.0;
                j++;
                vectorValido[i][1]=0;
            }
        }
        else{
            
            vectorValido= new double[n][2];
            
            for(i=0;i<n;i++ ){
                
                vectorValido[i][0]=vector[i];
                vectorValido[i][1]=0;
            }
        }
    }
    
    public double[][] computarFactor(int tamanyo){
        
        int factor=tamanyo/2;
        double vectFactor[][] =new double[factor][2];
        int i;
        double W,Q,a,b;
        
        W=(2 * Math.PI)/tamanyo;
        
        for(i=0; i<factor; i++){
            
            Q= W*i;
            a= Math.cos(Q);
            b= Math.sin(Q);
            
            if (b==0){
            
                vectFactor[i][0] = a ;
                vectFactor[i][1] = 0 ;
            }
            else{
                
                vectFactor[i][0] = a;
                vectFactor[i][1] = -b;
            }
        }
        return vectFactor;
    }
    
    public void fftDiezmado(){
        
        int numVeces=vectorValido.length;
        int i,j,sgt,m,p,l;
        double W[][];
        double real,imag;
        
        for(i=numVeces; i>1; i=i/2){
            
            vAux= new double[numVeces][2];
            sgt=0;
            W=computarFactor(i);
            l=1;
            
            while(l <= numVeces/i){ 
                
                p=0;
                j=sgt;
                
                for(m=sgt; m< j+(i/2); m++){ 
                    
                    vAux[m][0] = vectorValido[m][0] + vectorValido[m+(i/2)][0];
                    vAux[m][1] = vectorValido[m][1] + vectorValido[m+(i/2)][1];
                    
                    real = (vectorValido[m][0]  - vectorValido[m+(i/2)][0]);
                    imag= (vectorValido[m][1]  - vectorValido[m+(i/2)][1]);
                    
                    vAux[m+(i/2)][0] = (real*W[p][0]) - (imag*W[p][1]);
                    vAux[m+(i/2)][1] = (real*W[p][1]) + (imag*W[p][0]);
                   
                    p++;
                }
                sgt=sgt+(i/2)+p;
                l=l+1;
            }
            for(p=0; p<numVeces; p++){
                
                vectorValido[p][0]=vAux[p][0];
                vectorValido[p][1]=vAux[p][1];
            }
            
        }

    }
    
    public void ordenarVector(double[][] m){
        
        int tamanyoBin=0,longitudVect,i,l,j;
        String temp;
        vectO = new double[m.length][m[0].length];
                
        longitudVect=m.length;
        j=(int)(longitudVect/2);
        
        while(j>1){
           
            tamanyoBin=tamanyoBin+1;
            j=(int)(j/2);
        }
        tamanyoBin=tamanyoBin+1;
        String[] vectBinario = new String[longitudVect];
        
        // Convirtiendo de Decimal Binario
        for (i=0; i<longitudVect; i++){
            
            vectBinario[i]=Integer.toBinaryString(i);
            l=vectBinario[i].length();
            
            if( l<tamanyoBin ){
                
                j=0;
                temp="";
                
                for(j=0; j<tamanyoBin-l; j++){
                    
                    temp=temp+"0";
                }
                vectBinario[i]=temp + vectBinario[i];
            }
        }
        
        //Ordenando vectBinario: cambiando de lugar los bits, ponerlos al reves
        for(i=0; i<longitudVect; i++){
            
            temp=vectBinario[i];
            vectBinario[i]="";
            
            for(j=tamanyoBin; j>0; j--){
                
                vectBinario[i]=vectBinario[i]+temp.substring(j-1,j);
            }
        }
        
        //Convirtiendo a decimal el indice binario corregido
        for(i=0; i<longitudVect; i++){
            
            temp=vectBinario[i];
            l=0;
            String w="1";
            for(j=1; j<tamanyoBin+1; j++){
                
               if( vectBinario[i].substring(j-1,j).compareTo(w)==0)
                
                   l=l+(int)(Math.pow(2,tamanyoBin-j));               
            }
            
            //cambiando al lugar correcto el elemento de la matriz m
            vectO[i][0]=m[l][0];
            vectO[i][1]=m[l][1]; 
        }
       // mostrarVector(vectO);
    }
    
    public double[] obtenerVectorSalida(){
        
        double[] vectSalida= new double[vectO.length];
        int i;
        
        for(i=0; i<vectO.length; i++){
            
            if(vectO[i][1]!=0){
                
                vectSalida[i]=Math.sqrt(   Math.pow( Math.round(vectO[i][0]) ,2) + Math.pow( Math.round(vectO[i][1]) ,2)   );
            }
            else{
                
                vectSalida[i]=Math.abs(vectO[i][0]);
            }
        }
        //mostrarVector(vectSalida);
        
        return vectSalida;        
    }
      
    public void mostrarVector(double[][] vect){
        
        int i;
        
        for (i=0; i<vect.length; i++){
            
            System.out.println(vect[i][0]+"  "+vect[i][1]);
        }
        System.out.println("***************");
    }
    
    public void mostrarVector(double[] vect){
        
        int i;
        
        for (i=0; i<vect.length; i++){
            
            System.out.println(vect[i]);
        }
        System.out.println("***************");
    }

    public double[][] getVectorValido() {
        
        return vectorValido ;
    } 
    
    //******************************************************************************************
// Operaciones estadisticas     

    public static double media(double arr[ ]){
        
        double sum = 0.0;

        for(int i = 0; i < arr.length ; i++)
        {
            sum += arr[i];
        }

        return sum / arr.length;
    }    
    
    public static double varianza(double arr[ ], double media){
        
        double sum = 0.0;

        for(int i = 0; i < arr.length ; i++)
        {
            sum += Math.pow(arr[i] - media, 2);
        }
        
        return sum / (arr.length - 1);
    }
//******************************************************************************************    
    
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -