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

📄 ale_fixpt_intr.c

📁 用dsp解压mp3程序的算法
💻 C
字号:
/*****************************************************************
*  ale_fixpt_intr.c - Fixed-point C program for ALE using
*                     C5000 intrinsics and tested on CCS
******************************************************************
*  System configuration:
*
* d(n) ---------------------------
*     |             /             |
* d(n-1)|----------------| out(n) V
*  ---->| ALE (LMS-FIR)  |-----> |+|-------->
*       |----------------|     -       | 
*             /________________________|
*
******************************************************************
*  System simulation configuration:
*
*     d(n) is the input data from data file "in_int_ccs.dat"
*****************************************************************/

#include <stdio.h>
#include <stdlib.h>
#include <math.h>

int in_buffer[500];
int out_buffer[500];
int err_buffer[500]; 
#define TRUE 1

/*    Functions   */
static int aleproc(int *input, int *output, int *error);
static void dataIO(void);

void main()
{
  /***************************************************************
  *    Declare file pointers
  ***************************************************************/

  int *input = &in_buffer[0];
  int *output= &out_buffer[0];
  int *error= &err_buffer[0]; 

  /***************************************************************
  *    Start of main program
  ***************************************************************/
 
  while(TRUE)
  {           /* read in x(n) from data file and processing it  */
    dataIO();
    aleproc(input, output, error);  
  }
}

/*    C aleproc function for ALE processing                     */

static int aleproc(int *input, int *output, int *error)
{
  /***************************************************************
  *    Define variable arrays, define and clear variables
  ***************************************************************/

  #define NL 16		     /* length of FIR filter            */
  long yn = 0;               /* y(n), output from filter        */
  int xnbuf[16];
  int w[16];
  int i,j,k;
  int mu = 338;		     /* 33(0.001); 338(0.01); 655(0.02) */
  int mu_err,err;
  int dn = 0;
  int size = 500;
  long temp = 0;
  
  /***************************************************************
  *    Start of main program
  ***************************************************************/
  for(k=0;k<NL;k++){
    xnbuf[k]=0;              /* clear signal buffer             */
    w[k] = 0;                /* clear coefficient buffer        */
  }

  while(size--)
  {     		
    for (i=NL-1;i>0;i--)
    {
      xnbuf[i]=xnbuf[i-1];   /* refresh signal buffer           */
    }
    xnbuf[0]=dn;
    dn = *input++;           /* delayed version of xn           */

    /*************************************************************
    *    FIR filtering:
    *         y(n) = sum[x(n-i)*w(i)] for i = 0 to NL-1
    *************************************************************/
    yn = 0; 
    
    for (j=0; j< NL; j++)
    {
      temp = _lsmpy(xnbuf[j],w[j])>>16;
      yn = _lsadd(yn,temp);
    } 
    
    err = dn-yn;             /* e(n) = d(n) - y(n)              */
    mu_err = (int)(_lsmpy(2*mu,err)>>16);

    /*   update filter coefficient                              */

    for (k=0; k< NL; k++)    {
      temp = (int)(_lsmpy(mu_err,xnbuf[k])>>16);
      w[k] = _lsadd(w[k],temp);  
    } 
    *output++ = (int)(yn);   /* save output signal y(n)         */	
    *error++ = (int)(err);   /* save error signal e(n)          */
  }
  return(TRUE);
}

/*    Function for dataIO   */

static void dataIO()
{
  return;
}

⌨️ 快捷键说明

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