while(1)
{
#if 1
secret_val = 0;
for(i=0;i<8;i++)
{
k = rand()%(MAX_RAND-MIN_RAND+1)+MIN_RAND;//随机产生4字节数据
secret_val |= (k<<(4*i));
}
#endif
//如果上面产生的数据是secret_val = 0x12345678
tmp = secret_val;
#if 1
for(k=0;k<8;k++)
{
for(i=0;i<SampleLong;i++)
{
DDDataBuffer = 0;
}
step_sin= (Uint32)(secret_val&0x0000000f);//每四位进行产生不同频率的正弦波
step_sin += 1;//为了消除0时产生不了正弦波
for(i=0;i<30;i++)
{
for(s=0;s<SampleLong;) //每个数字位发送SampleLong个波形
{
for(j=0;j<256;j+=step_sin)
{
while (!MCBSP_xrdy(hMcbsp)) {};
/*发送数据*/
MCBSP_write16(hMcbsp,(short)sine_tbl[j]);//产生正弦波,正弦波频率根据step_sin步进数变化
while(!MCBSP_rrdy(hMcbsp)){};
DataTemp = (short)MCBSP_read16(hMcbsp);
while(!MCBSP_rrdy(hMcbsp)){};
DataTemp = (short)MCBSP_read16(hMcbsp);
DataBuffer = DataTemp;//然后读取A/D转换结果存入BUFFER
DataTemp=fir_filter(DataBuffer);
DDDataBuffer = DataTemp;
/* if(DataBuffer>>8 == 0xfff7)
{
s=1024;
j=256;
}
*/ s++;
}
}
#if 1
m=0;
for(j=0;j<1024;j++)//判断数据是否有效
{
if(DataBuffer[j]>>8 == 0xfff7)
{
m++;
}
}
if(m < 10)//如果有效则跳出i循环
break;
#endif
}
secret_val >>= 4;
#endif
#if 0
while(!MCBSP_rrdy(hMcbsp)){};
DataTemp = MCBSP_read16(hMcbsp);
while(!MCBSP_rrdy(hMcbsp)){};
DataTemp = MCBSP_read16(hMcbsp);
DataBuffer = DataTemp;
DataTemp=fir_filter(DataBuffer);
DDDataBuffer = DataTemp;
#endif
//}
#if 1
/*FFT变换*/
for(i=0;i<(SampleLong/2);i++)
{
DDataBuffer.real=DDDataBuffer[2*i]; //short int
DDataBuffer.imag=DDDataBuffer[2*i+1]; //short int
}
for(i=0;i<512;i++)
{
mod[0] = 0;
}
/*1024 point*/
fft1024(DDataBuffer,1024);
m=0;
for(i=0;i<512;i++)
{
p=DDataBuffer.real;
q=DDataBuffer.imag;
n=(long)p*(long)p+(long)q*(long)q;
//n=(Uint32)(p*p+q*q);
mod[m]=sqrt(n);
m++;
}
signal_f[k] = fum(mod,512);//获取频率值
if(signal_f[k] > 13 && signal_f[k] < 19)
{
valid_flag = 1;
}
else if(signal_f[k] > 21 && signal_f[k] < 27)
{
valid_flag = 2;
}
else if(signal_f[k] > 30 && signal_f[k] < 34)
{
valid_flag = 3;
}
else if(signal_f[k] > 37 && signal_f[k] < 43)
{
valid_flag = 4;
}
else if(signal_f[k] > 45 && signal_f[k] < 51)
{
valid_flag = 5;
}
else if(signal_f[k] >53 && signal_f[k] < 59)
{
valid_flag = 6;
}
else if(signal_f[k] >61 && signal_f[k] < 69)
{
valid_flag = 7;
}
else if(signal_f[k] >68 && signal_f[k] < 75)
{
valid_flag = 8;
}
else
{
valid_flag = 0;
}
//secret_val_re <<= 4;
secret_val_re |= (valid_flag<<(4*k)); //主要是把数据做移位处理,为了和发送的数据相同
//此处打断点获得的数据是每次都是正确的
//delay_ms(DLY_VAL);
}
if(tmp == secret_val_re)//如果接受和发送的相同
{
strcpy(match,"sucess");
// t++;
}
else
{
strcpy(match,"fail");
//f++;
}
secret_val_re = 0;
//如果把上面断点去掉,然后在此处打断点获得的4个字节数据就错误了
//secret_val = tmp;
#endif
}
|