fir.c
上传用户:dahaojd
上传日期:2008-01-29
资源大小:14357k
文件大小:3k
源码类别:

DSP编程

开发平台:

C/C++

  1. /*
  2.  *  Copyright 2001 by Texas Instruments Incorporated.
  3.  *  All rights reserved. Property of Texas Instruments Incorporated.
  4.  *  Restricted rights to use, duplicate or disclose this code are
  5.  *  granted through contract.
  6.  *  U.S. Patent Nos. 5,283,900  5,392,448
  7.  */
  8. /* "@(#) DSP/BIOS 4.51.0 05-23-01 (barracuda-i10)" */
  9. /***************************************************************************/
  10. /*                                                                         */
  11. /*     V O L U M E . C                                                     */
  12. /*                                                                         */
  13. /*     Audio gain processing in a main loop                                */
  14. /*                                                                         */
  15. /***************************************************************************/
  16. #include <stdio.h>
  17. #include "volume.h"
  18. /* Global declarations */
  19. short inp_buffer[BUFSIZE];       /* processing data buffers */
  20. short out_buffer[BUFSIZE]={0x00000000,
  21. 0x0000000f,
  22. 0x0000001e,
  23. 0x0000002d,
  24. 0x0000003a,
  25. 0x00000046,
  26. 0x00000050,
  27. 0x00000059};
  28. short h[BUFSIZE]={1,2,3,4,5,6,7,8};
  29. int gain = MINGAIN;                      /* volume control variable */
  30. unsigned int processingLoad = BASELOAD;  /* processing routine load value */
  31. struct PARMS str =
  32. {
  33.     2934,
  34.     9432,
  35.     213,
  36.     9432,
  37.     &str
  38. };
  39. /* Functions */
  40. extern void load(unsigned int loadValue);
  41. static int processing(short *input, short *output);
  42. static void dataIO(void);
  43. void fir8(short x[], short h[], short y[], int N, int M)
  44. {
  45. int i, j, sum;
  46.             for (j = 0; j < M; j++) {
  47. sum = 0;
  48. for (i = 0; i < N; i++)
  49. sum += x[i + j] * h[i];
  50. y[j] = sum >> 15;
  51. }
  52. }
  53. /*
  54.  * ======== main ========
  55.  */
  56. void main()
  57. {
  58.     short *input = &inp_buffer[0];
  59.     short *output = &out_buffer[0];
  60.     
  61.     puts("volume example startedn");
  62.     /* loop forever */
  63.     while(TRUE)
  64.     {       
  65.         /* 
  66.          *  Read input data using a probe-point connected to a host file. 
  67.          *  Write output data to a graph connected through a probe-point.
  68.          */
  69.         dataIO();
  70.         #ifdef FILEIO
  71.         puts("begin processing")        /* deliberate syntax error */
  72.         #endif
  73.         
  74.         /* apply gain */
  75.         processing(input, output);
  76.     }
  77. }
  78. /*
  79.  *  ======== processing ========
  80.  *
  81.  * FUNCTION: apply signal processing transform to input signal.
  82.  *
  83.  * PARAMETERS: address of input and output buffers.
  84.  *
  85.  * RETURN VALUE: TRUE.
  86.  */
  87. static int processing(short *input, short *output)
  88. {
  89.     fir8( input, &h[0],output, 8, 2);
  90.     /* additional processing load */
  91.     load(processingLoad);
  92.     
  93.     return(TRUE);
  94. }
  95. /*
  96.  *  ======== dataIO ========
  97.  *
  98.  * FUNCTION: read input signal and write processed output signal.
  99.  *
  100.  * PARAMETERS: none.
  101.  *
  102.  * RETURN VALUE: none.
  103.  */
  104. static void dataIO()
  105. {
  106.     /* do data I/O */
  107.     return;
  108. }