Reduce jitter and use HPF to improve SNR
This commit is contained in:
		
							parent
							
								
									38b7ec34f6
								
							
						
					
					
						commit
						574c474c6e
					
				
					 1 changed files with 26 additions and 14 deletions
				
			
		
							
								
								
									
										40
									
								
								src/main.c
									
									
									
									
									
								
							
							
						
						
									
										40
									
								
								src/main.c
									
									
									
									
									
								
							|  | @ -48,7 +48,7 @@ static uint32_t lo_cos[LO_WORDS] __attribute__((__aligned__(1 << LO_BITS_DEPTH)) | |||
| #define RX_BITS_DEPTH 13 | ||||
| #define RX_WORDS (1 << (RX_BITS_DEPTH - 2)) | ||||
| 
 | ||||
| static_assert(RX_STRIDE * 4 < RX_WORDS, "RX_STRIDE * 4 < RX_WORDS"); | ||||
| static_assert(RX_STRIDE * 4 <= RX_WORDS, "RX_STRIDE * 4 <= RX_WORDS"); | ||||
| 
 | ||||
| static uint32_t rx_cos[RX_WORDS] __attribute__((__aligned__(1 << RX_BITS_DEPTH))); | ||||
| 
 | ||||
|  | @ -142,7 +142,7 @@ static void init_fb() | |||
| 	const uint16_t insn[] = { | ||||
| 		pio_encode_mov_not(pio_pins, pio_pins) | pio_encode_sideset(1, 1) | | ||||
| 			pio_encode_delay(0), | ||||
| 		pio_encode_nop() | pio_encode_sideset(1, 0), | ||||
| 		pio_encode_nop() | pio_encode_sideset(1, 0) | pio_encode_delay(0), | ||||
| 	}; | ||||
| 
 | ||||
| 	pio_program_t prog = { | ||||
|  | @ -217,11 +217,11 @@ static void init_ad() | |||
| 		 * Should wrap here. | ||||
| 		 * Jump to this portion must be inserted from the outside. | ||||
| 		 */ | ||||
| 		pio_encode_in(pio_y, 32), | ||||
| 		pio_encode_in(pio_x, 32), | ||||
| 		pio_encode_in(pio_y, 32), | ||||
| 		pio_encode_set(pio_x, 0), | ||||
| 		pio_encode_set(pio_y, 0), | ||||
| 		pio_encode_jmp(1), | ||||
| 		pio_encode_out(pio_pc, 2), | ||||
| 	}; | ||||
| 
 | ||||
| 	pio_program_t prog = { | ||||
|  | @ -421,6 +421,7 @@ static void rf_rx_stop(void) | |||
| static void rf_rx(void) | ||||
| { | ||||
| 	const uint32_t base = (uint32_t)rx_cos; | ||||
| 	int prev = 0; | ||||
| 	int pos = 0; | ||||
| 
 | ||||
| 	while (true) { | ||||
|  | @ -463,20 +464,31 @@ static void rf_rx(void) | |||
| 
 | ||||
| 		for (int i = 0; i < IQ_SAMPLES; i++) { | ||||
| 			int sI = 0, sQ = 0; | ||||
| 			int pos, neg; | ||||
| 
 | ||||
| 			/* Convert to I/Q signal. */ | ||||
| 			// +I
 | ||||
| 			pos = *cos_ptr++; | ||||
| 			neg = *cos_ptr++; | ||||
| 			sI += pos - neg - prev; | ||||
| 			prev = pos - neg; | ||||
| 
 | ||||
| 			sI += *cos_ptr++; | ||||
| 			sI -= *cos_ptr++; | ||||
| 			// +Q
 | ||||
| 			pos = *cos_ptr++; | ||||
| 			neg = *cos_ptr++; | ||||
| 			sQ += pos - neg - prev; | ||||
| 			prev = pos - neg; | ||||
| 
 | ||||
| 			sQ += *cos_ptr++; | ||||
| 			sQ -= *cos_ptr++; | ||||
| 			// -I
 | ||||
| 			pos = *cos_ptr++; | ||||
| 			neg = *cos_ptr++; | ||||
| 			sI -= pos - neg - prev; | ||||
| 			prev = pos - neg; | ||||
| 
 | ||||
| 			sI -= *cos_ptr++; | ||||
| 			sI += *cos_ptr++; | ||||
| 
 | ||||
| 			sQ -= *cos_ptr++; | ||||
| 			sQ += *cos_ptr++; | ||||
| 			// -Q
 | ||||
| 			pos = *cos_ptr++; | ||||
| 			neg = *cos_ptr++; | ||||
| 			sQ -= pos - neg - prev; | ||||
| 			prev = pos - neg; | ||||
| 
 | ||||
| 			int64_t I = sI; | ||||
| 			int64_t Q = sQ; | ||||
|  |  | |||
		Loading…
	
		Reference in a new issue