code: private void validate(float[] input, float[] output, Map<Integer, ? extends Object> args) 
  	throws SmoothingFilterException {
  		
  		if(input == null)
  			throw new SmoothingFilterException(getClass(), "Input array is null.", new NullPointerException());
  		
  		if(output == null) 
  			throw new SmoothingFilterException(getClass(), "Output array is null.", new NullPointerException());
  		
  		if(input.length != output.length)
  			throw new SmoothingFilterException(getClass(), 
  					"Input array length does not match the Output array length.");
  		
  		if(args != null) {
  			
  			Set<Integer> keys = argTypes.keySet();
  			
  			for (Integer argId :keys) {
  				
  				if(!args.containsKey(argId)) {
  					
  						throw new SmoothingFilterException(getClass(), 
  								"Arguments do not contain an identifier with value " + argId + ". ");
  				}
  				
  				if(!(args.get(argId).getClass().equals(argTypes.get(argId)))) {
  				
  					StringBuilder builder = new StringBuilder()
  					.append("Arguments with identifier ")
  					.append(argId)
  					.append(" is not of registered type ")
  					.append(argTypes.get(argId).getName())
  					.append(". ");
  					
  					throw new SmoothingFilterException(getClass(), builder.toString());
  				}
  			}
  		}
  	}
docs: <p>Validates the input and output arrays along with the arguments supplied
  to the filter algorithm.
  
  @param input
  an array of floating point values which need to be filtered
  
  @param output
  the array used to populate the output values
  
  @param args
  arguments to the filtering algorithm; individual algorithms
  should define their arguments as static integer parameters
  which will be referenced by those that invoke the algorithm
  
  @throws SmoothingFilterException
  when the algorithm is erroneous or it cannot execute due to
  the supplied parameters