亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? correlator.c

?? C寫的用軟件無線電實現的GPS模擬程序
?? C
?? 第 1 頁 / 共 2 頁
字號:
    break;

  case 0x84: case 0x88: case 0x8c: case 0x90: case 0x94: case 0x98:  
  case 0x9c: case 0xa0: case 0xa4: case 0xa8: case 0xac: case 0xb0:
    n = (adr - 0x84) / 4;
    ret = Regs[n].i_track;
//    if ( n == 0)
//      printf("ch = %d, Id = %d\n", n, ret);
    break;

  case 0x85: case 0x89: case 0x8d: case 0x91: case 0x95: case 0x99: 
  case 0x9d: case 0xa1: case 0xa5: case 0xa9: case 0xad: case 0xb1:
    n = (adr - 0x85) / 4;
    ret = Regs[n].q_track;
//    if ( n == 0)
//      printf("ch = %d, Qd = %d\n", n, ret);
    break;

  case 0x86: case 0x8a: case 0x8e: case 0x92: case 0x96: case 0x9a: 
  case 0x9e: case 0xa2: case 0xa6: case 0xaa: case 0xae: case 0xb2:
    n = (adr - 0x86) / 4;
    ret = Regs[n].i_prompt;
//    if ( n == 0)
//      printf("ch = %d, Ip = %d\n", n, ret);
    break;

  case 0x87: case 0x8b: case 0x8f: case 0x93: case 0x97: case 0x9b: 
  case 0x9f: case 0xa3: case 0xa7: case 0xab: case 0xaf: case 0xb3:
    n = (adr - 0x87) / 4;
    ret = Regs[n].q_prompt;

    Accum_Status_A.new_accum_data &= ~(0x1 << n);  // q_prompt should be read last, clears status bit
    break;

  default:
    printf( "from_gps: attempt to read from address %d (%x)\n", adr, adr);
    exit(-1);
  }  

  return ret;
}

//
// init software correlator
//
void init_software_correlator( void)
{
  int i;
  long l;
  FILE *Fp;

//  activate channels
  for ( i=0; i<NofChanActive; i++)
    Regs[i].active = 1;
    
  for ( i=0; i<NOFCHAN; i++)
  {
    Regs[i].carrier_dco_incr = 0x1f7b1b9L;      // 33010105 * 42.57475 mHz = 1405396.968 Hz
//    Carrier_DCO_Frq[i]       = 1.405396825e6;

    Regs[i].code_dco_incr    = 0x16ea4a8L;      // 24028328 * 42.57475 mHz = 1023000.058 Hz
//    Code_DCO_Frq[i]          = 1.022999968e6 / 1023.0;   // ~1 kHz
  }

  return;
}


//
//  output:
//
//    GPS signal (-3,-1,1,3)
//
int get_raw_signal( int prn)
{
//  int code, carrier;
//  static double time = 0.0;
//  static int navidx = 0,
//             codeidx = 0;
  int sgn;

//
// 'carrier_counter'
//
// counter of carrier cycles, 2^31 corresponds to 1/1.405 MHz =  0.712 usec
// (1.405 MHz is down-converted carrier frq, sampling frq is 5.714 MHz;)
// counter is incremented by 2^31 * 1.405 MHz / 5.714 MHz = 528038944; 
// frq resolution: 1.405 MHz / 528038944 = 2.66 mHz
//
//   3         2         1         0
//  10987654321098765432109876543210 
//  ABBBCCCCCCCCCCCCCCCCCCCCCCCCCCCC
//
// 'code_counter'
//
// counter of code cycles, 2^22 corresponds to 1/1.023 MHz =  0.977 usec
// counter is incremented by 2^22 * 1.023 MHz / 5.714 MHz = 750923
// frq resolution: 1.023 MHz / 750923 = 1.36 Hz
//
//   3         2         1         0
//  10987654321098765432109876543210 
//  ABBBCCCCCCCCCCCCCCCCCCCCCCCCCCCC

  static int nidx = 0;           // 0,...,1499       1500 navigation message bits
//  static int ridx = 0; 
  int didx,                      // 0,...,1022       1023 C/A code chips
      cidx;                      // 0,...,7          8 steps per carrier cycle
  int tmpnav = 1;
  static int epoch_counter = 0;  // 0,...,19  1 msec epochs
//             chip_counter = 0;   // 0,...,1022  
  static unsigned long carrier_counter       = 0,
                       carrier_counter_step  = 528038944L,
                       code_counter          = 0,
                       code_counter_step     = 750923L;

//
//  C/A signal: navigation data, C/A code and carrier
//
  didx = code_counter >> 22;           // bits 22-31
  cidx = carrier_counter >> 28;        // bits 28-31

//  printf("cidx = %d, didx = %d\n", cidx, didx);
//  getchar();

//  assert( didx >= 0 && didx < 1023);

//  sgn = nav[nidx] * CACode[prn][didx] * Carrier_DCO_I[cidx];

//
//  values: -2,-1,1,2
//
  sgn = tmpnav * CACode[prn][didx] * Carrier_DCO_I[cidx];

//
//  Noise: Gaussian white noise, integer, zero mean, stddev 1000
//
//  sgn += Noise[ridx++] / 50;           // stddev reduced 20
//  ridx = ridx % NOISELEN;
//  sgn /= 4;                            // stddev reduced  5

  if (sgn > 6) sgn = 6;
  if (sgn < -6) sgn = -6;

//
//  increment by one time step
//
  carrier_counter += carrier_counter_step;
  code_counter    += code_counter_step;

  if ( carrier_counter & (0x1L << 31))   // if bit 31 set -> one cycle is completed
    carrier_counter &= 0x7fffffff;   // clear bit 31
  
//  code sequence finished?
  if ( (code_counter >> 22) == 1023)
  {
    code_counter &= 0x3fffff;        // clear bits 22-31
    epoch_counter += 1;   // 1 msec  
  }

//  message bit corresponds to 20 msec
  if ( epoch_counter == 20)
  {
    nidx += 1;
    epoch_counter = 0;
  }

  return sgn;
}

#ifdef OGSDEBUG
int dbg_buf1[6000],
    dbg_buf2[6000],
    dbg_buf3[6000],
    dbg_buf4[6000];
#endif

extern FILE *FpIn;

//
// run software correlator
//
int run_software_correlator( void)
{
  int ch, j, loop = 1, res = 1,
      sgn, i_lo, q_lo,
      ca_prompt, ca_earlylate,
      didx, didxlate, didxearly, cidx;

  static long bufpos = 0L;
  static int sgnidx = -1, SavBuf;

  static int dump[NOFCHAN] = {0,0,0,0,0,0,0,0,0,0,0,0};

//
//  loop 'til next dump
//  time step is sampling frequency (5.714 MHz <-> 175 nsec)
//
  while ( loop)
  {

    if ( sgnidx < 0)
    {
      SavBuf = Buffer[bufpos++];
      sgnidx = 3;
    }  

    if ( bufpos >= BufEnd)
    {
      printf("fill data buffer...                                             \n");
      update_readbuffer();
      bufpos = 0L;
    }  

    if ( !FpIn)
      return (0);

// extract 2 bits from 32 bit long and map from [0,1,2,3] to [-3,-1,1,3]
    sgn = ((SavBuf >> 2*sgnidx) & 0x3) * 2 - 3;
    sgnidx -= 1;

//    dbg_nof_smpl += 1;

#ifdef OGSDEBUG
    dbg_buf1[dbg_bufidx] = sgn;
#endif

//    BUFFERPTR += 1;   // global variable - debug only
    
//    if ( bufpos >= BufferLen)
//      return (0);

//
//  loop over all 12 channels
//
    for ( ch=0; ch<NOFCHAN; ch++)
    {

//  is channel switched on?
      if ( Regs[ch].active)
      {
//        prn = Regs[ch].prn;   // 1,...,32

//
//  increment carrier and code cycle counter
//
        Carrier_Cycle[ch] += Regs[ch].carrier_dco_incr;
        Code_Cycle[ch]    += Regs[ch].code_dco_incr;

//
//  carrier DCO: 2^27 = 0x8000000 corresponds to 1 carrier cycle (1.4 MHz)
//
        if ( Carrier_Cycle[ch] & (0x1 << 27))
        {
          Carrier_Cycle[ch] &= ~(0x1f << 27);   // clear top 5 bits
          Regs[ch].carrier_cycle_counter += 1; 
        }

//
//  code DCO: 2^26 = 0x4000000 corresponds to 1/2 chip (2*1.023 MHz)
//
        if ( Code_Cycle[ch] & (0x1 << 26))
        {
          Code_Cycle[ch] &= ~(0x3f << 26);   // clear top 6 bits
          HalfChip_Counter[ch] += 1;
        }

        if ( HalfChip_Counter[ch] == 2046)
        {
          dump[ch] = 1;                   // 1 code period finished -> dump!
          HalfChip_Counter[ch] = 0;

#ifdef OGSDEBUG
          FILE* dbgfp = fopen( "c:/tmp/testdata.dat","w");
          if ( !dbgfp)
          {
            printf( "ru_vrt_cr: error opening data file c:/tmp/testdata.dat\n");
            exit(-1);
          }
          fwrite( &dbg_bufidx, sizeof( int), 1, dbgfp);
          fwrite( dbg_buf1, sizeof( int), dbg_bufidx, dbgfp);
          fwrite( &dbg_bufidx, sizeof( int), 1, dbgfp);
          fwrite( dbg_buf2, sizeof( int), dbg_bufidx, dbgfp);
          fwrite( &dbg_bufidx, sizeof( int), 1, dbgfp);
          fwrite( dbg_buf3, sizeof( int), dbg_bufidx, dbgfp);
          fwrite( &dbg_bufidx, sizeof( int), 1, dbgfp);
          fwrite( dbg_buf4, sizeof( int), dbg_bufidx, dbgfp);
          fclose( dbgfp);
          printf( "file closed!\n"); 

          dbg_bufidx = 0;

          getchar();
#endif

        }  // --- if ( HalfChip_Counter[ch] == 2046) ---

//
//  index in sin/cos look-up table (8-phase)
//
        cidx = (Carrier_Cycle[ch] >> 24) & 0x7;

        didx      = HalfChip_Counter[ch];             // now 0,...,2046     
        didxearly = didx + 2046 + 1;                  // 1/2 chip (avoid neg numbers)
        didxlate  = didx + 2046 - 1;

        didx      = (didx % 2046) / 2;
        didxearly = (didxearly % 2046) / 2;
        didxlate  = (didxlate % 2046) / 2;

// code
//        ca_prompt = CACode[prn][didx];   // i=0,...,1022
        ca_prompt = CACode[chan[ch].prn][didx];   // i=0,...,1022

#ifdef OGSDEBUG
        dbg_buf2[dbg_bufidx] = ca_prompt;
#endif

//
//  code transition from index 1022 to 0 -> DUMP event
//  actually DUMP event occurs only if Regs[ch].code_slew_counter != 2047;
//  we ignore that
//

        if ( Accum_Status_C.early_late & (0x1 << ch))
        {
//          ca_earlylate = CACode[prn][didxlate];
          ca_earlylate = CACode[chan[ch].prn][didxlate];
          printf( "late track!\n");
          getchar();
        }  
        else
        {
//          ca_earlylate = CACode[prn][didxearly];
          ca_earlylate = CACode[chan[ch].prn][didxearly];
//          printf( "early track!\n");
//          getchar();
        }  

//
//  dump event!
//
        if ( dump[ch])
        {
          dump[ch] = 0;

//  adjust code cycle
//          Code_DCO_Cycle[ch] += Regs[ch].code_slew_counter / 2046;  // 1 cycle = 2046 half chips
          HalfChip_Counter[ch] += Regs[ch].code_slew_counter;

// value valid just for one DUMP period
          Regs[ch].code_slew_counter = 0;                          

// dump sum to accumulator registers ...
          Regs[ch].i_prompt = Tmp_I_Prompt[ch];
          Regs[ch].i_track  = Tmp_I_Track[ch];
          Regs[ch].q_prompt = Tmp_Q_Prompt[ch];
          Regs[ch].q_track  = Tmp_Q_Track[ch];

// --------- debugging -----
//          Regs[ch].samples_per_sum = Samples_Per_Sum[ch];
//          Sample_Counter_Start[ch] = Sample_Counter_End[ch]+1;
//          Sample_Counter_End[ch]   += Samples_Per_Sum[ch];
//          Regs[ch].sample_counter  = Sample_Counter_End[ch];
// --------- debugging -----

// ... and clear
          Tmp_I_Prompt[ch] = 0;
          Tmp_I_Track[ch]  = 0;
          Tmp_Q_Prompt[ch] = 0;
          Tmp_Q_Track[ch]  = 0;

// --------- debugging -----
//          Samples_Per_Sum[ch] = 0;
// --------- debugging -----

// new accumulator data available
          Accum_Status_A.new_accum_data |= (0x1 << ch);
          Accum_Status_A.accum_int = 1;
          loop = 0;
        }  // --- if ( dump[ch]) ---

        Regs[ch].carrier_dco_phase = (long)( Carrier_DCO_Cycle[ch] * 1024);  // resolution is 1/1024 cycles

        i_lo = Carrier_DCO_I[cidx];
        q_lo = Carrier_DCO_Q[cidx];

#ifdef OGSDEBUG
        dbg_buf3[dbg_bufidx] = i_lo;
        dbg_buf4[dbg_bufidx] = q_lo;
        dbg_bufidx += 1;
#endif

//  values
//    sgn          : +/-1, +/-3
//    i_lo,q_lo    : +/-1, +/-2
//    ca_prompt    : +/-1
//    ca_earlylate : +/-1 or +/-2, 0
//    product      : +/-1, +/-2, +/-3, +/-6

        Tmp_I_Prompt[ch] += sgn * i_lo * ca_prompt;
        Tmp_I_Track[ch]  += sgn * i_lo * ca_earlylate;
        Tmp_Q_Prompt[ch] += sgn * q_lo * ca_prompt;
        Tmp_Q_Track[ch]  += sgn * q_lo * ca_earlylate;
        
// --- debugging ---
//        Samples_Per_Sum[ch] += 1;
// --- debugging ---
        
      }  // --- if ( Regs[ch].active) ---
    }  // --- for ( ch=0; ch<NOFCHAN; ch++) ---
  }  // --- while ( loop) ---

  return (res);
}

/* ------------------------------ end of file ----------------------------- */

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
99久免费精品视频在线观看| av一区二区三区在线| 国产精品福利一区| 日韩一区二区在线播放| 91女神在线视频| 极品销魂美女一区二区三区| 亚洲国产精品人人做人人爽| 久久久国产午夜精品| 91精品国产福利在线观看| 色综合中文综合网| 94-欧美-setu| 国产一区二区成人久久免费影院| 亚洲一区自拍偷拍| 国产精品乱码久久久久久| 日韩视频一区在线观看| 欧美伊人久久久久久久久影院| 国产成人高清视频| 久久精品国产999大香线蕉| 亚洲成人动漫在线观看| 亚洲女与黑人做爰| 欧美精彩视频一区二区三区| 欧美精品1区2区3区| 欧美午夜精品免费| 97se亚洲国产综合自在线不卡| 91精品久久久久久久99蜜桃| 99热99精品| 成人免费视频免费观看| 丁香激情综合五月| 国产成人午夜片在线观看高清观看| 日本亚洲电影天堂| 性感美女极品91精品| 亚洲国产综合视频在线观看| 亚洲男人的天堂一区二区| 亚洲日本在线观看| 亚洲天堂网中文字| 中文字幕中文字幕一区| 国产精品黄色在线观看| 中文字幕在线不卡一区| 国产精品成人免费在线| 亚洲欧美日韩在线| 亚洲亚洲精品在线观看| 亚洲在线观看免费| 视频一区国产视频| 日本大胆欧美人术艺术动态| 日韩不卡一二三区| 久久精品国产一区二区| 国产露脸91国语对白| 国产精品一区2区| eeuss影院一区二区三区| 99久久精品免费精品国产| 91蝌蚪porny九色| 欧美最猛黑人xxxxx猛交| 欧美日韩精品免费观看视频| 制服丝袜在线91| 欧美电影精品一区二区| 久久精品人人做人人综合| 日韩一区欧美一区| 亚洲国产一区二区三区青草影视| 午夜精品久久久久| 另类调教123区| 精品理论电影在线观看| 久久五月婷婷丁香社区| 国产精品久久久久久一区二区三区 | 99久久精品情趣| 欧美在线高清视频| 精品伦理精品一区| 国产精品午夜电影| 午夜亚洲福利老司机| 极品少妇xxxx偷拍精品少妇| av成人免费在线| 67194成人在线观看| 久久久久久久久久久黄色| 亚洲色图视频网| 六月丁香婷婷久久| 99久久精品免费| 正在播放亚洲一区| 中文av字幕一区| 午夜a成v人精品| 成人一级黄色片| 日韩一区二区在线看片| 中文字幕一区二区在线观看| 免费成人你懂的| 色综合天天性综合| 精品对白一区国产伦| 又紧又大又爽精品一区二区| 久久精品国产**网站演员| 91蜜桃在线观看| 精品国免费一区二区三区| 亚洲精品久久嫩草网站秘色| 国产最新精品精品你懂的| 欧美性色aⅴ视频一区日韩精品| 亚洲制服丝袜av| 国产在线精品一区二区不卡了| 色久优优欧美色久优优| 久久―日本道色综合久久| 性做久久久久久免费观看| eeuss鲁片一区二区三区| 精品欧美一区二区在线观看| 一区二区三区高清| 成人免费的视频| 2021国产精品久久精品| 亚洲成a天堂v人片| 色综合天天综合色综合av| 欧美高清在线视频| 久草在线在线精品观看| 欧美日韩激情一区二区三区| 亚洲同性gay激情无套| 国产精品一区二区久激情瑜伽| 日韩一区二区三区av| 午夜欧美一区二区三区在线播放| 91丨国产丨九色丨pron| 国产欧美日韩视频一区二区 | 国产精品99久久久久久久女警| 欧美日韩在线亚洲一区蜜芽| 亚洲欧洲国产专区| 国产成人av电影| 久久综合中文字幕| 久久国产综合精品| 日韩情涩欧美日韩视频| 亚洲成a人v欧美综合天堂| 欧美中文字幕不卡| 亚洲精品成人悠悠色影视| 91麻豆高清视频| 亚洲摸摸操操av| 国产精品三级av| 国产一区二区三区蝌蚪| 26uuu欧美| 国产精品一二三区在线| 久久婷婷国产综合国色天香| 国产自产高清不卡| 久久久噜噜噜久久中文字幕色伊伊| 精品在线视频一区| 日韩欧美精品在线视频| 麻豆成人久久精品二区三区小说| 日韩一区二区三区视频在线观看| 日本最新不卡在线| 欧美成人艳星乳罩| 国产主播一区二区| 久久精品夜色噜噜亚洲aⅴ| 国产精品一二三在| 中文字幕亚洲欧美在线不卡| 99视频有精品| 亚洲综合免费观看高清在线观看| 欧美性高清videossexo| 亚洲妇熟xx妇色黄| 日韩免费电影一区| 国产麻豆日韩欧美久久| 国产日产亚洲精品系列| 99国产精品久久久久久久久久 | 久久99精品久久久久久久久久久久| 日韩一级片网址| 国产高清不卡一区| 亚洲视频1区2区| 欧亚一区二区三区| 蜜桃视频一区二区| 国产亚洲精品aa午夜观看| 99久久99久久精品免费观看| 一区二区三区免费网站| 欧美吻胸吃奶大尺度电影| 另类小说一区二区三区| 麻豆国产精品一区二区三区| 久久日一线二线三线suv| av电影在线观看一区| 亚洲va国产va欧美va观看| 精品少妇一区二区三区日产乱码 | 一区二区三区国产精华| 日韩视频一区在线观看| 国产91在线观看| 一区二区久久久久| 日韩美女一区二区三区四区| 成人污污视频在线观看| 一区二区日韩电影| www国产亚洲精品久久麻豆| www.欧美色图| 日韩精品国产精品| 国产精品福利一区二区三区| 欧美久久久久中文字幕| 国产成人精品网址| 亚洲成人福利片| 国产精品女上位| 7777精品伊人久久久大香线蕉超级流畅 | 亚洲精品五月天| 欧美精品一区二区在线播放| 色婷婷激情综合| 国产一区二区三区香蕉| 亚洲一级电影视频| 国产欧美日韩卡一| 337p亚洲精品色噜噜狠狠| www.综合网.com| 美腿丝袜在线亚洲一区 | 国产在线精品一区在线观看麻豆| 亚洲精品视频在线观看网站| 欧美精品一区二区三区蜜桃 | www.av亚洲| 国内成人自拍视频| 欧洲一区在线电影| 国产福利精品一区二区| 日本午夜精品一区二区三区电影| 综合亚洲深深色噜噜狠狠网站| 精品久久久久一区|