Class Convolver1D

java.lang.Object
com.irurueta.numerical.signal.processing.Convolver1D

public class Convolver1D extends Object
Convolves a 1D signal with a 1D kernel.
  • Nested Class Summary

    Nested Classes
    Modifier and Type
    Class
    Description
    static interface 
    Interface defining events produced by this class.
  • Field Summary

    Fields
    Modifier and Type
    Field
    Description
    private double
    Constant value to use during edge extension when CONSTANT_EDGE method is being used.
    static final double
    Default constant value to use during convolution if CONSTANT_EDGE method is being used for signal's edge extension.
    static final ConvolverEdgeMethod
    Default method to use for signal's edge extension.
    static final int
    Default position of kernel center.
    Edge extension method to use during convolution when parts of the kernel are required to lie outside the signal's boundaries.
    private double[]
    Kernel to convolve the signal with.
    private int
    Position of kernel center.
    Listener in charge of attending events generated by this instance.
    private double[]
    Signal to be convolved.
  • Constructor Summary

    Constructors
    Constructor
    Description
    Constructor.
    Convolver1D(double[] signal, double[] kernel)
    Constructor.
  • Method Summary

    Modifier and Type
    Method
    Description
    double[]
    Convolves provided signal with provided kernel using provided configuration for edge extension.
    void
    convolve(double[] result)
    Convolves provided signal with provided kernel using provided configuration for edge extension.
    static double[]
    convolve(double[] signal, double[] kernel)
    Convolves provided signal with provided kernel assuming a zero value extension method and kernel center located at its origin.
    static void
    convolve(double[] signal, double[] kernel, double[] result)
    Convolves provided signal with provided kernel assuming a zero value extension method and kernel center located at its origin.
    static void
    convolve(double[] signal, double[] kernel, double[] result, Convolver1D.Convolver1DListener listener)
    Convolves provided signal with provided kernel assuming a zero value extension method and kernel center located at its origin.
    static double[]
    convolve(double[] signal, double[] kernel, int kernelCenter)
    Convolves provided signal with provided kernel assuming a zero value extension method.
    static void
    convolve(double[] signal, double[] kernel, int kernelCenter, double[] result)
    Convolves provided signal with provided kernel assuming a zero value extension method.
    static void
    convolve(double[] signal, double[] kernel, int kernelCenter, double[] result, Convolver1D.Convolver1DListener listener)
    Convolves provided signal with provided kernel assuming a zero value extension method.
    static double[]
    convolve(double[] signal, double[] kernel, int kernelCenter, Convolver1D.Convolver1DListener listener)
    Convolves provided signal with provided kernel assuming a zero value extension method.
    static double[]
    convolve(double[] signal, double[] kernel, int kernelCenter, ConvolverEdgeMethod edgeMethod)
    Convolves provided signal with provided kernel assuming a zero value when constant edge extension is used (which makes it equivalent to zero extension method).
    static double[]
    convolve(double[] signal, double[] kernel, int kernelCenter, ConvolverEdgeMethod edgeMethod, double constantValue)
    Convolves provided signal with provided kernel.
    static void
    convolve(double[] signal, double[] kernel, int kernelCenter, ConvolverEdgeMethod edgeMethod, double[] result)
    Convolves provided signal with provided kernel assuming a zero value when constant edge extension is used (which makes it equivalent to zero extension method).
    static void
    convolve(double[] signal, double[] kernel, int kernelCenter, ConvolverEdgeMethod edgeMethod, double[] result, Convolver1D.Convolver1DListener listener)
    Convolves provided signal with provided kernel assuming a zero value when constant edge extension is used (which makes it equivalent to zero extension method).
    static void
    convolve(double[] signal, double[] kernel, int kernelCenter, ConvolverEdgeMethod edgeMethod, double constantValue, double[] result)
    Convolves provided signal with provided kernel.
    static void
    convolve(double[] signal, double[] kernel, int kernelCenter, ConvolverEdgeMethod edgeMethod, double constantValue, double[] result, Convolver1D.Convolver1DListener listener)
    Convolves provided signal with provided kernel.
    static double[]
    convolve(double[] signal, double[] kernel, int kernelCenter, ConvolverEdgeMethod edgeMethod, double constantValue, Convolver1D.Convolver1DListener listener)
    Convolves provided signal with provided kernel.
    static double[]
    convolve(double[] signal, double[] kernel, int kernelCenter, ConvolverEdgeMethod edgeMethod, Convolver1D.Convolver1DListener listener)
    Convolves provided signal with provided kernel assuming a zero value when constant edge extension is used (which makes it equivalent to zero extension method).
    static double[]
    convolve(double[] signal, double[] kernel, Convolver1D.Convolver1DListener listener)
    Convolves provided signal with provided kernel assuming a zero value extension method and kernel center located at its origin.
    double
    Gets constant value to use during edge extension when CONSTANT_EDGE method is being used.
    Gets edge extension method to use during convolution when parts of the kernel are required to lie outside the signal's boundaries.
    double[]
    Gets kernel to convolve the signal with.
    int
    Gets position of kernel center.
    Gets listener in charge of attending events generated by this instance.
    double[]
    Gets signal to be convolved.
    protected static double
    getSignalValueConstant(double[] signal, int pos, double constantValue)
    Internal method to determine signal value even when a position outside its boundaries is requested for constant value edge extension.
    protected static double
    getSignalValueMirror(double[] signal, int pos)
    Internal method to determine signal value even when a position outside its boundaries is requested for mirror edge extension.
    protected static double
    getSignalValueRepeat(double[] signal, int pos)
    Internal method to determine signal value even when a position outside its boundaries is requested for repeat edge extension.
    protected static double
    getSignalValueZero(double[] signal, int pos)
    Internal method to determine signal value even when a position outside its boundaries is requested when zero edge extension is being used.
    private static void
    internalConvolveConstant(double[] signal, double[] kernel, int kernelCenter, double constantValue, double[] result, Convolver1D.Convolver1DListener listener)
    Internal method to convolve signal using constant value edge extension method.
    private static void
    internalConvolveMirror(double[] signal, double[] kernel, int kernelCenter, double[] result, Convolver1D.Convolver1DListener listener)
    Internal method to convolve signal using a mirror extension method.
    private static void
    internalConvolveRepeat(double[] signal, double[] kernel, int kernelCenter, double[] result, Convolver1D.Convolver1DListener listener)
    Internal method to convolve signal using a repeat extension method.
    private static void
    internalConvolveZero(double[] signal, double[] kernel, int kernelCenter, double[] result, Convolver1D.Convolver1DListener listener)
    Internal method to convolve signal using zero edge extension method.
    boolean
    Indicates whether this instance is ready to start a convolution.
    void
    setConstantValue(double constantValue)
    Sets constant value to use during edge extension when CONSTANT_EDGE method is being used.
    void
    Sets edge extension method to use during convolution when parts of the kernel are required to lie outside the signal's boundaries.
    final void
    setKernel(double[] kernel)
    Sets kernel to convolve the signal with.
    void
    setKernelCenter(int kernelCenter)
    Sets position of kernel center.
    void
    Sets listener in charge of attending events generated by this instance.
    final void
    setSignal(double[] signal)
    Sets signal to be convolved.

    Methods inherited from class java.lang.Object

    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
  • Field Details

    • DEFAULT_CONSTANT_VALUE

      public static final double DEFAULT_CONSTANT_VALUE
      Default constant value to use during convolution if CONSTANT_EDGE method is being used for signal's edge extension.
      See Also:
    • DEFAULT_KERNEL_CENTER

      public static final int DEFAULT_KERNEL_CENTER
      Default position of kernel center.
      See Also:
    • DEFAULT_EDGE_METHOD

      public static final ConvolverEdgeMethod DEFAULT_EDGE_METHOD
      Default method to use for signal's edge extension.
    • signal

      private double[] signal
      Signal to be convolved.
    • kernel

      private double[] kernel
      Kernel to convolve the signal with.
    • kernelCenter

      private int kernelCenter
      Position of kernel center. Typical values are the start of kernel (position 0) or the kernel's center. For the former, the edge extension is applied only at the end of the resulting signal; for the latter, edge extension is applied symmetrically at the beginning and end of the resulting signal.
    • edgeMethod

      private ConvolverEdgeMethod edgeMethod
      Edge extension method to use during convolution when parts of the kernel are required to lie outside the signal's boundaries.
    • constantValue

      private double constantValue
      Constant value to use during edge extension when CONSTANT_EDGE method is being used.
    • listener

      Listener in charge of attending events generated by this instance.
  • Constructor Details

    • Convolver1D

      public Convolver1D()
      Constructor.
    • Convolver1D

      public Convolver1D(double[] signal, double[] kernel)
      Constructor.
      Parameters:
      signal - signal to be convolved.
      kernel - kernel to convolve signal with.
  • Method Details

    • getSignal

      public double[] getSignal()
      Gets signal to be convolved.
      Returns:
      signal to be convolved.
    • setSignal

      public final void setSignal(double[] signal)
      Sets signal to be convolved.
      Parameters:
      signal - signal to be convolved.
    • getKernel

      public double[] getKernel()
      Gets kernel to convolve the signal with.
      Returns:
      kernel to convolve the signal with.
    • setKernel

      public final void setKernel(double[] kernel)
      Sets kernel to convolve the signal with.
      Parameters:
      kernel - kernel to convolve the signal with.
    • getKernelCenter

      public int getKernelCenter()
      Gets position of kernel center. Typical values are the start of kernel (position 0) or the kernel's center. For the former, the edge extension is applied only at the end of the resulting signal; for the latter, edge extension is applied symmetrically at the beginning and end of the resulting signal.
      Returns:
      position of kernel center.
    • setKernelCenter

      public void setKernelCenter(int kernelCenter)
      Sets position of kernel center. Typical values are the start of kernel (position 0) or the kernel's center. For the former, the edge extension is applied only at the end of the resulting signal; for the latter, edge extension is applied symmetrically at the beginning and end of the resulting signal.
      Parameters:
      kernelCenter - position of kernel center.
      Throws:
      IllegalArgumentException - if provided position is negative.
    • getEdgeMethod

      public ConvolverEdgeMethod getEdgeMethod()
      Gets edge extension method to use during convolution when parts of the kernel are required to lie outside the signal's boundaries.
      Returns:
      edge extension method.
    • setEdgeMethod

      public void setEdgeMethod(ConvolverEdgeMethod edgeMethod)
      Sets edge extension method to use during convolution when parts of the kernel are required to lie outside the signal's boundaries.
      Parameters:
      edgeMethod - edge extension method.
    • getConstantValue

      public double getConstantValue()
      Gets constant value to use during edge extension when CONSTANT_EDGE method is being used.
      Returns:
      constant value to use during edge extension.
    • setConstantValue

      public void setConstantValue(double constantValue)
      Sets constant value to use during edge extension when CONSTANT_EDGE method is being used.
      Parameters:
      constantValue - constant value to use during edge extension.
    • getListener

      public Convolver1D.Convolver1DListener getListener()
      Gets listener in charge of attending events generated by this instance.
      Returns:
      listener in charge of attending events generated by this instance.
    • setListener

      public void setListener(Convolver1D.Convolver1DListener listener)
      Sets listener in charge of attending events generated by this instance.
      Parameters:
      listener - listener in charge of attending events generated by this instance.
    • isReady

      public boolean isReady()
      Indicates whether this instance is ready to start a convolution.
      Returns:
      true if ready, false otherwise.
    • convolve

      public double[] convolve()
      Convolves provided signal with provided kernel using provided configuration for edge extension.
      Returns:
      a new array containing result of convolution.
    • convolve

      public void convolve(double[] result)
      Convolves provided signal with provided kernel using provided configuration for edge extension.
      Parameters:
      result - array where result of convolution will be stored. Must have the sum of the lengths of signal and kernel minus one.
      Throws:
      IllegalArgumentException - if provided result array does not have proper length.
    • convolve

      public static double[] convolve(double[] signal, double[] kernel)
      Convolves provided signal with provided kernel assuming a zero value extension method and kernel center located at its origin.
      Parameters:
      signal - signal to be convolved.
      kernel - kernel used for convolution.
      Returns:
      a new array containing result of convolution.
    • convolve

      public static double[] convolve(double[] signal, double[] kernel, Convolver1D.Convolver1DListener listener)
      Convolves provided signal with provided kernel assuming a zero value extension method and kernel center located at its origin.
      Parameters:
      signal - signal to be convolved.
      kernel - kernel used for convolution.
      listener - listener attending events generated during convolution.
      Returns:
      a new array containing result of convolution.
    • convolve

      public static void convolve(double[] signal, double[] kernel, double[] result)
      Convolves provided signal with provided kernel assuming a zero value extension method and kernel center located at its origin.
      Parameters:
      signal - signal to be convolved.
      kernel - kernel used for convolution.
      result - array where result of convolution will be stored. Must have the sum of the lengths of signal and kernel minus one.
      Throws:
      IllegalArgumentException - if provided result array does not have proper length.
    • convolve

      public static void convolve(double[] signal, double[] kernel, double[] result, Convolver1D.Convolver1DListener listener)
      Convolves provided signal with provided kernel assuming a zero value extension method and kernel center located at its origin.
      Parameters:
      signal - signal to be convolved.
      kernel - kernel used for convolution.
      result - array where result of convolution will be stored. Must have the sum of the lengths of signal and kernel minus one.
      listener - listener attending events generated during convolution.
      Throws:
      IllegalArgumentException - if provided result array does not have proper length.
    • convolve

      public static double[] convolve(double[] signal, double[] kernel, int kernelCenter)
      Convolves provided signal with provided kernel assuming a zero value extension method.
      Parameters:
      signal - signal to be convolved.
      kernel - kernel used for convolution.
      kernelCenter - position of kernel center. This determines how signal's edge extension is applied. Must be a value within kernel's boundaries.
      Returns:
      a new array containing result of convolution.
      Throws:
      IllegalArgumentException - if kernel center is not within kernel's boundaries.
    • convolve

      public static double[] convolve(double[] signal, double[] kernel, int kernelCenter, Convolver1D.Convolver1DListener listener)
      Convolves provided signal with provided kernel assuming a zero value extension method.
      Parameters:
      signal - signal to be convolved.
      kernel - kernel used for convolution.
      kernelCenter - position of kernel center. This determines how signal's edge extension is applied. Must be a value within kernel's boundaries.
      listener - listener attending events generated during convolution.
      Returns:
      a new array containing result of convolution.
      Throws:
      IllegalArgumentException - if kernel center is not within kernel's boundaries.
    • convolve

      public static void convolve(double[] signal, double[] kernel, int kernelCenter, double[] result)
      Convolves provided signal with provided kernel assuming a zero value extension method.
      Parameters:
      signal - signal to be convolved.
      kernel - kernel used for convolution.
      kernelCenter - position of kernel center. This determines how signal's edge extension is applied. Must be a value within kernel's boundaries.
      result - array where result of convolution will be stored. Must have the sum of the lengths of signal and kernel minus one.
      Throws:
      IllegalArgumentException - if provided result array does not have proper length or if kernel center is not within kernel's boundaries.
    • convolve

      public static void convolve(double[] signal, double[] kernel, int kernelCenter, double[] result, Convolver1D.Convolver1DListener listener)
      Convolves provided signal with provided kernel assuming a zero value extension method.
      Parameters:
      signal - signal to be convolved.
      kernel - kernel used for convolution.
      kernelCenter - position of kernel center. This determines how signal's edge extension is applied. Must be a value within kernel's boundaries.
      result - array where result of convolution will be stored. Must have the sum of the lengths of signal and kernel minus one.
      listener - listener attending events generated during convolution.
      Throws:
      IllegalArgumentException - if provided result array does not have proper length or if kernel center is not within kernel's boundaries.
    • convolve

      public static double[] convolve(double[] signal, double[] kernel, int kernelCenter, ConvolverEdgeMethod edgeMethod)
      Convolves provided signal with provided kernel assuming a zero value when constant edge extension is used (which makes it equivalent to zero extension method).
      Parameters:
      signal - signal to be convolved.
      kernel - kernel used for convolution.
      kernelCenter - position of kernel center. This determines how signal's edge extension is applied. Must be a value within kernel's boundaries.
      edgeMethod - edge extension method.
      Returns:
      a new array containing result of convolution.
      Throws:
      IllegalArgumentException - if kernel center is not within kernel's boundaries.
    • convolve

      public static double[] convolve(double[] signal, double[] kernel, int kernelCenter, ConvolverEdgeMethod edgeMethod, Convolver1D.Convolver1DListener listener)
      Convolves provided signal with provided kernel assuming a zero value when constant edge extension is used (which makes it equivalent to zero extension method).
      Parameters:
      signal - signal to be convolved.
      kernel - kernel used for convolution.
      kernelCenter - position of kernel center. This determines how signal's edge extension is applied. Must be a value within kernel's boundaries.
      edgeMethod - edge extension method.
      listener - listener attending events generated during convolution.
      Returns:
      a new array containing result of convolution.
      Throws:
      IllegalArgumentException - if kernel center is not within kernel's boundaries.
    • convolve

      public static void convolve(double[] signal, double[] kernel, int kernelCenter, ConvolverEdgeMethod edgeMethod, double[] result)
      Convolves provided signal with provided kernel assuming a zero value when constant edge extension is used (which makes it equivalent to zero extension method).
      Parameters:
      signal - signal to be convolved.
      kernel - kernel used for convolution.
      kernelCenter - position of kernel center. This determines how signal's edge extension is applied. Must be a value within kernel's boundaries.
      edgeMethod - edge extension method.
      result - array where result of convolution will be stored. Must have the sum of the lengths of signal and kernel minus one.
      Throws:
      IllegalArgumentException - if provided result array does not have proper length or if kernel center is not within kernel's boundaries.
    • convolve

      public static void convolve(double[] signal, double[] kernel, int kernelCenter, ConvolverEdgeMethod edgeMethod, double[] result, Convolver1D.Convolver1DListener listener)
      Convolves provided signal with provided kernel assuming a zero value when constant edge extension is used (which makes it equivalent to zero extension method).
      Parameters:
      signal - signal to be convolved.
      kernel - kernel used for convolution.
      kernelCenter - position of kernel center. This determines how signal's edge extension is applied. Must be a value within kernel's boundaries.
      edgeMethod - edge extension method.
      listener - listener attending events generated during convolution.
      result - array where result of convolution will be stored. Must have the sum of the lengths of signal and kernel minus one.
      Throws:
      IllegalArgumentException - if provided result array does not have proper length or if kernel center is not within kernel's boundaries.
    • convolve

      public static double[] convolve(double[] signal, double[] kernel, int kernelCenter, ConvolverEdgeMethod edgeMethod, double constantValue)
      Convolves provided signal with provided kernel.
      Parameters:
      signal - signal to be convolved.
      kernel - kernel used for convolution.
      kernelCenter - position of kernel center. This determines how signal's edge extension is applied. Must be a value within kernel's boundaries.
      edgeMethod - edge extension method.
      constantValue - constant value to be used for edge extension if constant extension method is used.
      Returns:
      a new array containing result of convolution.
      Throws:
      IllegalArgumentException - if kernel center is not within kernel's boundaries.
    • convolve

      public static double[] convolve(double[] signal, double[] kernel, int kernelCenter, ConvolverEdgeMethod edgeMethod, double constantValue, Convolver1D.Convolver1DListener listener)
      Convolves provided signal with provided kernel.
      Parameters:
      signal - signal to be convolved.
      kernel - kernel used for convolution.
      kernelCenter - position of kernel center. This determines how signal's edge extension is applied. Must be a value within kernel's boundaries.
      edgeMethod - edge extension method.
      constantValue - constant value to be used for edge extension if constant extension method is used.
      listener - listener attending events generated during convolution.
      Returns:
      a new array containing result of convolution.
      Throws:
      IllegalArgumentException - if kernel center is not within kernel's boundaries.
    • convolve

      public static void convolve(double[] signal, double[] kernel, int kernelCenter, ConvolverEdgeMethod edgeMethod, double constantValue, double[] result)
      Convolves provided signal with provided kernel.
      Parameters:
      signal - signal to be convolved.
      kernel - kernel used for convolution.
      kernelCenter - position of kernel center. This determines how signal's edge extension is applied. Must be a value within kernel's boundaries.
      edgeMethod - edge extension method.
      constantValue - constant value to be used for edge extension if constant extension method is used.
      result - array where result of convolution will be stored. Must have the sum of the lengths of signal and kernel minus one.
      Throws:
      IllegalArgumentException - if provided result array does not have proper length or if kernel center is not within kernel's boundaries.
    • convolve

      public static void convolve(double[] signal, double[] kernel, int kernelCenter, ConvolverEdgeMethod edgeMethod, double constantValue, double[] result, Convolver1D.Convolver1DListener listener)
      Convolves provided signal with provided kernel.
      Parameters:
      signal - signal to be convolved.
      kernel - kernel used for convolution.
      kernelCenter - position of kernel center. This determines how signal's edge extension is applied. Must be a value within kernel's boundaries.
      edgeMethod - edge extension method.
      constantValue - constant value to be used for edge extension if constant extension method is used.
      result - array where result of convolution will be stored. Must have the sum of the lengths of signal and kernel minus one.
      listener - listener attending events generated during convolution.
      Throws:
      IllegalArgumentException - if provided result array does not have proper length or if kernel center is not within kernel's boundaries.
    • internalConvolveZero

      private static void internalConvolveZero(double[] signal, double[] kernel, int kernelCenter, double[] result, Convolver1D.Convolver1DListener listener)
      Internal method to convolve signal using zero edge extension method.
      Parameters:
      signal - signal to be convolved.
      kernel - kernel to convolve with.
      kernelCenter - kernel center.
      result - array where result is stored.
      listener - listener attending events generated during convolution.
    • getSignalValueZero

      protected static double getSignalValueZero(double[] signal, int pos)
      Internal method to determine signal value even when a position outside its boundaries is requested when zero edge extension is being used.
      Parameters:
      signal - signal to request a value for.
      pos - requested position.
      Returns:
      signal value when position is within boundaries or zero otherwise.
    • internalConvolveConstant

      private static void internalConvolveConstant(double[] signal, double[] kernel, int kernelCenter, double constantValue, double[] result, Convolver1D.Convolver1DListener listener)
      Internal method to convolve signal using constant value edge extension method.
      Parameters:
      signal - signal to be convolved.
      kernel - kernel to convolve with.
      kernelCenter - kernel center.
      constantValue - constant value to use for positions outside signal boundaries.
      result - array where result is stored.
      listener - listener attending events generated during convolution.
    • getSignalValueConstant

      protected static double getSignalValueConstant(double[] signal, int pos, double constantValue)
      Internal method to determine signal value even when a position outside its boundaries is requested for constant value edge extension.
      Parameters:
      signal - signal to request a value for.
      pos - requested position.
      constantValue - constant value to use when requesting a position outside signal boundaries.
      Returns:
      signal value when position is within boundaries or constant value otherwise.
    • internalConvolveRepeat

      private static void internalConvolveRepeat(double[] signal, double[] kernel, int kernelCenter, double[] result, Convolver1D.Convolver1DListener listener)
      Internal method to convolve signal using a repeat extension method.
      Parameters:
      signal - signal to be convolved.
      kernel - kernel to convolve with.
      kernelCenter - kernel center.
      result - array where result is stored.
      listener - listener attending events generated during convolution.
    • getSignalValueRepeat

      protected static double getSignalValueRepeat(double[] signal, int pos)
      Internal method to determine signal value even when a position outside its boundaries is requested for repeat edge extension.
      Parameters:
      signal - signal to request a value for.
      pos - requested position.
      Returns:
      signal value assuming that signal is repeated indefinitely outside its boundaries.
    • internalConvolveMirror

      private static void internalConvolveMirror(double[] signal, double[] kernel, int kernelCenter, double[] result, Convolver1D.Convolver1DListener listener)
      Internal method to convolve signal using a mirror extension method.
      Parameters:
      signal - signal to be convolved.
      kernel - kernel to convolve with.
      kernelCenter - kernel center.
      result - array where result is stored.
      listener - listener attending events generated during convolution.
    • getSignalValueMirror

      protected static double getSignalValueMirror(double[] signal, int pos)
      Internal method to determine signal value even when a position outside its boundaries is requested for mirror edge extension.
      Parameters:
      signal - signal to request a value for.
      pos - requested position.
      Returns:
      signal value when assuming that signal is mirrored outside its boundaries.