All pastes #253903 Raw Edit

Stuff

public text v1 · immutable
#253903 ·published 2006-11-21 06:57 UTC
rendered paste body
/*
 * quantizer.c: A7id3858
 *
 * I certify that this program is my sole work and I did not collaborate with 
 * any other students from the class, nor did I copy any material from a 
 * student who attended the class in a previous year.
 *
 */

#include "quantizer.h"

/****************************************************************************/

#ifndef FALSE
#define FALSE 0
#endif

#ifndef TRUE
#define TRUE 1
#endif

/****************************************************************************/

#define L1_REC calc_rec (1)
#define L2_REC calc_rec (2)

/****************************************************************************/

int calc_rec (int level)
{
	if (level == 0)
		return 0;

	if ((QUANT % 2) == 0)
		return QUANT * (2 * level + 1) - 1;
	else
		return QUANT * (2 * level + 1);
}

/****************************************************************************/

double quantize (double value)
{
	int curr_level  = 1;
	int curr_rec;
	int is_negative = FALSE;
	int level_lim   = (NUM_LEVELS - 1) / 2;
	int slope       = (L2_REC - L1_REC) / 2;
	
	/* zero case */
	if (value > (L1_REC - slope)*(-1) && value < (L1_REC - slope))
		return 0.0;
	
	if (value < 0.0)
	{
		is_negative = TRUE;
		value = value * -1;
	}
	
	while (curr_level < level_lim)
	{
		curr_rec = calc_rec (curr_level);
	
		if (value >= (curr_rec - slope) && value < (curr_rec + slope))
			return !is_negative ? (curr_rec - slope) : (curr_rec - slope) * -1;
	
		curr_level++;
	}
	
	/* if we got here, curr_level >= level_lim */
	return !is_negative ? (calc_rec (level_lim) - slope) 
	                    : (calc_rec (level_lim) - slope) * -1;

}

/****************************************************************************/