samples need to be accumulated at each call of HandleInt
special processing should start the scheduling Before fix some signals containing a harmonic of FREQ/16 would producing peaks at all harmonics of FREQ/16.
This commit is contained in:
		
							parent
							
								
									bcc3347893
								
							
						
					
					
						commit
						2c8a022aca
					
				
					 1 changed files with 12 additions and 11 deletions
				
			
		| 
						 | 
				
			
			@ -199,11 +199,17 @@ static void HandleInt( int16_t sample )
 | 
			
		|||
	Swhichoctaveplace ++;
 | 
			
		||||
	Swhichoctaveplace &= BINCYCLE-1;
 | 
			
		||||
 | 
			
		||||
	for( i = 0; i < OCTAVES;i++ )
 | 
			
		||||
	{
 | 
			
		||||
		Saccum_octavebins[i] += sample;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	if( oct > 128 )
 | 
			
		||||
	{
 | 
			
		||||
		//Special: This is when we can update everything.
 | 
			
		||||
		//This gets run one out of every 1/(1<<OCTAVES) times.
 | 
			
		||||
		//This gets run once out of every (1<<OCTAVES) times.
 | 
			
		||||
		//It handles updating part of the DFT.
 | 
			
		||||
		//It should happen at the very first call to HandleInit
 | 
			
		||||
		int32_t * bins = &Sdatspace32B[0];
 | 
			
		||||
		int32_t * binsOut = &Sdatspace32BOut[0];
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -221,12 +227,6 @@ static void HandleInt( int16_t sample )
 | 
			
		|||
		return;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
	for( i = 0; i < OCTAVES;i++ )
 | 
			
		||||
	{
 | 
			
		||||
		Saccum_octavebins[i] += sample;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	uint16_t * dsA = &Sdatspace32A[oct*FIXBPERO*2];
 | 
			
		||||
	int32_t * dsB = &Sdatspace32B[oct*FIXBPERO*2];
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -252,11 +252,12 @@ int SetupDFTProgressive32()
 | 
			
		|||
	int j;
 | 
			
		||||
 | 
			
		||||
	Sdonefirstrun = 1;
 | 
			
		||||
 | 
			
		||||
	for( i = 0; i < BINCYCLE; i++ )
 | 
			
		||||
	Sdo_this_octave[0] = 0xff;
 | 
			
		||||
	for( i = 0; i < BINCYCLE-1; i++ )
 | 
			
		||||
	{
 | 
			
		||||
		// Sdo_this_octave = 
 | 
			
		||||
		// 4 3 4 2 4 3 4 ...
 | 
			
		||||
		// 255 4 3 4 2 4 3 4 1 4 3 4 2 4 3 4 0 4 3 4 2 4 3 4 1 4 3 4 2 4 3 4 is case for 5 octaves.
 | 
			
		||||
		// Initial state is special one, then at step i do octave = Sdo_this_octave with averaged samples from last update of that octave
 | 
			
		||||
		//search for "first" zero
 | 
			
		||||
 | 
			
		||||
		for( j = 0; j <= OCTAVES; j++ )
 | 
			
		||||
| 
						 | 
				
			
			@ -271,7 +272,7 @@ int SetupDFTProgressive32()
 | 
			
		|||
#endif
 | 
			
		||||
			return -1;
 | 
			
		||||
		}
 | 
			
		||||
		Sdo_this_octave[i] = OCTAVES-j-1;
 | 
			
		||||
		Sdo_this_octave[i+1] = OCTAVES-j-1;
 | 
			
		||||
	}
 | 
			
		||||
	return 0;
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue