/* SigLib Comb Filter Example */

#include <stdio.h>
#include <siglib.h>
#include "nhl.h"

/* Define constants */
#define	SAMPLE_LENGTH		10
#define	COMB_FILTER_LENGTH	2

SLArrayIndex_t	CombFilterIndex;
SLData_t		CombFilterSum;
SLData_t		CombFilterStateArray [COMB_FILTER_LENGTH];
SLData_t		SourceArray [] = 
{
	1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0
};

SLData_t		DstArray [SAMPLE_LENGTH];

void	main(void);

void main(void)
{
	SLFixData_t	i;

	SIF_Comb (CombFilterStateArray,					/* Pointer to filter delay state array */
			  &CombFilterIndex,						/* Pointer to filter index register */
			  &CombFilterSum,						/* Pointer to filter sum register */
			  COMB_FILTER_LENGTH);					/* Filter length */

									/* Apply comb filter and store filtered data */
	for (i = 0; i < SAMPLE_LENGTH; i++)
	{
		DstArray[i] = SDS_Comb (SourceArray[i],			/* Input data sample to be filtered */
								CombFilterStateArray,	/* Pointer to filter state array */
								&CombFilterIndex,		/* Pointer to filter index register */
								&CombFilterSum,			/* Pointer to filter sum register */
								COMB_FILTER_LENGTH);	/* Filter length */
	}

	printf ("SDS_Comb results :\n");
	print_buffer (DstArray, SAMPLE_LENGTH);


	SIF_Comb (CombFilterStateArray,					/* Pointer to filter delay state array */
			  &CombFilterIndex,						/* Pointer to filter index register */
			  &CombFilterSum,						/* Pointer to filter sum register */
			  COMB_FILTER_LENGTH);					/* Filter length */

									/* Apply comb filter and store filtered data */
	SDA_Comb (SourceArray,							/* Source array pointer */
			  DstArray,								/* Destination array pointer */
			  CombFilterStateArray,					/* Pointer to filter state array */
			  &CombFilterIndex,						/* Pointer to filter index register */
			  &CombFilterSum,						/* Pointer to filter sum register */
			  COMB_FILTER_LENGTH,					/* Filter length */
			  SAMPLE_LENGTH>>1);					/* Sample length */

	printf ("SDA_Comb results [1-5]:\n");
	print_buffer (DstArray, SAMPLE_LENGTH>>1);

	SDA_Comb (SourceArray+5,						/* Source array pointer */
			  DstArray,								/* Destination array pointer */
			  CombFilterStateArray,					/* Pointer to filter state array */
			  &CombFilterIndex,						/* Pointer to filter index register */
			  &CombFilterSum,						/* Pointer to filter sum register */
			  COMB_FILTER_LENGTH,					/* Filter length */
			  SAMPLE_LENGTH>>1);					/* Sample length */

	printf ("SDA_Comb results [6-10]:\n");
	print_buffer (DstArray, SAMPLE_LENGTH>>1);
}

