📄 gmsk.cpp
字号:
/*gmsk调制,包括差分编码和调制*/
/*chenfangni,2003.5.17*/
#include "g.h"
#include "math.h"
void main()
//void gmsk(int tx_burst[148])
{
int tx_burst[148]={0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,0,1,1,0,1,1,0,1,0,0,0,1,1,1,0,1,0,1,0,1,0,1,1,0,1,1,0,1,0,0,0,1,1,1,0,1,0,1,0,1,0,1,1,0,0,1,0,0,1,0,1,1,1,0,0,0,0,1,0,0,0,1,0,0,1,0,1,1,1,1,0,1,0,0,0,1,1,1,0,1,0,1,0,1,0,1,1,0,1,1,0,1,0,0,0,1,1,1,0,1,0,1,0,1,0,1,1,0,1,1,0,1,0,0,0,1,1,1,0,1,0,1,0,1,0,1,1,0,0,0};
int a[149];
int temp[148];
int burst[148];
int f_res[9600];//(148+2)*64=9600;2是调制产生的
int sum[9600];
double theta[9600];
int i;
int n;
double I[9600],Q[9600];
int I_quali[9600],Q_quali[9600];
//高斯脉冲的量化
double G_FUN[192]={0,9.5853e-006,1.995e-005,3.1144e-005,4.3217e-005,5.6223e-005,7.0216e-005,8.5252e-005, 0.00010139, 0.00011868, 0.0001372, 0.000157, 0.00017813, 0.00020068,
0.00022469, 0.00025023, 0.00027737, 0.00030616, 0.00033668, 0.00036898, 0.00040312,0.00043917, 0.00047718, 0.0005172, 0.0005593, 0.00060352, 0.0006499, 0.00069851,
0.00074936, 0.00080251, 0.00085798, 0.0009158, 0.00097599, 0.0010386, 0.0011036,0.0011709, 0.0012407, 0.0013129, 0.0013875, 0.0014644, 0.0015436, 0.0016252,
0.0017089, 0.0017949, 0.001883, 0.0019731, 0.0020652, 0.0021592, 0.0022551,0.0023526, 0.0024517, 0.0025523, 0.0026542, 0.0027573, 0.0028615, 0.0029667,
0.0030726, 0.0031792, 0.0032862, 0.0033935, 0.0035009, 0.0036082, 0.0037153,0.003822, 0.0039281, 0.0040333, 0.0041376, 0.0042407, 0.0043424, 0.0044425,
0.0045409, 0.0046373, 0.0047315, 0.0048235, 0.0049129, 0.0049996, 0.0050835,0.0051643, 0.0052419, 0.0053161, 0.0053869, 0.0054539, 0.0055172, 0.0055765,
0.0056318, 0.0056828, 0.0057296, 0.005772, 0.0058099, 0.0058433, 0.005872,0.005896, 0.0059153, 0.0059298, 0.0059395, 0.0059444, 0.0059444, 0.0059395,
0.0059298, 0.0059153, 0.005896, 0.005872, 0.0058433, 0.0058099, 0.005772,0.0057296, 0.0056828, 0.0056318, 0.0055765, 0.0055172, 0.0054539, 0.0053869,
0.0053161, 0.0052419, 0.0051643, 0.0050835, 0.0049996, 0.0049129, 0.0048235,0.0047315, 0.0046373, 0.0045409, 0.0044425, 0.0043424, 0.0042407, 0.0041376,
0.0040333, 0.0039281, 0.003822, 0.0037153, 0.0036082, 0.0035009, 0.0033935,0.0032862, 0.0031792, 0.0030726, 0.0029667, 0.0028615, 0.0027573, 0.0026542,
0.0025523, 0.0024517, 0.0023526, 0.0022551, 0.0021592, 0.0020652, 0.0019731,0.001883, 0.0017949, 0.0017089, 0.0016252, 0.0015436, 0.0014644, 0.0013875,
0.0013129, 0.0012407, 0.0011709, 0.0011036, 0.0010386, 0.00097599, 0.0009158,0.00085798, 0.00080251, 0.00074936, 0.00069851, 0.0006499, 0.00060352, 0.0005593,
0.0005172, 0.00047718, 0.00043917, 0.00040312, 0.00036898, 0.00033668, 0.00030616,0.00027737, 0.00025023, 0.00022469, 0.00020068, 0.00017813, 0.000157, 0.0001372,
0.00011868, 0.00010139, 8.5252e-005, 7.0216e-005, 5.6223e-005, 4.3217e-005, 3.1144e-005,1.995e-005, 9.5853e-006, -6.6087e-020
};
int g[192];
for(i=0; i<192; i++)
g[i]=int(G_FUN[i]*pow(2,20));//量化
/*差分编码,burst = diff_enc(tx_burst);*/
a[0]=1;
for (i=1;i<149;i++)
a[i]=tx_burst[i-1];
for (i=1;i<=148;i++)
{
temp[i-1]=a[i]^a[i-1];
burst[i-1]=1-2*temp[i-1];
}
//gmsk调制
for (i=0;i<9600;i++)
f_res[i]=0;
for (n=1;n<=148;n++)
{
for (i=(n-1)*OSR;i<(n+2)*OSR;i++)
f_res[i]=f_res[i]+burst[n]*g[i-(n-1)*64];
}
// 计算GMSK调制信号的相位
for(i=0;i<9600;i++)
sum[i]=0;
sum[0]=f_res[0];
for(i=1;i<9600;i++)
sum[i]=sum[i-1]+f_res[i];
for(i=0;i<9600;i++)
{
theta[i]=3.1415926*sum[i]/pow(2,20);//将pi量化成3
//GMSK基带调制信号的I/Q两路信号
I [i]=cos(theta[i]);
Q [i]=sin(theta[i]);
I_quali[i]=int(I[i]*pow(2,17));
Q_quali[i]=int(Q[i]*pow(2,17));
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -