⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 wireless.c

📁 软件无线电的程序
💻 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 + -