值班电路 滤波检波

2014-08-01  本文已影响38人  nino天

值班电路硬件上经过反相放大,滤波。之后由MSP430的模拟通道送入单片机,单片机内置的ADC12对输入信号进行采样,转换成数字信号,数字信号通过软件上的滤波,检波,比较,对CW脉冲判决。

软件上要做的
带通滤波:发送的是单频信号,需要滤掉频谱上信号频率以外的噪声
检波:要得到时域上信号的包络
比较判决:检波之后的信号超过一定门限表示有信号到达,可以进行下一步脉宽的比较

int h2[100]={1};
 int h4[100]={0}; 
void bandpassfilter(int Len)    //FIR滤波的长度可以自定
                                //设CW信号为20ms、10ms、20ms多脉冲
{  
                                //20K采样内,2M=200点,滤波器阶数为100
  int i,j,k,n; 
  int Buff1[100]={0},Buff2[100]={0};
  int sum0,sum1;

  for(n=0;n<2*M/Len;n++)        //Len=100
  {
   for (i=0;i<Len;i++) 
   {                            // ***** fir滤波 ******
    Buff1[0]=ADC_BUF_Temp[2*M-i-Len*n];
    sum0=0;
    for(j=0;j<Len;j++)                 //卷积长度为Len
       sum0+=Buff1[j]*h2[j];
 //ADC_BUF_Temp1[i+n*len]=sum0;        //把计算得到的滤波器的输出放入缓存,送给下一步的包络检波
                                //****进行包络检波****
    Buff2[0]=sum0;
    Buff2[i]=abs(Buff2[i]);            //取绝对值
    sum1=0;                        
    for(j=0;j<Len;j++)                 //fir低通滤波  
       sum1=Buff2[j]*h4[j];
    ADC_BUF_Temp2[i+n*Len]=sum1>>15;   //包络检波后数据放入ADC_BUF_Temp2缓存,总共2N点
   for (k=0;k<Len-1;k++)
       Buff1[Len-k+1]=Buff1[Len-k];
   for (k=0;k<2M-1;k++)
       Buff2[Len-k+1]=Buff2[Len-k];
     }
   }
   for(j=0;j<M;j++)                    //ADC_BUF_Temp缓存内数据从在N处开始右移N
    {
      ADC_BUF_Temp[2*M-j]=ADC_BUF_Temp[M-j];
     }  
}
上一篇 下一篇

猜你喜欢

热点阅读