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

📄 adaptnoise_pcm.c

📁 教程《DSP 原理及其 C 编程开发技术》中的源代码
💻 C
字号:
//Adaptnoise_pcm.c  Adaptive FIR for noise cancellation using PCM3003

#define beta 1E-12        		  //rate of convergence     
#define N 30                  	  //# of weights (coefficients)   
#define LEFT 1				  //left channel
#define RIGHT 0			        //right channel
float w[N];                  	        //weights for adapt filter
float delay[N];              	        //input buffer to adapt filter  
float Fs = 8000.0;                    //sampling rate
short output;		              //overall output 
short out_type = 1;         	        //output type for slider 
volatile union{unsigned int uint; short channel[2];}CODECData;

interrupt void c_int11()      	  //ISR
 {                         
  short i;
  float yn=0, E=0, dplusn=0, desired=0, noise=0;    
  
  CODECData.uint = input_sample();    //input 32-bit from both channels
  desired = (float) CODECData.channel[LEFT]; //input left channel
  noise = (float) CODECData.channel[RIGHT];  //input right channel
  
  dplusn = desired + noise;           //desired+noise
  delay[0] = noise;		        //noise as input to adapt FIR
    
  for (i = 0; i < N; i++)             //to calculate out of adapt FIR
	yn += (w[i] * delay[i]);        //output of adaptive filter
  
  E = (desired + noise) - yn;         //"error" signal=(d+n)-yn   
          			
  for (i = N-1; i >= 0; i--)          //to update weights and delays
   {            
	w[i] = w[i] + beta*E*delay[i];  //update weights   
   	delay[i] = delay[i-1];          //update delay samples   
   }  
  if (out_type == 1)		     	  //if slider in position 1				
	output = ((short)E);         	  //error signal as overall output  
  else if (out_type == 2)      	  
    	output=((short)dplusn);      	  //desired+noise
    
  output_left_sample(output);	        //overall output result	
  return;
}

 void main()
{
  short T=0;                          
  for (T = 0; T < 30; T++)
   {
   	w[T] = 0;				  //init buffer for weights
   	delay[T] = 0;			  //init buffer for delay samples
   } 
  comm_intr();                 	  //init DSK, codec, McBSP
  while(1);                    	  //infinite loop
}

⌨️ 快捷键说明

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