📄 gmsk.c
字号:
//***************************
//Gauss function g(Tb)
//***************************
#include <stdio.h>
#include <math.h>
#define SPAN 0.001
#define N 100000
#define PI 3.1415926
float Bb,Tb; //Gauss filter 3dB bandwidth note:BT=0.3
float Alpha; //
//--------sample point of every bit(Tb)-------
//pre_2 :25/16Tb,27/16Tb,29/16Tb,31/16Tb,33/16Tb,35/16Tb,37/16Tb,39/16Tb
//pre_1 :9/16Tb,11/16Tb,13/16Tb,15/16Tb,17/16Tb,19/16Tb,21/16Tb,23/16Tb
//pre0 :-7/16Tb,-5/16Tb,-3/16Tb,-1/16Tb,1/16Tb,3/16Tb,5/16Tb,7/16Tb
//pre1 :-23/16Tb,-21/16Tb,-19/16Tb,-17/16Tb,-15/16Tb,-13/16Tb,-11/16Tb,-9/16Tb
//pre2 :-39/16Tb,-37/16Tb,-35/16Tb,-33/16Tb,-31/16Tb,-29/16Tb,-27/16Tb,-25/16Tb
//--------------------------------------------
float pre_2[]={1.5625,1.6875,1.8125,1.9375,2.0625,2.1875,2.3125,2.4375};
float pre_1[]={0.5625,0.6875,0.8125,0.9375,1.0625,1.1875,1.3125,1.4375};
float pre0[]={-0.4375,-0.3125,-0.1875,-0.0625,0.0625,0.1875,0.3125,0.4375};
float pre1[]={-1.4375,-1.3125,-1.1875,-1.0625,-0.9375,-0.8125,-0.6875,-0.5625};
float pre2[]={-2.4375,-2.3125,-2.1875,-2.0625,-1.9375,-1.8125,-1.6875,-1.5625};
//--------------------------------------------
float table00000[8];
float table00001[8];
float table00010[8];
float table00011[8];
float table00100[8];
float table00101[8];
float table00110[8];
float table00111[8];
float table01000[8];
float table01001[8];
float table01010[8];
float table01011[8];
float table01100[8];
float table01101[8];
float table01110[8];
float table01111[8];
float table10000[8];
float table10001[8];
float table10010[8];
float table10011[8];
float table10100[8];
float table10101[8];
float table10110[8];
float table10111[8];
float table11000[8];
float table11001[8];
float table11010[8];
float table11011[8];
float table11100[8];
float table11101[8];
float table11110[8];
float table11111[8];
//--------------------------------------------
float func(float x); //approximate integral function
float Qfunc(float x); //declare the Q function
float gfunc(float t1,float t2); //Gauss function g(Tb)
void gen_sam_point(float *str); //generate sample point
void gen_sam_value();
void main()
{
float Rb=9600.0; //bit rate
int i=0;
Tb=1/Rb;
Bb=0.3*Rb;
Alpha=sqrt(log(2)/(2*Bb*Bb));
//-------------test---------------
// float qqq;
// scanf("%f",&t);
// qqq=Qfunc(t);
// printf("qqq=%f",qqq);
//--------------------------------
gen_sam_point(pre_2);
gen_sam_point(pre_1);
gen_sam_point(pre0);
gen_sam_point(pre1);
gen_sam_point(pre2);
gen_sam_value();
printf("产生结束,数据存放在文件:table.txt中");
//while(1);
}
float func(float x)
{
float y;
y=exp(-0.5*x*x);
return y;
}
float Qfunc(float x)
{
int i;
float fsum=0,tem_Qsum;
for(i=0;i<N;i++)
{
fsum+=func(x+i*SPAN);
}
tem_Qsum=(1/(sqrt(2*PI)))*SPAN*fsum;
return tem_Qsum;
}
float gfunc(float t1,float t2)
{
float Qtem;
Qtem=(1/(2*Tb))*(Qfunc(t1)-Qfunc(t2));
return Qtem;
}
void gen_sam_point(float *str)
{
int i;
float tem;
for(i=0;i<8;i++)
{
tem=str[i]*Tb;
str[i]=tem;
}
}
void gen_sam_value()
{
FILE *fp;
int i,j,k;
float t,temt1,temt2;
float temg_2,temg_1,temg0,temg1,temg2;
fp=fopen("data.txt","a");
for(i=0;i<32;i++)
{
switch(i)
{
case 0://00000
for(j=0;j<8;j++)
{
t=pre_2[j];
temt1=(sqrt(2*PI)/Alpha)*(t-Tb/2);
temt2=(sqrt(2*PI)/Alpha)*(t+Tb/2);
temg_2=-gfunc(temt1,temt2);
t=pre_1[j];
temt1=(sqrt(2*PI)/Alpha)*(t-Tb/2);
temt2=(sqrt(2*PI)/Alpha)*(t+Tb/2);
temg_1=-gfunc(temt1,temt2);
t=pre0[j];
temt1=(sqrt(2*PI)/Alpha)*(t-Tb/2);
temt2=(sqrt(2*PI)/Alpha)*(t+Tb/2);
temg0=-gfunc(temt1,temt2);
t=pre1[j];
temt1=(sqrt(2*PI)/Alpha)*(t-Tb/2);
temt2=(sqrt(2*PI)/Alpha)*(t+Tb/2);
temg1=-gfunc(temt1,temt2);
t=pre2[j];
temt1=(sqrt(2*PI)/Alpha)*(t-Tb/2);
temt2=(sqrt(2*PI)/Alpha)*(t+Tb/2);
temg2=-gfunc(temt1,temt2);
table00000[j]=(temg_2+temg_1+temg0+temg1+temg2)/4.685214;
}
for(k=0;k<8;k++)
{
fprintf(fp,"%f ",table00000[k]);
}
fputc('\n',fp);
break;
case 1://00001
for(j=0;j<8;j++)
{
t=pre_2[j];
temt1=(sqrt(2*PI)/Alpha)*(t-Tb/2);
temt2=(sqrt(2*PI)/Alpha)*(t+Tb/2);
temg_2=-gfunc(temt1,temt2);
t=pre_1[j];
temt1=(sqrt(2*PI)/Alpha)*(t-Tb/2);
temt2=(sqrt(2*PI)/Alpha)*(t+Tb/2);
temg_1=-gfunc(temt1,temt2);
t=pre0[j];
temt1=(sqrt(2*PI)/Alpha)*(t-Tb/2);
temt2=(sqrt(2*PI)/Alpha)*(t+Tb/2);
temg0=-gfunc(temt1,temt2);
t=pre1[j];
temt1=(sqrt(2*PI)/Alpha)*(t-Tb/2);
temt2=(sqrt(2*PI)/Alpha)*(t+Tb/2);
temg1=-gfunc(temt1,temt2);
t=pre2[j];
temt1=(sqrt(2*PI)/Alpha)*(t-Tb/2);
temt2=(sqrt(2*PI)/Alpha)*(t+Tb/2);
temg2=gfunc(temt1,temt2);
table00001[j]=temg_2+temg_1+temg0+temg1+temg2;
}
for(k=0;k<8;k++)
{
fprintf(fp,"%f ",table00001[k]);
}
fputc('\n',fp);
break;
case 2://00010
for(j=0;j<8;j++)
{
t=pre_2[j];
temt1=(sqrt(2*PI)/Alpha)*(t-Tb/2);
temt2=(sqrt(2*PI)/Alpha)*(t+Tb/2);
temg_2=-gfunc(temt1,temt2);
t=pre_1[j];
temt1=(sqrt(2*PI)/Alpha)*(t-Tb/2);
temt2=(sqrt(2*PI)/Alpha)*(t+Tb/2);
temg_1=-gfunc(temt1,temt2);
t=pre0[j];
temt1=(sqrt(2*PI)/Alpha)*(t-Tb/2);
temt2=(sqrt(2*PI)/Alpha)*(t+Tb/2);
temg0=-gfunc(temt1,temt2);
t=pre1[j];
temt1=(sqrt(2*PI)/Alpha)*(t-Tb/2);
temt2=(sqrt(2*PI)/Alpha)*(t+Tb/2);
temg1=gfunc(temt1,temt2);
t=pre2[j];
temt1=(sqrt(2*PI)/Alpha)*(t-Tb/2);
temt2=(sqrt(2*PI)/Alpha)*(t+Tb/2);
temg2=-gfunc(temt1,temt2);
table00010[j]=temg_2+temg_1+temg0+temg1+temg2;
}
for(k=0;k<8;k++)
{
fprintf(fp,"%f ",table00010[k]);
}
fputc('\n',fp);
break;
case 3://00011
for(j=0;j<8;j++)
{
t=pre_2[j];
temt1=(sqrt(2*PI)/Alpha)*(t-Tb/2);
temt2=(sqrt(2*PI)/Alpha)*(t+Tb/2);
temg_2=-gfunc(temt1,temt2);
t=pre_1[j];
temt1=(sqrt(2*PI)/Alpha)*(t-Tb/2);
temt2=(sqrt(2*PI)/Alpha)*(t+Tb/2);
temg_1=-gfunc(temt1,temt2);
t=pre0[j];
temt1=(sqrt(2*PI)/Alpha)*(t-Tb/2);
temt2=(sqrt(2*PI)/Alpha)*(t+Tb/2);
temg0=-gfunc(temt1,temt2);
t=pre1[j];
temt1=(sqrt(2*PI)/Alpha)*(t-Tb/2);
temt2=(sqrt(2*PI)/Alpha)*(t+Tb/2);
temg1=gfunc(temt1,temt2);
t=pre2[j];
temt1=(sqrt(2*PI)/Alpha)*(t-Tb/2);
temt2=(sqrt(2*PI)/Alpha)*(t+Tb/2);
temg2=gfunc(temt1,temt2);
table00011[j]=temg_2+temg_1+temg0+temg1+temg2;
}
for(k=0;k<8;k++)
{
fprintf(fp,"%f ",table00011[k]);
}
fputc('\n',fp);
break;
case 4://00100
for(j=0;j<8;j++)
{
t=pre_2[j];
temt1=(sqrt(2*PI)/Alpha)*(t-Tb/2);
temt2=(sqrt(2*PI)/Alpha)*(t+Tb/2);
temg_2=-gfunc(temt1,temt2);
t=pre_1[j];
temt1=(sqrt(2*PI)/Alpha)*(t-Tb/2);
temt2=(sqrt(2*PI)/Alpha)*(t+Tb/2);
temg_1=-gfunc(temt1,temt2);
t=pre0[j];
temt1=(sqrt(2*PI)/Alpha)*(t-Tb/2);
temt2=(sqrt(2*PI)/Alpha)*(t+Tb/2);
temg0=gfunc(temt1,temt2);
t=pre1[j];
temt1=(sqrt(2*PI)/Alpha)*(t-Tb/2);
temt2=(sqrt(2*PI)/Alpha)*(t+Tb/2);
temg1=-gfunc(temt1,temt2);
t=pre2[j];
temt1=(sqrt(2*PI)/Alpha)*(t-Tb/2);
temt2=(sqrt(2*PI)/Alpha)*(t+Tb/2);
temg2=-gfunc(temt1,temt2);
table00100[j]=temg_2+temg_1+temg0+temg1+temg2;
}
for(k=0;k<8;k++)
{
fprintf(fp,"%f ",table00100[k]);
}
fputc('\n',fp);
break;
case 5://00101
for(j=0;j<8;j++)
{
t=pre_2[j];
temt1=(sqrt(2*PI)/Alpha)*(t-Tb/2);
temt2=(sqrt(2*PI)/Alpha)*(t+Tb/2);
temg_2=-gfunc(temt1,temt2);
t=pre_1[j];
temt1=(sqrt(2*PI)/Alpha)*(t-Tb/2);
temt2=(sqrt(2*PI)/Alpha)*(t+Tb/2);
temg_1=-gfunc(temt1,temt2);
t=pre0[j];
temt1=(sqrt(2*PI)/Alpha)*(t-Tb/2);
temt2=(sqrt(2*PI)/Alpha)*(t+Tb/2);
temg0=gfunc(temt1,temt2);
t=pre1[j];
temt1=(sqrt(2*PI)/Alpha)*(t-Tb/2);
temt2=(sqrt(2*PI)/Alpha)*(t+Tb/2);
temg1=-gfunc(temt1,temt2);
t=pre2[j];
temt1=(sqrt(2*PI)/Alpha)*(t-Tb/2);
temt2=(sqrt(2*PI)/Alpha)*(t+Tb/2);
temg2=gfunc(temt1,temt2);
table00101[j]=temg_2+temg_1+temg0+temg1+temg2;
}
for(k=0;k<8;k++)
{
fprintf(fp,"%f ",table00101[k]);
}
fputc('\n',fp);
break;
case 6://00110
for(j=0;j<8;j++)
{
t=pre_2[j];
temt1=(sqrt(2*PI)/Alpha)*(t-Tb/2);
temt2=(sqrt(2*PI)/Alpha)*(t+Tb/2);
temg_2=-gfunc(temt1,temt2);
t=pre_1[j];
temt1=(sqrt(2*PI)/Alpha)*(t-Tb/2);
temt2=(sqrt(2*PI)/Alpha)*(t+Tb/2);
temg_1=-gfunc(temt1,temt2);
t=pre0[j];
temt1=(sqrt(2*PI)/Alpha)*(t-Tb/2);
temt2=(sqrt(2*PI)/Alpha)*(t+Tb/2);
temg0=gfunc(temt1,temt2);
t=pre1[j];
temt1=(sqrt(2*PI)/Alpha)*(t-Tb/2);
temt2=(sqrt(2*PI)/Alpha)*(t+Tb/2);
temg1=gfunc(temt1,temt2);
t=pre2[j];
temt1=(sqrt(2*PI)/Alpha)*(t-Tb/2);
temt2=(sqrt(2*PI)/Alpha)*(t+Tb/2);
temg2=-gfunc(temt1,temt2);
table00110[j]=temg_2+temg_1+temg0+temg1+temg2;
}
for(k=0;k<8;k++)
{
fprintf(fp,"%f ",table00110[k]);
}
fputc('\n',fp);
break;
case 7://00111
for(j=0;j<8;j++)
{
t=pre_2[j];
temt1=(sqrt(2*PI)/Alpha)*(t-Tb/2);
temt2=(sqrt(2*PI)/Alpha)*(t+Tb/2);
temg_2=-gfunc(temt1,temt2);
t=pre_1[j];
temt1=(sqrt(2*PI)/Alpha)*(t-Tb/2);
temt2=(sqrt(2*PI)/Alpha)*(t+Tb/2);
temg_1=-gfunc(temt1,temt2);
t=pre0[j];
temt1=(sqrt(2*PI)/Alpha)*(t-Tb/2);
temt2=(sqrt(2*PI)/Alpha)*(t+Tb/2);
temg0=gfunc(temt1,temt2);
t=pre1[j];
temt1=(sqrt(2*PI)/Alpha)*(t-Tb/2);
temt2=(sqrt(2*PI)/Alpha)*(t+Tb/2);
temg1=gfunc(temt1,temt2);
t=pre2[j];
temt1=(sqrt(2*PI)/Alpha)*(t-Tb/2);
temt2=(sqrt(2*PI)/Alpha)*(t+Tb/2);
temg2=gfunc(temt1,temt2);
table00111[j]=temg_2+temg_1+temg0+temg1+temg2;
}
for(k=0;k<8;k++)
{
fprintf(fp,"%f ",table00111[k]);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -