This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

dsk6713 iir program....

Dear sir,

I am working with iir program...attached the code....in that "temp is shifting 15 times and at the end again temp is shifting 2 times right"...why ..?

thank you

#include "IIRcfg.h"

#include "C:\CCStudio_v3.1\C6000\dsk6713\include\dsk6713.h"
#include "C:\CCStudio_v3.1\C6000\dsk6713\include\dsk6713_aic23.h"

const signed int filter_Coeff[] = 
{
     //12730,-12730,12730,32767,-18324,21137 /*HP 2500 */
     //312,312,312,32767,-27943,24367       /*LP 800 */
     //1455,1455,1455,32767,-23140,21735	/*LP 2500 */
     //9268,-9268,9268,32767,-7395,18367	/*HP 4000*/
	7215,-7215,7215,32767,5039,6171,		/*HP 7000*/

};

/* Codec configuration settings */
DSK6713_AIC23_Config config = { \
    0x0017,  /* 0 DSK6713_AIC23_LEFTINVOL  Left line input channel volume */ \
    0x0017,  /* 1 DSK6713_AIC23_RIGHTINVOL Right line input channel volume */\
    0x00d8,  /* 2 DSK6713_AIC23_LEFTHPVOL  Left channel headphone volume */  \
    0x00d8,  /* 3 DSK6713_AIC23_RIGHTHPVOL Right channel headphone volume */ \
    0x0011,  /* 4 DSK6713_AIC23_ANAPATH    Analog audio path control */      \
    0x0000,  /* 5 DSK6713_AIC23_DIGPATH    Digital audio path control */     \
    0x0000,  /* 6 DSK6713_AIC23_POWERDOWN  Power down control */             \
    0x0043,  /* 7 DSK6713_AIC23_DIGIF      Digital audio interface format */ \
    0x0081,  /* 8 DSK6713_AIC23_SAMPLERATE Sample rate control */            \
    0x0001   /* 9 DSK6713_AIC23_DIGACT     Digital interface activation */   \
};


/*
 *  main() - Main code routine, initializes BSL and generates tone
 */

void main()
{
    DSK6713_AIC23_CodecHandle hCodec;
    
    int l_input, r_input, l_output, r_output;
    
    /* Initialize the board support library, must be called first */
    DSK6713_init();
     
    /* Start the codec */
    hCodec = DSK6713_AIC23_openCodec(0, &config);
    
    DSK6713_AIC23_setFreq(hCodec, 3);
    
       while(1)
        {	/* Read a sample to the left channel */
			while (!DSK6713_AIC23_read(hCodec, &l_input));
			
			/* Read a sample to the right channel */
			while (!DSK6713_AIC23_read(hCodec, &r_input));          
			
				l_output=IIR_FILTER(&filter_Coeff ,l_input);
 		 	    r_output=l_output;
 		 	    
			/* Send a sample to the left channel */
            while (!DSK6713_AIC23_write(hCodec, l_output));

            /* Send a sample to the right channel */
            while (!DSK6713_AIC23_write(hCodec, r_output));
        }
   

    /* Close the codec */
    DSK6713_AIC23_closeCodec(hCodec);
}


signed int IIR_FILTER(const signed int * h, signed int x1)
{
	static signed int x[6] = { 0, 0, 0, 0, 0, 0 };  /* x(n), x(n-1), x(n-2). Must be static */
  	static signed int y[6] = { 0, 0, 0, 0, 0, 0 };  /* y(n), y(n-1), y(n-2). Must be static */ 
    int temp=0;

  temp = (short int)x1; /* Copy input to temp */

  x[0] = (signed int) temp; /* Copy input to x[stages][0] */
    
  temp =  ( (int)h[0] * x[0]) ;   /* B0 * x(n)   */
  
     temp += ( (int)h[1] * x[1]);    /* B1/2 * x(n-1) */
	 temp += ( (int)h[1] * x[1]);    /* B1/2 * x(n-1) */
     temp += ( (int)h[2] * x[2]);    /* B2 * x(n-2) */
  
     temp -= ( (int)h[4] * y[1]);    /* A1/2 * y(n-1) */
  	 temp -= ( (int)h[4] * y[1]);    /* A1/2 * y(n-1) */
     temp -= ( (int)h[5] * y[2]);   /* A2 * y(n-2) */
 
    /* Divide temp by coefficients[A0] */    

     temp >>= 15;

    if ( temp > 32767 )
       {
         temp = 32767;
       }
     else if ( temp < -32767)
       {
         temp = -32767;
       }
 y[0] =  temp ;

     /* Shuffle values along one place for next time */
  
     y[2] = y[1];   /* y(n-2) = y(n-1) */
     y[1] = y[0];   /* y(n-1) = y(n)   */
    
     x[2] = x[1];   /* x(n-2) = x(n-1) */
     x[1] = x[0];   /* x(n-1) = x(n)   */

     /* temp is used as input next time through */
   
  return (temp<<2); 
}