Javadoc. Variable names.

git-svn-id: https://svn.apache.org/repos/asf/commons/proper/math/trunk@1489821 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Gilles Sadowski 2013-06-05 11:42:36 +00:00
parent 006f9b7b44
commit 4b42ccd141

View File

@ -1354,45 +1354,50 @@ public class MathArrays {
}
/**
* Calculates the convolution between two sequences.
* <p>
* The solution is obtained via straightforward computation of the convolution sum (and not via FFT;
* for longer sequences, the performance of this method might be inferior to an FFT-based implementation).
* Calculates the <a href="http://en.wikipedia.org/wiki/Convolution">
* convolution</a> between two sequences.
* The solution is obtained via straightforward computation of the
* convolution sum (and not via FFT).
* Whenever the computation needs an element that would be located
* at an index outside the input arrays, the value is assumed to be
* zero.
*
* @param x the first sequence (double array of length {@code N});
* the sequence is assumed to be zero elsewhere (i.e. {x[i]}=0 for i<0 and i>={@code N}).
* Typically, this sequence will represent an input signal to a system.
* @param h the second sequence (double array of length {@code M});
* the sequence is assumed to be zero elsewhere (i.e. {h[i]}=0 for i<0 and i>={@code M}).
* Typically, this sequence will represent the impulse response of the system.
* @return the convolution of {@code x} and {@code h} (double array of length {@code N} + {@code M} -1)
* @throws NullArgumentException if either {@code x} or {@code h} is null
* @throws NoDataException if either {@code x} or {@code h} is empty
* @param x First sequence.
* Typically, this sequence will represent an input signal to a system.
* @param h Second sequence.
* Typically, this sequence will represent the impulse response of the
* system.
* @return the convolution of {@code x} and {@code h}.
* This array's length will be {@code x.length + h.length - 1}.
* @throws NullArgumentException if either {@code x} or {@code h} is
* {@code null}.
* @throws NoDataException if either {@code x} or {@code h} is empty.
*
* @see <a href="http://en.wikipedia.org/wiki/Convolution">Convolution (Wikipedia)</a>
* @since 3.3
*/
public static double[] convolve(double[] x, double[] h) throws NullArgumentException, NoDataException {
public static double[] convolve(double[] x, double[] h)
throws NullArgumentException,
NoDataException {
MathUtils.checkNotNull(x);
MathUtils.checkNotNull(h);
final int lenX = x.length;
final int lenH = h.length;
final int xLen = x.length;
final int hLen = h.length;
if (lenX == 0 || lenH == 0) {
if (xLen == 0 || hLen == 0) {
throw new NoDataException();
}
// initialize the output array
final int totalLength = lenX + lenH - 1;
final int totalLength = xLen + hLen - 1;
final double[] y = new double[totalLength];
// straightforward implementation of the convolution sum
for (int n = 0; n < totalLength; n++) {
double yn = 0;
int k = FastMath.max(0, n + 1 - lenX);
int k = FastMath.max(0, n + 1 - xLen);
int j = n - k;
while (k < lenH && j >= 0) {
while (k < hLen && j >= 0) {
yn += x[j--] * h[k++];
}
y[n] = yn;
@ -1400,5 +1405,4 @@ public class MathArrays {
return y;
}
}