<?xml version="1.0" encoding="UTF-8"?>
<commit>
  <added type="array"/>
  <modified type="array">
    <modified>
      <diff>@@ -101,8 +101,8 @@
 #define AGC_BITS				(6)			//!&lt; AGC to this bit depth
 //#define OVERFLOW_LOW			(256)		//!&lt; Overflow low
 //#define OVERFLOW_HIGH			(1024)		//!&lt; Overflow high
-#define OVERFLOW_LOW			(64)			//!&lt; Overflow low
-#define OVERFLOW_HIGH			(256)		//!&lt; Overflow high
+#define OVERFLOW_LOW			(64)		//!&lt; Overflow low
+#define OVERFLOW_HIGH			(512)		//!&lt; Overflow high
 /*----------------------------------------------------------------------------------------------*/
 
 </diff>
      <filename>includes/config.h</filename>
    </modified>
    <modified>
      <diff>@@ -110,7 +110,7 @@ void Parse_Arguments(int32 argc, char* argv[])
 	gopt.mode 			= 0;		//!&lt; Single board L1 mode by default
 	gopt.decimate		= 16;		//!&lt; Default to work with both 65.536 and 64 MHz clocks
 	gopt.gr 			= 30; 		//!&lt; 40 dB of RF gain
-	gopt.gi 			= 10; 		//!&lt; 10 dB of IF gain
+	gopt.gi 			= 0; 		//!&lt; 10 dB of IF gain
 	gopt.f_lo_a 		= L1 - IF_FREQUENCY;	//!&lt; Board A L1 by default
 	gopt.f_ddc_a 		= 0;		//!&lt; no DDC correction
 	gopt.f_lo_b			= L2 - IF_FREQUENCY;	//!&lt; Board B L2 by default</diff>
      <filename>main/init.cpp</filename>
    </modified>
    <modified>
      <diff>@@ -50,10 +50,10 @@ plot(A(:,7))
 plot(A(:,9))
 plot(A(:,8)*0.5)
 
-bl = A(:,end-19:end);
-
-figure
-mesh(bl)
-shading interp;
+% bl = A(:,end-19:end);
+% 
+% figure
+% mesh(bl)
+% shading interp;
 
 </diff>
      <filename>matlab/plot_chan.m</filename>
    </modified>
    <modified>
      <diff>@@ -201,18 +201,18 @@ void Channel::Accum(Correlation_S *corr, NCO_Command_S *_feedback)
 	I_sum20	+= corr-&gt;I[1] - I_buff[_1ms_epoch];
 	Q_sum20 += corr-&gt;Q[1] - Q_buff[_1ms_epoch];
 
-//	if((I_buff[_1ms_epoch] &gt; 0) !=  (corr-&gt;I[1] &gt; 0))
-//	{
-//		P_buff[_1ms_epoch]++;
-//	}
-
 	/* Buffer storing past 20 1ms accumulations */
 	I_buff[_1ms_epoch] = corr-&gt;I[1];
 	Q_buff[_1ms_epoch] = corr-&gt;Q[1];
 
+	if((I_buff[_1ms_epoch] &gt; 0) !=  (I_buff[(_1ms_epoch + 19) % 20] &gt; 0))
+	{
+		P_buff[_1ms_epoch]++;
+	}
+
 	/* Lowpass filter */
 	//P_buff[_1ms_epoch] = (63 * P_buff[_1ms_epoch] + (I_sum20 &gt;&gt; 6) * (I_sum20 &gt;&gt; 6)	+ (Q_sum20 &gt;&gt; 6)*(Q_sum20 &gt;&gt; 6) + 32) &gt;&gt; 6;
-	P_buff[_1ms_epoch] = (63 * P_buff[_1ms_epoch] + (I_sum20 &gt;&gt; 6) * (I_sum20 &gt;&gt; 6)	+ 32) &gt;&gt; 6;
+	//P_buff[_1ms_epoch] = (63 * P_buff[_1ms_epoch] + (I_sum20 &gt;&gt; 6) * (I_sum20 &gt;&gt; 6)	+ 32) &gt;&gt; 6;
 
 	/* Dump accumulation and do tracking according to integration length */
 	if((_1ms_epoch % len) == 0)
@@ -462,11 +462,11 @@ void Channel::PLL()
 
 	df = dp = 0;
 
-	//if(len == 20 || (_1ms_epoch &amp; 0x1))
+//	if(bit_lock)
 //	{
 //		/* FLL discriminator */
 //		dot = 	  I_prev*I[1] + Q_prev*Q[1];
-//		cross =  -I_prev*Q[1] + Q_prev*I[1];
+//		cross =   I_prev*Q[1] - Q_prev*I[1];
 //
 //		/* No FLL for now */
 //		if((dot != 0.0) &amp;&amp; (cross != 0.0))
@@ -475,7 +475,7 @@ void Channel::PLL()
 //			df /= (TWO_PI * aPLL.t);
 //		}
 //	}
-//
+
 //	df = 0;
 
 	/* PLL discriminator */
