📄 myproc.c
字号:
/*********************************************************/
/* */
/* DETECT.C */
/* */
/* The program is used to detect and estimate */
/* */
/* the signal received . */
/* */
/* And the program can be used when only one target. */
/* */
/* Copyright2004.11-2005.5 by FU JIN */
/* */
/*********************************************************/
void myproc()
{
int position;
int x;
int absx;
position=num_cal%0x10;
*(unsigned volatile int *)TIMER0_CTRL=0x03c5;
flag_chn=0;
add_yout=0;//add all notch-filter output
//*******update the thresh*******************
# pragma MUST_ITERATE(ChnNum,ChnNum);
for(i=0;i<ChnNum;i++)
{ ws[i]=ws[i]+(((e*u1>>15)*SINE[pXS[i]])>>15);//u=4000/32768;
wc[i]=wc[i]+(((e*u1>>15)*SINE[pXC[i]])>>15);
pXS[i]=(pXS[i]+STEP_f[i])%0x2000;
pXC[i]=(pXC[i]+STEP_f[i])%0x2000;
yout[i]=((ws[i]*SINE[pXS[i]])>>15)+((wc[i]*SINE[pXC[i]])>>15);
absout[i]=_abs(yout[i])>>4;
A[i]=A[i]+absout[i]-absout_buf[i][position];
absout_buf[i][position]=absout[i];
//THRESH_h[i]=((unsigned short)(THRESH_h[i]>>1)+A[i])>>1;
// THRESH_h[i]=((unsigned short)(THRESH_h[i]>>1)+A[i])>>1;//problem
THRESH_h[i]=100;
add_yout=add_yout+yout[i];
/***************VIFD********************/
B[i]=ws[i]*wc_p[i]-ws_p[i]*wc[i];
C[i]=ws_p[i]*ws[i]+wc_p[i]*wc[i];
ws_p[i]=ws[i];
wc_p[i]=wc[i];
}
# pragma MUST_ITERATE(ChnNum,ChnNum);
for (i=0;i<ChnNum;i++)
{
x=(B[i]<<11)/C[i] ;
absx=_abs(x);
if (absx<2048)
w[i]=atan_table[absx];
else if (absx==2048)
w[i]=4096;
else
{
absx=2048*2048/absx;
w[i]=atan_table[absx];
w[i]=8192-w[i];
}
if (x<0)
w[i]=-w[i];
}
# pragma MUST_ITERATE(ChnNum,ChnNum);
for(i=0;i<ChnNum;i++)
{
dtf[i]=w[i]*fs>>15;
sum_f[i]+=dtf[i]-dtf_buf[i][position];
sum_f2[i]+=(unsigned int)((dtf[i])*(dtf[i]))-(unsigned int)(dtf_buf[i][position]*dtf_buf[i][position]);
dtf_buf[i][position]=dtf[i];
// meanf[i]=-(sum_f[i]>>4);// 频率差
// varf[i]=(unsigned int)(sum_f2[i]>>4)-meanf[i]*meanf[i];
}
# pragma MUST_ITERATE(ChnNum,ChnNum);
for(i=0;i<ChnNum;i++)
{
if (A[i]<THRESH_h[i])
{
if(KUAN[i]>=IDENT)
{
//if (((flag_all<1)||(varf[i]<THRESH_vifd))&&((delay[i]-T_first[i])>10000))
if ((flag_all<1)||(pulse_varf[i]<THRESH_vifd))
{
delay[i]=num_cal-KUAN[i];
//if((delay[i]-T_last[i])>15000)//判断为首脉冲
if(1)
{
trans[i].pulse[flag_first[i]].width=KUAN[i];
trans[i].pulse[flag_first[i]].amp=amp[i];
trans[i].pulse[flag_first[i]].varf=pulse_varf[i];
trans[i].pulse[flag_first[i]].dtf=pulse_meanf[i];
trans[i].pulse[flag_first[i]].delay=delay[i];
T_first[i]=delay[i];
flag_first[i]++;//last last last//首脉冲个数加1
}
else
{
//除了首脉冲外的脉冲
if(num_p[i]<3)
{ way[i].pulse[num_p[i]].width=KUAN[i];
way[i].pulse[num_p[i]].amp=amp[i];
way[i].pulse[num_p[i]].varf=pulse_varf[i];
way[i].pulse[num_p[i]].dtf=pulse_meanf[i];
way[i].pulse[num_p[i]].delay=delay[i];
}
else if(amp[i]>way[i].pulse[min[i]].amp)
{ min[i]=(way[i].pulse[0].amp>way[i].pulse[1].amp)?1:0;
min[i]=(way[i].pulse[min[i]].amp>way[i].pulse[2].amp)?2:min[i];
way[i].pulse[min[i]].width=KUAN[i];
way[i].pulse[min[i]].amp=amp[i];
way[i].pulse[min[i]].varf=pulse_varf[i];
way[i].pulse[min[i]].dtf=pulse_meanf[i];
way[i].pulse[min[i]].delay=delay[i];
}
num_p[i]++;//must after up data
}
flag_chn++;
T_last[i]=delay[i];
}
}
KUAN[i]=0;
amp[i]=0;//must
}
else
{
KUAN[i]++;
if (A[i]>amp[i])
{
amp[i]=A[i];
pulse_meanf[i]=-(sum_f[i]>>4);
pulse_varf[i]=(unsigned int)(sum_f2[i]>>4)-pulse_meanf[i]*pulse_meanf[i];
//保留最大的幅度和对应的方差//problem
}
}
}
flag_all+=flag_chn-flag_buf[position];//num_cal%10 has problem
flag_buf[position]=flag_chn;//对于同一个通道这个时刻一定没有脉冲(宽度门限)
e=DATA-add_yout;
*(unsigned volatile int *)TIMER0_CTRL=0x0305;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -