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

📄 ogslibrary.c

📁 C写的用软件无线电实现的GPS模拟程序
💻 C
📖 第 1 页 / 共 3 页
字号:
//        i4satid=i4p;  ulong     = i4satid & 0x3F;  sf2[4][3] = sf2[4][3] | (ulong << 16);  if (i4satid > 24 && i4satid < 33)  {////  almanac data for satellite 25 thru 32 (frame 5, pages 2,3,4,5,7,8,9,10)//    isv = i4satid;//    gps_alm[isv].week=gps_week;//    iae=int(sf2[4][3] & 0x00FFFFL);//    gps_alm[isv].ety=iae*4.768371582E-7;    ssint     = int( gps_alm[isv].ety/(4.768371582E-7));  // 16 bits, scale 2^-21    ulong     = long( ssint) & 0xFFFF;    sf2[4][3] = sf2[4][3] | (ulong);//    iatoa=int(sf2[4][4] >> 16);//    gps_alm[isv].toa=iatoa*4096.0;    schar     = char( gps_alm[isv].toa/4096.0);  // 8 bits, scale 2^12    ulong     = long( schar) & 0xFF;    sf2[4][4] = sf2[4][4] | (ulong << 16);//    iadeli=sf2[4][4] & 0x00FFFFL;//    if (bit_test_l(iadeli,16)) //      iadeli=iadeli | 0xFFFF0000L;//    gps_alm[isv].inc=(iadeli*1.907348633E-6+0.3)*pi;    ssint     = int( (gps_alm[isv].inc/pi-0.3)/1.907348633E-6);  // 16 bits, scale 2^-19    ulong     = long( ssint) & 0xFFFF;    sf2[4][4] = sf2[4][4] | (ulong);//    iomegad=int(sf2[4][5] >> 8);//    gps_alm[isv].rra=iomegad*3.637978807E-12*pi;    ssint     = int( gps_alm[isv].rra/(3.637978807E-12*pi));  // 16 bits, scale 2^-38    ulong     = long( ssint) & 0xFFFF;    sf2[4][5] = sf2[4][5] | (ulong << 8);//    gps_alm[isv].health=int(sf2[4][5] & 0x0000FF);    ulong     = long( gps_alm[isv].health) & 0xFF;    sf2[4][5] = sf2[4][5] | (ulong);//    iasqr=sf2[4][6];//    gps_alm[isv].sqa=iasqr*4.8828125E-4;//    if (gps_alm[isv].sqa>0.0) //      gps_alm[isv].w=19964981.84/pow(gps_alm[isv].sqa,3);    ssint     = int( gps_alm[isv].sqa/(4.8828125E-4));  // 16 bits, scale 2^-11    ulong     = long( ssint) & 0xFFFF;    sf2[4][6] = sf2[4][6] | (ulong);//    iaomega0=sf2[4][7];//    if (bit_test_l(iaomega0,24)) //      iaomega0=iaomega0 | 0xFF000000L;//    gps_alm[isv].lan=iaomega0*1.192092896E-7*pi;    ulong     = long( gps_alm[isv].lan/(1.192092896E-7*pi)) & 0xFFFFFF;  // 24 bits, scale 2^-23, rad    if ( ulong & (0x1L << (24-1)))  // test bit 24      ulong = ulong | 0xFF000000L;    sf2[4][7] = sf2[4][7] | (ulong);//    iaw=sf2[4][8];//    if (bit_test_l(iaw,24)) //      iaw=iaw | 0xFF000000L;//    gps_alm[isv].aop=iaw*1.192092896E-7*pi;    ulong     = long( gps_alm[isv].aop/(1.192092896E-7*pi)) & 0xFFFFFF;  // 24 bits, scale 2^-23, rad    if ( ulong & (0x1L << (24-1)))  // test bit 24      ulong = ulong | 0xFF000000L;    sf2[4][8] = sf2[4][8] | (ulong);//    iam0=sf2[4][9];//    if (bit_test_l(iam0,24)) //      iam0=iam0 | 0xFF000000L;  //    gps_alm[isv].ma=iam0*1.192092896E-7*pi;    ulong     = long( gps_alm[isv].ma/(1.192092896E-7*pi)) & 0xFFFFFF;  // 24 bits, scale 2^-23, rad    if ( ulong & (0x1L << (24-1)))  // test bit 24      ulong = ulong | 0xFF000000L;    sf2[4][9] = sf2[4][9] | (ulong);//    iaaf0=(sf2[4][10] >> 13) | (sf2[4][10] & 0x1C);//    if ( bit_test_l( iaaf0, 11)) //      iaaf0=iaaf0 | 0xFFFFF800L;//    gps_alm[isv].af0=iaaf0*9.536743164E-7;    ulong     = long( gps_alm[isv].af0/(9.536743164E-7)) & 0x7FF;  // 11 bits, scale 2^-20    if ( ulong & (0x1L << (11-1)))  // test bit 11      ulong = ulong | 0xFFFFF800L;    sf2[4][10] = sf2[4][10] | ((ulong & 0x7) << 2);    sf2[4][10] = sf2[4][10] | ((ulong & 0x7F8) << 13);//    iaaf1=(sf2[4][10] | 0xFFE0) >> 5;//    if (bit_test_l(iaaf1,11)) //      iaaf1=iaaf1 | 0xFFFFF800L;//    gps_alm[isv].af1=iaaf1*3.637978807E-12;    ulong     = long( gps_alm[isv].af1/(3.637978807E-12)) & 0x7FF;  // 11 bits, scale 2^-38    if ( ulong & (0x1L << (11-1)))  // test bit 11      ulong = ulong | 0xFFFFF800L;    sf2[4][10] = sf2[4][10] | (ulong << 5);  }  else if ( i4satid == 55)  {////  special messages (22 ASCII chars) (frame 4, page 17)////    gps_alm[prn].text_message[0]=char((sf2[4][3] & 0x00FF00) >> 8);    ulong = long( gps_alm[prn].text_message[0]) & 0xFF;  // 8 bits    sf2[4][3] = sf2[4][3] | (ulong << 8);//    gps_alm[prn].text_message[1]=char( sf2[4][3] & 0x0000FF);    ulong = long( gps_alm[prn].text_message[1]) & 0xFF;  // 8 bits    sf2[4][3] = sf2[4][3] | (ulong);    for ( k=1; k<=7; k++)    {//      gps_alm[prn].text_message[3*k-1] = char(sf2[4][k+3] >> 16);      ulong = long( gps_alm[prn].text_message[3*k-1]) & 0xFF;  // 8 bits      sf2[4][k+3] = sf2[4][k+3] | (ulong << 16);//      gps_alm[prn].text_message[3*k  ] = char((sf2[4][k+3] & 0x00FF00) >>  8);      ulong = long( gps_alm[prn].text_message[3*k]) & 0xFF;  // 8 bits      sf2[4][k+3] = sf2[4][k+3] | (ulong << 8);//      gps_alm[prn].text_message[3*k+1] = char(sf2[4][k+3] & 0x0000FF);      ulong = long( gps_alm[prn].text_message[3*k+1]) & 0xFF;  // 8 bits      sf2[4][k+3] = sf2[4][k+3] | (ulong);    }  }  else if ( i4satid == 56)  {////  ionospheric and UTC data (frame 4, page 18)////          ial0=int((sf2[4][3] & 0x00FF00) >> 8);//          al0=ial0*9.313225746e-10;    schar     = char( iono->al0/(9.313225746e-10));  // 8 bits, scale 2^-30    ulong     = long( schar) & 0xFF;    sf2[4][3] = sf2[4][3] | (ulong << 8);//          ial1= int(sf2[4][3] & 0x0000FF);//          al1=ial1*7.4505806e-9;    schar     = char( iono->al1/(7.4505806e-9));  // 8 bits, scale 2^-27    ulong     = long( schar) & 0xFF;    sf2[4][3] = sf2[4][3] | (ulong);//          ial2= int(sf2[4][4] >> 16);//          al2=ial2*5.960464478e-8;    schar     = char( iono->al2/(5.960464478e-8));  // 8 bits, scale 2^-24    ulong     = long( schar) & 0xFF;    sf2[4][4] = sf2[4][4] | (ulong << 16);//          ial3=int((sf2[4][4] & 0x00FF00) >> 8);//          al3=ial3*5.960464478e-8;    schar     = char( iono->al3/(5.960464478e-8));  // 8 bits, scale 2^-24    ulong     = long( schar) & 0xFF;    sf2[4][4] = sf2[4][4] | (ulong << 8);//          ibt0= int(sf2[4][4] & 0x0000FF);//          b0=ibt0*2048.;    schar     = char( iono->b0/(2048.));  // 8 bits, scale 2^11    ulong     = long( schar) & 0xFF;    sf2[4][4] = sf2[4][4] | (ulong);//          ibt1= int(sf2[4][5] >> 16);//          b1=ibt1*16384.;    schar     = char( iono->b1/(16384.));  // 8 bits, scale 2^14    ulong     = long( schar) & 0xFF;    sf2[4][5] = sf2[4][5] | (ulong << 16);//          ibt2=int((sf2[4][5] & 0x00FF00) >> 8);//          b2=ibt2*65536.;    schar     = char( iono->b2/(65536.));  // 8 bits, scale 2^16    ulong     = long( schar) & 0xFF;    sf2[4][5] = sf2[4][5] | (ulong << 8);//          ibt3= int(sf2[4][5] & 0x00FF);//          b3=ibt3*65536.;    schar     = char( iono->b3/(65536.));  // 8 bits, scale 2^16    ulong     = long( schar) & 0xFF;    sf2[4][5] = sf2[4][5] | (ulong);//          ia1=   sf2[4][6];//          if (bit_test_l(ia1,24)) ia1=ia1 | 0xFF000000L;//          a1=ia1*8.881784197e-16;    ulong     = long( utc->a1/(8.881784197e-16)) & 0xFFFFFF;  // 24 bits, scale 2^-50    if ( ulong & (0x1L << (24-1)))  // test bit 24      ulong = ulong | 0xFF000000L;    sf2[4][6] = sf2[4][6] | (ulong);//          ia0=  (sf2[4][7] << 8) | (sf2[4][8] >> 16);//          a0=ia0*9.31322574615e-10;    ulong     = long( utc->a0/(9.31322574615e-10));  // 32 bits, scale 2^-30    sf2[4][7] = sf2[4][7] | ((ulong & 0xFFFFFF00) >> 8);    sf2[4][8] = sf2[4][8] | ((ulong & 0xFF) << 16);//          itot=  int((sf2[4][8] & 0x00FF00) >> 8);//          tot=itot*4096;    schar     = char( utc->tot/(4096.));  // 8 bits, scale 2^12    ulong     = long( schar) & 0xFF;    sf2[4][8] = sf2[4][8] | (ulong << 8);//          iWNt=  int(sf2[4][8] & 0xFF);//          WNt=iWNt;    schar     = char( utc->WNt);  // 8 bits, scale 1    ulong     = long( schar) & 0xFF;    sf2[4][8] = sf2[4][8] | (ulong);//          idtls=  int(sf2[4][9] >> 16);//          if (idtls > 128) idtls = idtls |0xFF00;//          dtls=idtls;    schar     = char( utc->dtls);  // 8 bits, scale 1    ulong     = long( schar) & 0xFF;    sf2[4][9] = sf2[4][9] | (ulong);//          iWNlsf=int((sf2[4][9] & 0x00FF00) >> 8);//          WNlsf=iWNlsf;    schar     = char( utc->WNlsf);  // 8 bits, scale 1    ulong     = long( schar) & 0xFF;    sf2[4][9] = sf2[4][9] | (ulong << 8);//          iDN   = int(sf2[4][9] & 0x0000FF);//          DN=iDN;    schar     = char( utc->DN);  // 8 bits, scale 1    ulong     = long( schar) & 0xFF;    sf2[4][9] = sf2[4][9] | (ulong);//          idtlsf= int(sf2[4][10] >> 16);//          if (idtlsf >128) idtlsf=idtlsf |0xFF00;//          dtlsf=idtlsf;    schar     = char( utc->dtlsf);  // 8 bits, scale 1    ulong     = long( schar) & 0xFF;    sf2[4][9] = sf2[4][9] | (ulong << 16);  }  else if ( i4satid == 63 )  {////  satellite configuration for 32 satellites (frame 4, page 25)////          ASV[1] = int((sf2[4][3] & 0x00F000) >>12);//          ASV[2]= int((sf2[4][3] & 0x000F00) >>8);//          ASV[3]= int((sf2[4][3] & 0x0000F0) >>4);//          ASV[4]= int( sf2[4][3] & 0x00000F);    for ( k=2; k<6; k++)    {      sf2[4][3] = sf2[4][3] | (long( ASV[-1+k]) << (20-(4*k)));    }//          ASV[5]= int( sf2[4][4] >> 20);//          ASV[6]= int((sf2[4][4] & 0x0F0000L) >>16);//          ASV[7]= int((sf2[4][4] & 0x00F000) >>12);//          ASV[8]= int((sf2[4][4] & 0x000F00) >> 8);//          ASV[9]= int((sf2[4][4] & 0x0000F0) >> 4);//          ASV[10]=int(sf2[4][4] & 0x00000F);    for ( k=0; k<6; k++)    {      sf2[4][4] = sf2[4][4] | (long( ASV[5+k]) << (20-(4*k)));    }//          ASV[11]=int(sf2[4][5] >>20);//          ASV[12]=int((sf2[4][5] & 0x0F0000L) >>16);//          ASV[13]=int((sf2[4][5] & 0x00F000) >>12);//          ASV[14]=int((sf2[4][5] & 0x000F00) >> 8);//          ASV[15]=int((sf2[4][5] & 0x0000F0) >> 4);//          ASV[16]=int(sf2[4][5] & 0x00000F);    for ( k=0; k<6; k++)    {      sf2[4][5] = sf2[4][5] | (long( ASV[11+k]) << (20-(4*k)));    }//          ASV[17]=int(sf2[4][6] >>20);//          ASV[18]=int((sf2[4][6] & 0x0F0000L) >>16);//          ASV[19]=int((sf2[4][6] & 0x00F000) >>12);//          ASV[20]=int((sf2[4][6] & 0x000F00) >> 8);//          ASV[21]=int((sf2[4][6] & 0x0000F0) >> 4);//          ASV[22]=int(sf2[4][6] & 0x00000F);    for ( k=0; k<6; k++)    {      sf2[4][6] = sf2[4][6] | (long( ASV[17+k]) << (20-(4*k)));    }//          ASV[23]=int(sf2[4][7] >>20);//          ASV[24]=int((sf2[4][7] & 0x0F0000L) >>16);//          ASV[25]=int((sf2[4][7] & 0x00F000) >>12);//          ASV[26]=int((sf2[4][7] & 0x000F00) >> 8);//          ASV[27]=int((sf2[4][7] & 0x0000F0) >> 4);//          ASV[28]=int( sf2[4][7] & 0x00000F);    for ( k=0; k<6; k++)    {      sf2[4][7] = sf2[4][7] | (long( ASV[23+k]) << (20-(4*k)));    }//          ASV[29]=int( sf2[4][8] >>20);//          ASV[30]=int((sf2[4][8] & 0x0F0000L) >>16);//          ASV[31]=int((sf2[4][8] & 0x00F000) >>12);//          ASV[32]=int((sf2[4][8] & 0x000F00) >> 8);    for ( k=0; k<4; k++)    {      sf2[4][8] = sf2[4][8] | (long( ASV[29+k]) << (20-(4*k)));    }//          SVh[25]=int(sf2[4][8] & 0x00003F);//          if( SVh[25]==0x3f) gps_alm[25].inc=0.0;    sf2[4][8] = sf2[4][8] | (long( SVh[25]));//          SVh[26]=int(sf2[4][9] >>18);//          if( SVh[26]==0x3f) gps_alm[26].inc=0.0;    sf2[4][9] = sf2[4][9] | (long( SVh[26]) << 18);//          SVh[27]=int((sf2[4][9] & 0x03F000L) >>12);//          if( SVh[27]==0x3f) gps_alm[27].inc=0.0;    sf2[4][9] = sf2[4][9] | (long( SVh[27]) << 12);//          SVh[28]=int((sf2[4][9] & 0x000FC0) >>6);//          if( SVh[28]==0x3f) gps_alm[28].inc=0.0;    sf2[4][9] = sf2[4][9] | (long( SVh[28]) << 6);//          SVh[29]= int(sf2[4][9] & 0x00003F);//          if( SVh[29]==0x3f) gps_alm[29].inc=0.0;    sf2[4][9] = sf2[4][9] | (long( SVh[29]));//          SVh[30]= int(sf2[4][10] >>18);//          if( SVh[30]==0x3f) gps_alm[30].inc=0.0;    sf2[4][10] = sf2[4][10] | (long( SVh[30]) << 18);//          SVh[31]=int((sf2[4][10]& 0x03F000L) >>12);//          if( SVh[31]==0x3f) gps_alm[31].inc=0.0;    sf2[4][10] = sf2[4][10] | (long( SVh[31]) << 12);//          SVh[32]=int((sf2[4][10]& 0x000FC0) >>6);//          if( SVh[32]==0x3f) gps_alm[32].inc=0.0;    sf2[4][10] = sf2[4][10] | (long( SVh[32]) << 6);  }////    SUBFRAME 5////      i5p = int((sf2[5][3] & 0x3F0000L) >> 16);//      chan[ch].page5 = i5p;//      if ( i5satid != i5p)//      {//        i5satid=i5p;  if ( i5satid == 51 )  {////  satellite health data for sats 1 thru 24, almanac reference time,//  and almanac reference week number (frame 5, page 25)////       iatoa = int((sf2[5][3] & 0xFF00) >>8);//       atoa = iatoa*4096;//          SVh[1] = int(sf2[5][4] >>18);//          if( SVh[1]==0x3f) gps_alm[1].inc=0.0;//          SVh[2] = int((sf2[5][4] & 0x03F000L)>>12);//          if( SVh[2]==0x3f) gps_alm[2].inc=0.0;//          SVh[3] = int((sf2[5][4] & 0x000FC0)>>6);//          if( SVh[3]==0x3f) gps_alm[3].inc=0.0;//          SVh[4] = int(sf2[5][4] & 0x00003F);//          if( SVh[4]==0x3f) gps_alm[4].inc=0.0;    for ( k=0; k<4; k++)    {      sf2[5][4] = sf2[5][4] | (long( SVh[1+k]) << (18-(6*k)));    }//          SVh[5] = int(sf2[5][5] >>18);//          if( SVh[5]==0x3f) gps_alm[5].inc=0.0;//          SVh[6] = int((sf2[5][5] & 0x03F000L)>>12);//          if( SVh[6]==0x3f) gps_alm[6].inc=0.0;//          SVh[7] = int((sf2[5][5] & 0x000FC0)>>6);//          if( SVh[7]==0x3f) gps_alm[7].inc=0.0;//          SVh[8] = int(sf2[5][5] & 0x00003F);//          if( SVh[8]==0x3f) gps_alm[8].inc=0.0;    for ( k=0; k<4; k++)    {      sf2[5][5] = sf2[5][5] | (long( SVh[5+k]) << (18-(6*k)));    }//          SVh[9] = int(sf2[5][6] >> 18);//          if( SVh[9]==0x3f) gps_alm[9].inc=0.0;//          SVh[10] = int((sf2[5][6] & 0x03F000L)>>12);//          if( SVh[10]==0x3f) gps_alm[10].inc=0.0;//          SVh[11] = int((sf2[5][6] & 0x000FC0)>>6);//          if( SVh[11]==0x3f) gps_alm[11].inc=0.0;//          SVh[12] = int(sf2[5][6] & 0x00003F);//          if( SVh[12]==0x3f) gps_alm[12].inc=0.0;    for ( k=0; k<4; k++)    {      sf2[5][6] = sf2[5][6] | (long( SVh[9+k]) << (18-(6*k)));    }//          SVh[13] = int(sf2[5][7] >>18);//          if( SVh[13]==0x3f) gps_alm[13].inc=0.0;//          SVh[14] = int((sf2[5][7] & 0x03F000L)>>12);//          if( SVh[14]==0x3f) gps_alm[14].inc=0.0;//          SVh[15] = int((sf2[5][7] & 0x000FC0)>>6);//          if( SVh[15]==0x3f) gps_alm[15].inc=0.0;//          SVh[16] = int(sf2[5][7] & 0x00003F);//          if( SVh[16]==0x3f) gps_alm[16].inc=0.0;    for ( k=0; k<4; k++)    {      sf2[5][7] = sf2[5][7] | (long( SVh[13+k]) << (18-(6*k)));    }//          SVh[17] = int(sf2[5][8] >>18);//          if( SVh[17]==0x3f) gps_alm[17].inc=0.0;//          SVh[18] = int((sf2[5][8] & 0x03F000L)>>12);//          if( SVh[18]==0x3f) gps_alm[18].inc=0.0;//          SVh[19] = int((sf2[5][8] & 0x000FC0)>>6);//          if( SVh[19]==0x3f) gps_alm[19].inc=0.0;//          SVh[20] = int(sf2[5][8] & 0x00003F);//          if( SVh[20]==0x3f) gps_alm[20].inc=0.0;    for ( k=0; k<4; k++)    {      sf2[5][8] = sf2[5][8] | (long( SVh[17+k]) << (18-(6*k)));    }//          SVh[21] = int(sf2[5][9] >>18);//          if( SVh[21]==0x3f) gps_alm[21].inc=0.0;//          SVh[22] = int((sf2[5][9] & 0x03F000L)>>12);//          if( SVh[22]==0x3f) gps_alm[22].inc=0.0;//          SVh[23] = int((sf2[5][9] & 0x000FC0)>>6);//          if( SVh[23]==0x3f) gps_alm[23].inc=0.0;//          SVh[24] = int(sf2[5][9] & 0x00003F);//          if( SVh[24]==0x3f) gps_alm[24].inc=0.0;    for ( k=0; k<4; k++)    {      sf2[5][9] = sf2[5][9] | (long( SVh[21+k]) << (18-(6*k)));    }  }  else  {////  almanac data for satellite 1 thru 24 (frame 5, pages 1-24)//    isv = i5satid;//          gps_alm[isv].week=gps_week;//          iae=int(sf2[5][3] & 0xFFFF);//          gps_alm[isv].ety=iae*4.768371582E-7;//          iatoa=int(sf2[5][4] >> 16);//          gps_alm[isv].toa=iatoa*4096.0;//          iadeli=int(sf2[5][4] & 0xFFFF);//          gps_alm[isv].inc=(iadeli*1.907348633E-6+0.3)*pi;//          iaomegad=int(sf2[5][5] >> 8);//          gps_alm[isv].rra=iaomegad*3.637978807E-12*pi;//          gps_alm[isv].health=int(sf2[5][5] & 0xFF);//          iasqr=sf2[5][6];//          gps_alm[isv].sqa=iasqr*4.8828125E-4;//          if (gps_alm[isv].sqa>0.0) gps_alm[isv].w=19964981.84/pow(gps_alm[isv].sqa,3);//          iaomega0=sf2[5][7];//          if (bit_test_l(iaomega0,24)) iaomega0=iaomega0 | 0xFF000000L;

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -