值班电路硬件上经过反相放大,滤波。之后由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];
}
}
网友评论