@@ -526,74 +526,78 @@ void Channel::Epoch()
 void Channel::BitLock()
 {
 	int32 power_buff[20];
-	int32 new_epoch;
-	int32 lcv;
-	int32 thresh;
-	uint32 best_sum;
+	int32 lcv, new_epoch;
+	int32 thresh_high, thresh_low, bit_lock_err;
 
 	/* Set bitlock threshold */
-	thresh = 1000;
+	thresh_high = 100;
+	thresh_low = 25;
 
-	if(_1ms_epoch == 19 &amp;&amp; (bit_lock_ticks &gt;= thresh))
+	if(_1ms_epoch == 19)
 	{
 		if(bit_lock == false)
 		{
 			/* Find the maximum of the power buffer */
-			best_sum = 0; new_epoch = 0;
+			bit_lock_err = 0; new_epoch = 0;
 			for(lcv = 0; lcv &lt; 20; lcv++)
 			{
-				if(P_buff[lcv] &gt; best_sum)
+				if(P_buff[lcv] &gt; thresh_high)
 				{
-					best_sum = P_buff[lcv];
+					bit_lock = true;
 					new_epoch = lcv;
 				}
-			}
 
-			/* If the epoch has changed */
-			if(new_epoch != best_epoch)
-			{
-				bit_lock_ticks = 0;
-				best_epoch = new_epoch;
+				if(P_buff[lcv] &gt; thresh_low)
+				{
+					bit_lock_err++;
+				}
 			}
 
-			/* If the epoch has NOT changed in X ms */
-			if(bit_lock_ticks &gt; thresh)
+			/* Bin counter exceeded threshold */
+			if(bit_lock == true)
 			{
-				bit_lock = true;
-
-				_1ms_epoch = (38 - best_epoch) % 20;
-
+				best_epoch = 19;
 				bit_lock_pend = 1;
-
 				bit_lock_ticks = 0;
+				_1ms_epoch = (38 - new_epoch) % 20;
 
 				/* Copy over the power buffer to put the max in element 19 */
 				for(lcv = 0 ; lcv &lt; 20; lcv++)
 					power_buff[lcv] = P_buff[lcv];
 
 				for(lcv = 0 ; lcv &lt; 20; lcv++)
-					P_buff[lcv] = power_buff[(lcv + best_epoch + 1) % 20];
+					P_buff[lcv] = power_buff[(lcv + new_epoch + 1) % 20];
+			}
+
+			/* Bit lock failure, reset! */
+			if(bit_lock_err &gt; 1)
+			{
+				best_epoch = 0;
+				bit_lock_ticks = 0;
+				bit_lock = false;
+				frame_lock = false;
+				for(lcv = 0 ; lcv &lt; 20; lcv++)
+					P_buff[lcv] = 0;
 			}
+
 		}
 		else if(bit_lock_ticks &lt; 60000) /* Bitlock obtained, keep monitoring it up to 1 minute */
 		{
-
 			/* Find the maximum of the power buffer */
-			best_sum = 0; new_epoch = 0;
+			bit_lock_err = 0; new_epoch = 0;
 			for(lcv = 0; lcv &lt; 20; lcv++)
 			{
-				if(P_buff[lcv] &gt; best_sum)
+				if(P_buff[lcv] &gt; bit_lock_err)
 				{
-					best_sum = P_buff[lcv];
+					bit_lock_err = P_buff[lcv];
 					new_epoch = lcv;
 				}
 			}
 
-			best_epoch = new_epoch;
-
 			/* Best epoch not in the correct place! */
-			if(best_epoch != 19)
+			if(new_epoch != 19)
 			{
+				best_epoch = 0;
 				bit_lock_ticks = 0;
 				bit_lock = false;
 				frame_lock = false;
@@ -603,8 +607,8 @@ void Channel::BitLock()
 		}
 	}
 
-	/* Always do this */
 	bit_lock_ticks++;
+
 }
 /*----------------------------------------------------------------------------------------------*/
 </diff>
      <filename>objects/channel.cpp</filename>
    </modified>
  </modified>
  <removed type="array"/>
  <parents type="array">
    <parent>
      <id>72a7faba1770aae88aa7d690d3cc99bef8df18f1</id>
    </parent>
  </parents>
  <author>
    <name>gpssim</name>
    <email>gpssim@gpsdevc.(none)</email>
  </author>
  <url>http://github.com/gps-sdr/gps-sdr/commit/1bee82b19151a808ad75fa0774e8bc56bfba3056</url>
  <id>1bee82b19151a808ad75fa0774e8bc56bfba3056</id>
  <committed-date>2009-08-05T07:05:52-07:00</committed-date>
  <authored-date>2009-08-05T07:05:52-07:00</authored-date>
  <message>Changed bitlock algorithm. GN3S and USRP now produce the same noise power.</message>
  <tree>d3cb6453d0cbf7836791bf770d3c3ec8753efd71</tree>
  <committer>
    <name>gpssim</name>
    <email>gpssim@gpsdevc.(none)</email>
  </committer>
</commit>
