⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 iir_fixpt.c

📁 用dsp解压mp3程序的算法
💻 C
字号:
/*****************************************************************
*  iir_fixpt.c- Fixed-point C program for IIR filtering, 
*               cascade of three biquads in Section 7.7.3
******************************************************************
*  System configuration:
*
* in(n) |----------------| out(n)
*  ---->| Bandpass filter|----->
*       |----------------|
*
******************************************************************
*  System simulation configuration:
*
*     in(n) is the input data from data file "in_int.dat"
*     out(n) is the output data to data file "out_int.dat"
*
*****************************************************************/
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include "iircascade_16int.h"  

void main()
{
/*****************************************************************
*    Define variable arrays, define and clear variables
*****************************************************************/
  const int section = 3;
  const int tap = 3;
  long  out = 0;                /* y(n), output from IIR filter */
  int   xn;
  int   delay[9] = {0,0,0,0,0,0,0,0,0};
  int   gain = 133;
  int   j;
 
  /*****************************************************************
  *    Declare file pointers
  *****************************************************************/

  FILE *xn_in;                      /* file pointer of x(n)       */
  FILE *yn_out;                     /* file pointer of y(n)       */
  xn_in = fopen("in_int.dat","r");   /* open file for input x(n)  */
  yn_out = fopen("out_int.dat","w");  /* open file for output y(n)*/

  /*****************************************************************
  *    Start of main program
  *****************************************************************/

  while ((fscanf(xn_in,"%d",&xn)) != EOF)
  {     /*   read in x(n) from data file and processing it        */
	
    out=(((long)(int)xn*(long)(int)gain)>>16); 
    /***************************************************************
    *   IIR filtering: feedback follow by feedforward and repeat
    *                  for three sections
    ***************************************************************/
    
    for (j=0; j<section; j++)	
    {	  /*    feedback section      */

      out=out-(((long)(int)delay[1+(j*section)]*(long)(int16_T)(DEN[j][1]))>>15);
      delay[(j* section)]=(int)(out-(((long)(int)delay[2+(j* section)]*(long)(int16_T)DEN[j][2])>>15));

	  /*    feedforward section   */

      out=(long)(int)delay[(j* section)]+(((long)(int)delay[1+(j* section)]*(long)(int16_T)NUM[j][1])>>15);
      out=out+(((long)(int)delay[2+(j* section)]*(long)(int16_T)NUM[j][2])>>15);
		
          /*    refresh signal buffer */

      delay[2+(j* section)] = delay[1+(j* section)];
      delay[1+(j* section)] = delay[(j* section)];
    }       
    fprintf(yn_out,"%d\n",(int)(out<<1));	
  }
  printf("Finish");		      /* complete filtering     */  
  fcloseall();                        /* close all opened files */
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -