Try to increase NCO phase precision
This commit is contained in:
		
							parent
							
								
									f10f8d5ceb
								
							
						
					
					
						commit
						758488c054
					
				
					 1 changed files with 11 additions and 1 deletions
				
			
		
							
								
								
									
										12
									
								
								src/main.c
									
									
									
									
									
								
							
							
						
						
									
										12
									
								
								src/main.c
									
									
									
									
									
								
							|  | @ -132,13 +132,23 @@ static void init_lo() | |||
| 	pio_sm_exec_wait_blocking(PIO, SM_LO, pio_encode_set(pio_pins, 0)); | ||||
| } | ||||
| 
 | ||||
| inline static uint32_t phase_bit(uint32_t phase, uint32_t step) | ||||
| { | ||||
| 	uint32_t next = phase + step; | ||||
| 
 | ||||
| 	if ((next & 0x7fffffff) > (step >> 1)) | ||||
| 		return next >> 31; | ||||
| 
 | ||||
| 	return phase >> 31; | ||||
| } | ||||
| 
 | ||||
| static void nco_generate_phase(uint32_t *buf, size_t len, uint32_t step, uint32_t phase) | ||||
| { | ||||
| 	for (size_t i = 0; i < len; i++) { | ||||
| 		uint32_t bits = 0; | ||||
| 
 | ||||
| 		for (int j = 0; j < 32; j++) { | ||||
| 			bits |= phase >> 31; | ||||
| 			bits |= phase_bit(phase, step); | ||||
| 			bits <<= 1; | ||||
| 			phase += step; | ||||
| 		} | ||||
|  |  | |||
		Loading…
	
		Reference in a new issue