📄 wireless.c
字号:
/**************************************************************/
/* Wireless.c */
/* */
/* This File used to send and receive wireless singal */
/* */
/* By delphifx 2007/05/09 */
/* */
/**************************************************************/
//#include "Wireless.h"
/***************************Send********************************/
/* */
/* Send a byte */
/* We use this function to send a byte */
/* */
/**************************************Send*********************/
#include "Wireless.h"
#pragma DATA_SECTION (Buffer_Send,".buffers");
#pragma DATA_SECTION (Receive_Buffer, ".buffers");
#pragma DATA_SECTION (Data_Get, ".buffers");
int Buffer_Send[Fsk_Len];
int Receive_Buffer[Fsk_Len];
int Data_Get[Fsk_Len];
//int Yn[Buffer_len];
//int Float_Yn[Buffer_len+An_len/2];
//int Yw0[Buffer_len+Bn_len/2];
//int Yw1[Buffer_len+Bn_len/2];
//int BufferA[Buffer_len];//data to transfer
//low pass
/*float Low_Pass[Low_Pass_Len]=
{0.0006, 0.0010, 0.0017, 0.0030, 0.0050, 0.0079, 0.0116,
0.0162, 0.0216, 0.0274, 0.0334, 0.0392, 0.0445, 0.0488,
0.0519, 0.0535, 0.0535, 0.0519, 0.0488, 0.0445, 0.0392,
0.0334, 0.0274, 0.0216, 0.0162, 0.0116, 0.0079, 0.0050,
0.0030, 0.0017, 0.0010, 0.0006};
*/
float Low_Pass[Low_Pass_Len]={
0.0002,0.0002,0.0002,0.0002,0.0002,0.0003,0.0002
,0.0002,0.0002,0.0001,0.0000,0.0000,0.0000,0.0002
,0.0006,0.0013,0.0023,0.0037,0.0056,0.0081,0.0110
,0.0145,0.0184,0.0226,0.0270,0.0314,0.0357,0.0397
,0.0431,0.0458,0.0477,0.0487,0.0487,0.0477,0.0458
,0.0431,0.0397,0.0357,0.0314,0.0270,0.0226,0.0184
,0.0145,0.0110,0.0081,0.0056,0.0037,0.0023,0.0013
,0.0006,0.0002,0.0000,0.0000,0.0000,0.0001,0.0002
,0.0002,0.0002,0.0003,0.0002,0.0002,0.0002,0.0002
,0.0002
};
//1/8*pi pass filter
float B0[Bn_len]={
0.0025, 0.0012 , -0.0010, -0.0052 , -0.0122 , -0.0213 , -0.0310,
-0.0384, -0.0404 , -0.0342 , -0.0188, 0.0048 , 0.0334 , 0.0620,
0.0850, 0.0979 , 0.0979 , 0.0850 , 0.0620 , 0.0334 , 0.0048,
-0.0188 , -0.0342 , -0.0404, -0.0384 , -0.0310, -0.0213 , -0.0122,
-0.0052 , -0.0010 , 0.0012, 0.0025
};
//1/4*pi pass filter
float B1[Bn_len]={
0.0046, 0.0030, -0.0015 , -0.0089 , -0.0147 , -0.0107, 0.0068,
0.0298, 0.0403 , 0.0234 , -0.0175 , -0.0574 , -0.0661 , -0.0312,
0.0283, 0.0736 , 0.0736 , 0.0283 , -0.0312 , -0.0661 , -0.0574,
-0.0175, 0.0234 , 0.0403 , 0.0298 , 0.0068 , -0.0107 , -0.0147,
-0.0089 , -0.0015 , 0.0030, 0.0046
};
void Send_byte(char Byte_Send,int *Dst_Send,int *Buffer,int Buffer_Size)
{
int i,k;
int N_Per_byte;
char n;
N_Per_byte=Buffer_Size/8;
for (i=0;i<8;i++)
{
n = Byte_Send>>i&0x01;
// printf("n=%d\n",n);
for (k=i*N_Per_byte;k<(i+1)*N_Per_byte;k++)
{
if (n==1) Buffer[k]=(int)2048*cos(k*Digital_W0);//(2048+2048*cos(k*Digital_W1))*4;
if (n==0) Buffer[k]=(int)2048*cos(k*Digital_W1);//(2048+2048*cos(k*Digital_W2))*4;
}
}
submit_qdma(Buffer,Dst_Send,Buffer_Size,0);
}
void Send_Data(char* Data_Src,int* Data_Dst,int Data_Len)
{
while (Data_Len--)
{
Send_byte(*Data_Src++,Data_Dst,Buffer_Send,Fsk_Len);
}
}
void Start(int *Buffer,int Buffer_Size)
{
}
/**************************************Filter************************************/
/* Filter Fun */
/* len is the Filter Window len,Ak is the Filter paramter */
/* X_In is Source In,Y_Out is after Filter */
/**************************************Send**************************************/
void Filter(float* Ak,int* X_In,int* Y_Out,int Buffer_size,int Win_Len)
{
int n,k;
for (n=0;n<(Buffer_size+Win_Len/2);n++)
{
Y_Out[n]=0;
for (k=0;k<Win_Len;k++)
{
if ((n-k)>=0) Y_Out[n-Win_Len/2]=Y_Out[n-Win_Len/2]+Ak[k]*X_In[n-k];
}
}
}
/**************************************Decode**************************************/
/* Decode */
/********************************************************************************/
void Dcode(int *Data_In,int *Data_Out,int Buffer_Size)
{
int n;
//for (n=0;n<Buffer_Size;n++) Yn[n]=Buffer[n];
//for (n=0;n<Buffer_Size;n++) Yw0[n]=Buffer[n];
//Filter start ,one is W0(1/8*pi) and another is W1(1/4*pi)
//Filter(B0,Yn,Yw0,32);
//Filter(B1,Yn,Yw1,32);
//for (m=1024;m<1024+An_len;m++) Yn[m]=0;
for (n=0;n<Buffer_Size;n++) Data_In[n]=(int)(Data_In[n]*cos(n*Digital_W0));
//for (n=0;n<Buffer_len+Bn_len;n++) Yw1[n]=(int)(Yw1[n]*cos(n*Digital_W1));
//LowPass
Filter(Low_Pass,Data_In,Data_Out,Buffer_Size,64);
//printf("End Dcode\n");
}
/**************************************Decode**************************************/
/* Decode To Byte.This function Decode FSK to ByteData */
/********************************************************************************/
void Dcode_To_byte(int *Data_Out,char *Data_byte,int Fsk_Len_)
{
int A_Byte_Len;
int Sum,Average;
int i,k;
*Data_byte=0x0;
A_Byte_Len=Fsk_Len_/8;
for (i=0;i<8;i++)
{
Sum=0;
for (k=0;k<A_Byte_Len;k++)
{
Sum=Sum+Data_Out[i*A_Byte_Len+k];
}
Average=Sum/A_Byte_Len;
if (Average>=Min_1_Average) *Data_byte=*Data_byte|(1<<(i));
}
//Data_byte++;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -