Class Convolver1D
java.lang.Object
com.irurueta.numerical.signal.processing.Convolver1D
Convolves a 1D signal with a 1D kernel.
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionstatic interface
Interface defining events produced by this class. -
Field Summary
FieldsModifier and TypeFieldDescriptionprivate 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.private ConvolverEdgeMethod
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.private Convolver1D.Convolver1DListener
Listener in charge of attending events generated by this instance.private double[]
Signal to be convolved. -
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptiondouble[]
convolve()
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
isReady()
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
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.final void
setKernel
(double[] kernel) Sets kernel to convolve the signal with.void
setKernelCenter
(int kernelCenter) Sets position of kernel center.void
setListener
(Convolver1D.Convolver1DListener listener) Sets listener in charge of attending events generated by this instance.final void
setSignal
(double[] signal) Sets signal to be convolved.
-
Field Details
-
DEFAULT_CONSTANT_VALUE
public static final double DEFAULT_CONSTANT_VALUEDefault 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_CENTERDefault position of kernel center.- See Also:
-
DEFAULT_EDGE_METHOD
Default method to use for signal's edge extension. -
signal
private double[] signalSignal to be convolved. -
kernel
private double[] kernelKernel to convolve the signal with. -
kernelCenter
private int kernelCenterPosition 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
Edge extension method to use during convolution when parts of the kernel are required to lie outside the signal's boundaries. -
constantValue
private double constantValueConstant 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
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
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
Gets listener in charge of attending events generated by this instance.- Returns:
- listener in charge of attending events generated by this instance.
-
setListener
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.
-