Sign in

username:

password:



Not a member?

Search audiodsp



Search tips

Subscribe to audiodsp



audiodsp by Keywords

AAC | ADPCM | Convolution | DAFx | FFT | IIR | Mixer | MP3 | MPEG | MPEG-4

Discussion Groups

Discussion Groups | Audio Signal Processing | FIR & IIR : design,filtering

Technical discussions related to Audio Signal Processing (digital effects, acoustics, noise reduction, musical signal processing, etc).

  

Post a new Thread

FIR & IIR : design,filtering - akin...@hotmail.com - Apr 23 13:15:43 2008



Hello

I am using some FIR and IIR filters. I use coefficients from Dsptutor's java applets. First of
all , have you ever experienced Dpstutor's designs on projects ? 

I am using fir and iir filtering functions from Paul Embree's book. I am building a PC\Windows
application using Directshow and Winapi.

In my application , I use these filtering functions with coefficients I already got , but
unfortunately they seem not working.  I mean , you can't hear any sound after a few seconds. I
am pasting my filtering functions , if it is possible  can you check them for any errors ? 

/*
	INPUT			fInput				input for filter
	INPUT			pCoefficients		address of filter coefficients
	INPUT			nCoefficientNumber	number of coefficients
	INPUT\OUTPUT	pMemory				address of past values
*/

float FIRFilterEvaluate (float fInput,float* pCoefficients,int nCoefficientNumber,float*
pMemory) 
{
	int i ;
	float *pMemoryPositioner,*pMemoryPositionerTemp,*pCoefficientPositioner ;
	float fOutput ;

	pMemoryPositioner = pMemory ; // We get address of pMemory to make processes on it
	pMemoryPositionerTemp = pMemoryPositioner ; // To update original history , we need a temp
pointer
	pCoefficientPositioner = pCoefficients + nCoefficientNumber - 1 ; // We move the pointer to
last coefficient

	// WE WILL MAKE SUMMATION OF "nCoefficientNumber" MULTIPLICATIONS 

	fOutput = *pMemoryPositioner++ * (*pCoefficientPositioner--); // We gave first multiplication
to summation

	for(i=2 ; i<nCoefficientNumber ; i++)
	{
		*pMemoryPositionerTemp++ = *pMemoryPositioner ;
		fOutput += (*pMemoryPositioner++) * (*pCoefficientPositioner--) ;
	}

	fOutput += fInput * (*pCoefficientPositioner) ;  // We gave last multiplication to summation

	*pMemoryPositionerTemp = fInput ;

	return fOutput  ;
}

float IIRFilterEvaluate ( float fInput,float* pCoefficients ,int n,
float * pMemory)
{
	int i ;
	float *pMemoryPositionerTemp1 ,*pMemoryPositionerTemp2,*pCoefficientPositioner ;
	float fOutput,new_hist,history1,history2  ;
	
	pCoefficientPositioner = pCoefficients ;
	pMemoryPositionerTemp1 = pMemory ;
	pMemoryPositionerTemp2 = pMemoryPositionerTemp1 + 1 ;
	
	fOutput = fInput * (*pCoefficientPositioner++);
	
	for(i=0 ; i<n ; i++)
	{

		history1 = *pMemoryPositionerTemp1 ;
		history2 = *pMemoryPositionerTemp2 ;
		
		fOutput = fOutput - history1 * (*pCoefficientPositioner++);
		new_hist = fOutput - history2 * (*pCoefficientPositioner++); // poles
		
		fOutput = new_hist + history1 * (*pCoefficientPositioner++);
		fOutput = fOutput + history2 * (*pCoefficientPositioner++ ) ; // zeros
		
		*pMemoryPositionerTemp2++ = *pMemoryPositionerTemp1 ;
		*pMemoryPositionerTemp1++ = new_hist ;
		
		pMemoryPositionerTemp1++ ;
		pMemoryPositionerTemp2++ ;
	}
		
	return fOutput ;
}

------------------------------------



(You need to be a member of audiodsp -- send a blank email to audiodsp-subscribe@yahoogroups.com )