Package systole.processor.filters

Source Code of systole.processor.filters.Filter

/*
* To change this template, choose Tools | Templates
* and open the template in the editor.
*/

package systole.processor.filters;

import systole.domain.signals.Segment;



/**
*
* @author user
*/
public abstract class Filter implements Cloneable {

    /**
     * The calculated coefficients
     */
    protected double[] coeffs = null;
    /**
     * Sampling period
     */
    protected double ps;       
   
    /**
     * frequency cut
     */
    protected double cutOffFrequency;


   
    /**
     * @param ps
     */
    public Filter(double ps){
        this.ps = ps;
    }

    //Performs the convolution
    private Segment convol(double[] data, double[] coeffs){

        int dataLen = data.length;
        int operatorLen = coeffs.length;

        double[] freqResponse = new double[dataLen];

        for(int i = 0;i < dataLen-operatorLen;i++){
            freqResponse[i] = 0;

            for(int j = operatorLen-1;j >= 0;j--){
                freqResponse[i] += data[i+j]*coeffs[j];
            }

        }

        return new Segment(freqResponse);
   
    }

    /**
     * Creates the filter coefficients
     * @return coefficients
     */
    private double[] design(FilterConfiguration fConfig, FilterAlgorithm algorithm){
        if (isCoeffsEmpty()) this.coeffs = algorithm.filter(fConfig);
        return this.coeffs;
    }

    /**
     * @param order
     * @param atten
     * @param ripple
     * @param trband
     * @return filter configuration
     */
    public abstract FilterConfiguration config(int order, double atten, double ripple, double trband);

 

    /**
   * @return the cutOffFrequency
   */
  public double getCutOffFrequency() {
    return cutOffFrequency;
  }

  /**
   * @param cutOffFrequency the cutOffFrequency to set
   */
  public void setCutOffFrequency(double cutOffFrequency) {
    this.cutOffFrequency = cutOffFrequency;
  }

  /**
     * @param f
     * @return normalize frequency
     */
    protected double normalizeFreq(double f){
        return (f * 0.001); //I want frequencies in KHz
    }

   
    /**
     * calls subclasses design method and calls convolution
     *
     * @param rawSrc
     * @param fConfig
     * @param algorithm
     * @return Segment
     */
    public Segment apply(Segment rawSrc, FilterConfiguration fConfig, FilterAlgorithm algorithm){
        return this.convol(rawSrc.toDoubleArray(),this.design(fConfig, algorithm));
    }

    /**
     * @return Sampling Period
     */
    public double getSamplingPeriod(){return this.ps;}
    /**
     * @return Sampling Frequency
     */
    public double getSamplingFrequency(){ return 1/this.ps;}

    /**
     * @param ps
     */
    public void setSamplingPeriod(double ps){ this.ps = ps;}

    /**
     *
     */
    public void clearFilterCoeffs(){ this.coeffs = null;}

    /**
     *
     * @return if is empty
     */
    public boolean isCoeffsEmpty(){ return (this.coeffs == null);}

    @Override
    public Object clone() throws CloneNotSupportedException{
        return super.clone();
    }

}
TOP

Related Classes of systole.processor.filters.Filter

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.