/*
* File: AutoRegressiveMovingAverageFilterTest.java
* Authors: Kevin R. Dixon
* Company: Sandia National Laboratories
* Project: Cognitive Foundry
*
* Copyright Feb 24, 2009, Sandia Corporation.
* Under the terms of Contract DE-AC04-94AL85000, there is a non-exclusive
* license for use of this work by or on behalf of the U.S. Government.
* Export of this program may require a license from the United States
* Government. See CopyrightHistory.txt for complete details.
*
*/
package gov.sandia.cognition.math.signals;
import gov.sandia.cognition.collection.FiniteCapacityBuffer;
import gov.sandia.cognition.math.matrix.Vector;
import gov.sandia.cognition.math.matrix.VectorFactory;
import gov.sandia.cognition.util.Pair;
import java.util.Random;
import junit.framework.TestCase;
/**
* Unit tests for AutoRegressiveMovingAverageFilter.
*
* @author krdixon
*/
public class AutoRegressiveMovingAverageFilterTest
extends TestCase
{
Random random = new Random( 1 );
/**
* Tests
* @param testName Name of test.
*/
public AutoRegressiveMovingAverageFilterTest(
String testName)
{
super(testName);
}
public void testConstructors()
{
System.out.println( "Constructors" );
final int na = 2;
final int nb = 3;
AutoRegressiveMovingAverageFilter instance =
new AutoRegressiveMovingAverageFilter( na, nb );
assertEquals( na, instance.getNumAutoRegressiveCoefficients() );
assertEquals( nb, instance.getNumMovingAverageCoefficients() );
for( int n = 0; n < na; n++ )
{
assertEquals( 1.0/na, instance.getAutoRegressiveCoefficients().getElement( n ) );
}
for( int n = 0; n < nb; n++ )
{
assertEquals( 1.0/nb, instance.getMovingAverageCoefficients().getElement( n ) );
}
double[] a = { random.nextGaussian(), random.nextGaussian(), random.nextGaussian() };
double[] b = { random.nextGaussian(), random.nextGaussian() };
instance = new AutoRegressiveMovingAverageFilter( a, b );
for( int n = 0; n < a.length; n++ )
{
assertEquals( a[n], instance.getAutoRegressiveCoefficients().getElement( n ) );
}
for( int n = 0; n < b.length; n++ )
{
assertEquals( b[n], instance.getMovingAverageCoefficients().getElement( n ) );
}
}
/**
* Test of createDefaultState method, of class AutoRegressiveMovingAverageFilter.
*/
public void testCreateDefaultState()
{
System.out.println( "createDefaultState" );
final int na = 2;
final int nb = 3;
AutoRegressiveMovingAverageFilter instance =
new AutoRegressiveMovingAverageFilter( na, nb );
Pair<FiniteCapacityBuffer<Double>, FiniteCapacityBuffer<Double>> result = instance.createDefaultState();
assertNotNull( result );
assertEquals( nb, result.getFirst().getCapacity() );
assertEquals( na, result.getSecond().getCapacity() );
}
/**
* Test of evaluate method, of class AutoRegressiveMovingAverageFilter.
*/
public void testEvaluate()
{
System.out.println( "evaluate" );
double[] a = { -1.0, 2.0 };
double[] b = { 3.0, -2.0, 1.0 };
AutoRegressiveMovingAverageFilter instance =
new AutoRegressiveMovingAverageFilter( a, b );
double x0 = 2.0;
double y0 = b[0]*x0;
assertEquals( y0, instance.evaluate( x0 ) );
double x1 = -1.0;
double y1 = b[0]*x1 + b[1]*x0 - a[0]*y0;
assertEquals( y1, instance.evaluate( x1 ) );
double x2 = 3.0;
double y2 = b[0]*x2 + b[1]*x1 + b[2]*x0 - a[0]*y1 - a[1]*y0;
assertEquals( y2, instance.evaluate( x2 ) );
double x3 = -2.0;
double y3 = b[0]*x3 + b[1]*x2 + b[2]*x1 - a[0]*y2 - a[1]*y1;
assertEquals( y3, instance.evaluate( x3 ) );
}
/**
* Test of clone method, of class AutoRegressiveMovingAverageFilter.
*/
public void testClone()
{
System.out.println( "clone" );
double[] a = { -1.0, 2.0 };
double[] b = { 3.0, -2.0, 1.0 };
AutoRegressiveMovingAverageFilter instance =
new AutoRegressiveMovingAverageFilter( a, b );
AutoRegressiveMovingAverageFilter clone = instance.clone();
assertNotSame( instance, clone );
assertNotSame( instance.getState(), clone.getState() );
assertNotSame( instance.getAutoRegressiveCoefficients(), clone.getAutoRegressiveCoefficients() );
assertEquals( instance.getAutoRegressiveCoefficients(), clone.getAutoRegressiveCoefficients() );
assertNotSame( instance.getMovingAverageCoefficients(), clone.getMovingAverageCoefficients() );
assertEquals( instance.getMovingAverageCoefficients(), clone.getMovingAverageCoefficients() );
}
/**
* Test of convertToVector method, of class AutoRegressiveMovingAverageFilter.
*/
public void testConvertToVector()
{
System.out.println( "convertToVector" );
Vector a = VectorFactory.getDefault().copyValues( -1.0, 2.0 );
Vector b = VectorFactory.getDefault().copyValues( 3.0, -2.0, 1.0 );
AutoRegressiveMovingAverageFilter instance =
new AutoRegressiveMovingAverageFilter( a, b );
Vector result = instance.convertToVector();
int M = a.getDimensionality();
int N = b.getDimensionality();
assertEquals( M+N, result.getDimensionality() );
for( int i = 0; i < M; i++ )
{
assertEquals( a.getElement( i ), result.getElement( i ) );
}
for( int i = 0; i < N; i++ )
{
assertEquals( b.getElement( i ), result.getElement( i + M ) );
}
}
/**
* Test of convertFromVector method, of class AutoRegressiveMovingAverageFilter.
*/
public void testConvertFromVector()
{
System.out.println( "convertFromVector" );
Vector a = VectorFactory.getDefault().copyValues( -1.0, 2.0 );
Vector b = VectorFactory.getDefault().copyValues( 3.0, -2.0, 1.0 );
AutoRegressiveMovingAverageFilter instance =
new AutoRegressiveMovingAverageFilter( a, b );
Vector result = instance.convertToVector();
Vector r2 = result.scale( random.nextGaussian() );
instance.convertFromVector( r2 );
Vector r2hat = instance.convertToVector();
assertNotSame( r2, r2hat );
assertEquals( r2, r2hat );
try
{
instance.convertFromVector( a.stack( a ) );
fail( "Wrong dimension!" );
}
catch (Exception e)
{
System.out.println( "Good: " + e );
}
}
/**
* Test of getNumMovingAverageCoefficients method, of class AutoRegressiveMovingAverageFilter.
*/
public void testGetNumMovingAverageCoefficients()
{
System.out.println( "getNumMovingAverageCoefficients" );
Vector a = VectorFactory.getDefault().copyValues( -1.0, 2.0 );
Vector b = VectorFactory.getDefault().copyValues( 3.0, -2.0, 1.0 );
AutoRegressiveMovingAverageFilter instance =
new AutoRegressiveMovingAverageFilter( a, b );
assertSame( b.getDimensionality(), instance.getNumMovingAverageCoefficients() );
instance = new AutoRegressiveMovingAverageFilter( (Vector) null, (Vector) null );
assertEquals( 0, instance.getNumMovingAverageCoefficients() );
}
/**
* Test of getMovingAverageCoefficients method, of class AutoRegressiveMovingAverageFilter.
*/
public void testGetMovingAverageCoefficients()
{
System.out.println( "getMovingAverageCoefficients" );
Vector a = VectorFactory.getDefault().copyValues( -1.0, 2.0 );
Vector b = VectorFactory.getDefault().copyValues( 3.0, -2.0, 1.0 );
AutoRegressiveMovingAverageFilter instance =
new AutoRegressiveMovingAverageFilter( a, b );
assertSame( b, instance.getMovingAverageCoefficients() );
}
/**
* Test of setMovingAverageCoefficients method, of class AutoRegressiveMovingAverageFilter.
*/
public void testSetMovingAverageCoefficients()
{
System.out.println( "setMovingAverageCoefficients" );
Vector a = VectorFactory.getDefault().copyValues( -1.0, 2.0 );
Vector b = VectorFactory.getDefault().copyValues( 3.0, -2.0, 1.0 );
AutoRegressiveMovingAverageFilter instance =
new AutoRegressiveMovingAverageFilter( a, b );
instance.setMovingAverageCoefficients( null );
assertNull( instance.getMovingAverageCoefficients() );
instance.setMovingAverageCoefficients( b );
assertSame( b, instance.getMovingAverageCoefficients() );
}
/**
* Test of getNumAutoRegressiveCoefficients method, of class AutoRegressiveMovingAverageFilter.
*/
public void testGetNumAutoRegressiveCoefficients()
{
System.out.println( "getNumAutoRegressiveCoefficients" );
Vector a = VectorFactory.getDefault().copyValues( -1.0, 2.0 );
Vector b = VectorFactory.getDefault().copyValues( 3.0, -2.0, 1.0 );
AutoRegressiveMovingAverageFilter instance =
new AutoRegressiveMovingAverageFilter( a, b );
assertEquals( a.getDimensionality(), instance.getNumAutoRegressiveCoefficients() );
instance = new AutoRegressiveMovingAverageFilter( (Vector) null, (Vector) null );
assertEquals( 0, instance.getNumAutoRegressiveCoefficients() );
}
/**
* Test of getAutoRegressiveCoefficients method, of class AutoRegressiveMovingAverageFilter.
*/
public void testGetAutoRegressiveCoefficients()
{
System.out.println( "getAutoRegressiveCoefficients" );
Vector a = VectorFactory.getDefault().copyValues( -1.0, 2.0 );
Vector b = VectorFactory.getDefault().copyValues( 3.0, -2.0, 1.0 );
AutoRegressiveMovingAverageFilter instance =
new AutoRegressiveMovingAverageFilter( a, b );
assertSame( a, instance.getAutoRegressiveCoefficients() );
}
/**
* Test of setAutoregressiveCoefficients method, of class AutoRegressiveMovingAverageFilter.
*/
public void testSetAutoregressiveCoefficients()
{
System.out.println( "setAutoregressiveCoefficients" );
Vector a = VectorFactory.getDefault().copyValues( -1.0, 2.0 );
Vector b = VectorFactory.getDefault().copyValues( 3.0, -2.0, 1.0 );
AutoRegressiveMovingAverageFilter instance =
new AutoRegressiveMovingAverageFilter( a, b );
instance.setAutoregressiveCoefficients( null );
assertNull( instance.getAutoRegressiveCoefficients() );
instance.setAutoregressiveCoefficients( a );
assertSame( a, instance.getAutoRegressiveCoefficients() );
}
}