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

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. int inp1_buffer[BUFSIZE];
  20. int inp2_buffer[BUFSIZE];       /* processing data buffers */
  21. int out1_buffer[BUFSIZE];
  22. int out2_buffer[BUFSIZE];
  23. int out3_buffer[BUFSIZE];
  24. int out4_buffer[BUFSIZE*2];
  25. int size = BUFSIZE;
  26. int ain = MINGAIN;
  27. int zhy=0;
  28. int sk=64;        /*sk代表所开的bufsize的大小,需修改它.输入文件sine.dat为32点,sine11.dat,
  29.                     sin22.dat,sin33.dat,sin44.dat为64点的输入波形.*/
  30.                   /* volume control variable */
  31. unsigned int processingLoad = 1;  /* processing routine load value */
  32. /* Functions */
  33. extern void load(unsigned int loadValue);
  34. static int processing1(int *output1, int *output2);
  35. static int processing2(int *output2, int *output3); 
  36. static int processing3(int *input1,int *output2,int *output4);
  37. static int processing4(int *input2, int *output1);
  38. static void dataIO1(void);
  39. static void dataIO2(void);
  40. /*
  41.  * ======== main ========
  42.  */
  43. void main()
  44. {
  45.     int *input1 = &inp1_buffer[0];
  46.     int *input2 = &inp2_buffer[0];
  47.     int *output1 = &out1_buffer[0];
  48.     int *output2 = &out2_buffer[0];
  49.     int *output3 = &out3_buffer[0];
  50.     int *output4 = &out4_buffer[0];
  51.     puts("volume example startedn");
  52.     /* loop forever */
  53.     while(TRUE)
  54.     {       
  55.         /* 
  56.          *  Read input data using a probe-point connected to a host file. 
  57.          *  Write output data to a graph connected through a probe-point.
  58.          */
  59.         dataIO1();
  60.         dataIO2();
  61.         /* apply gain */ 
  62.         processing4(input2,output1);
  63.         processing1(output1, output2); 
  64.         processing2(output2, output3);
  65.         processing3(input1,output2,output4) ;
  66.     }
  67. }
  68. /*
  69.  *  ======== processing ========
  70.  *
  71.  * FUNCTION: apply signal processing transform to input signal.
  72.  *
  73.  * PARAMETERS: address of input and output buffers.
  74.  *
  75.  * RETURN VALUE: TRUE.
  76.  */
  77. static int processing4(int *input2,int *output1)
  78. {   int m=sk;
  79.     for(;m>=0;m--)
  80.    {
  81.         *output1++ = *input2++ * ain;
  82.     }
  83.    for(;(size-m)>0;m++)
  84.    {output1[m]=0;
  85.    }
  86.     load(processingLoad); 
  87.     return(TRUE);
  88.     
  89.     }
  90.  
  91. static int processing1(int *output1,int *output2)
  92. {  
  93.     int m=sk-1;  
  94.    for(;m>0;m--)
  95.    {
  96.         *output2++ = *output1++ * ain;
  97.     }
  98.    
  99.     /* additional processing load */
  100.     load(processingLoad); 
  101.     return(TRUE);
  102. }
  103. static int processing2(int *output2, int *output3)
  104. {   int n=zhy;
  105.    
  106.     size=BUFSIZE; 
  107.     for(;(size-n)>0;n++)
  108.     { *output3++ = output2[n];
  109.     }
  110.     /* for (;n>0;n--)
  111.     { *output3++ = 0;
  112.     }  */
  113.     load(processingLoad);
  114.     return(TRUE);
  115.     }
  116. static int processing3(int *input1,int *output2,int *output4)
  117. {   int m=sk;
  118.     int y=zhy;
  119.     int z,x,w,i,f,g;
  120.     for(;(m-y)>0;)
  121.     {i=y;
  122.      x=0;
  123.      z=0;
  124.      f=y;
  125.      for(;i>=0;i--)
  126.      {g=input1[z]*output2[f];
  127.       x=x+g;
  128.      z++;
  129.      f--;
  130.      }
  131.      *output4++ = x;
  132.      y++;
  133.      }
  134.      m=sk;
  135.      y=sk-1;
  136.      w=m-zhy-1;
  137.     for(;m>0;m--)
  138.     {
  139.      y--;
  140.      i=y;
  141.      z=sk-1;
  142.      x=0;
  143.      f=sk-y;
  144.      for(;i>0;i--,z--,f++)
  145.      {g=input1[z]*output2[f];
  146.      x=x+g;
  147.      
  148.      }
  149.      out4_buffer[w]=x;
  150.      w++;
  151.      }
  152.      load(processingLoad);
  153.      return(TRUE);
  154.      }  
  155. /*
  156.  *  ======== dataIO ========
  157.  *
  158.  * FUNCTION: read input signal and write processed output signal.
  159.  *
  160.  * PARAMETERS: none.
  161.  *
  162.  * RETURN VALUE: none.
  163.  */
  164. static void dataIO1()
  165. {
  166.     /* do data I/O */
  167.     return;
  168. }
  169. static void dataIO2()
  170. {
  171.     /* do data I/O */
  172.     return;
  173. }