Ejemplo n.º 1
0
void AudioProcess()
{
	BYTE i;
	SIGNED_WORD temp16;
	
	if(Phase++&0x01)
	{
		//We are in the Odd Phase.  Do Nothing
		I2S0_TX0 = QueuedI2CSampleOut;
	}
	else
	{
		DAC0_WHOLE = QueuedDACSampleOut;	
		I2S0_TX0 = QueuedI2CSampleOut;
	
		//We need to do an intermediate operation to get the ADC data.
		//The 32-bit ADC0_RA reg is not sign extended to 32-bits.  TO make the compiler happy
		//we need to do a 16-bit signed read and then recast to q31_t
		temp16 = ADC0_RA;
		
		SampleIn = (q31_t)(temp16)<<8;

		if(InhibitAudio == FALSE)
		{
			//See what the current Patch is and do the appropriate processing!
			switch(CurrentPatch)
			{
				default:
					break;
				
				case PATCH_SINE_TEST:
					
					SampleOut = ((q31_t)(Sine_15_0[q++]))<<8;
					
					break;
				
				case PATCH_PASS_THROUGH:
					
					SampleOut = SampleIn;
					
					break;
					
				case PATCH_ALPHA:
				
					SampleIn = SampleIn; 
					arm_biquad_cas_df1_32x64_q31(&MyAlphaIIR,&SampleIn,&SampleOut,1);
					arm_scale_q31(&SampleOut,AlphaIIR_Norm,0,&SampleOut,1);
					SampleIn=SampleOut;
					PickupTranslator(&SampleIn,&SampleOut);
					
			
					break;
					
				case PATCH_BETA:
					
					SampleIn = SampleIn; 
					arm_biquad_cas_df1_32x64_q31(&MyBetaIIR,&SampleIn,&SampleOut,1);
					arm_scale_q31(&SampleOut,BetaIIR_Norm,0,&SampleOut,1);
					SampleIn=SampleOut;
					PickupTranslator(&SampleIn,&SampleOut);
					
					break;
				
				case PATCH_GAMMA:
				
					arm_biquad_cas_df1_32x64_q31(&MyGammaIIR,&SampleIn,&SampleOut,1);
					arm_scale_q31(&SampleOut,GammaIIR_Norm,0,&SampleOut,1);
					overdrive(&SampleOut,&SampleOut);
					arm_scale_q31(&SampleOut,((q31_t)(DriveLevel)<<26),1,&SampleOut,1);
					overdrive(&SampleOut,&SampleOut);
			
					break;
				
				case PATCH_DELTA:
					
					PickupTranslator(&SampleIn,&SampleOut);
					Octave(&SampleOut,&SampleOut);
					arm_biquad_cas_df1_32x64_q31(&MyBetaIIR,&SampleIn,&SampleIn,1);
					arm_scale_q31(&SampleIn,BetaIIR_Norm,0,&SampleIn,1);
				
					 SampleOut += SampleIn>>1;
					
					break;
			}
		}
		else
		{
			SampleOut = SampleIn;
		}
		if(MuteActive == TRUE)
		{
			SampleOut = 0;
		}
		
		QueuedDACSampleOut = TranslateForDAC(SampleOut);
		QueuedI2CSampleOut = TranslateForI2S(SampleOut);
		
		//Start next Sample
		ADC0_SC1A  =  DIFF_DIFFERENTIAL | 1; 
	}
int32_t main(void) 
{ 
  float32_t  *inputF32, *outputF32;  
  arm_biquad_cas_df1_32x64_ins_q31 S1; 
  arm_biquad_cas_df1_32x64_ins_q31 S2; 
  arm_biquad_casd_df1_inst_q31 S3; 
  arm_biquad_casd_df1_inst_q31 S4; 
  arm_biquad_casd_df1_inst_q31 S5; 
  int i;
  int32_t status;
	 
  inputF32 = &testInput_f32[0];	 
  outputF32 = &testOutput[0]; 
	 
  /* Initialize the state and coefficient buffers for all Biquad sections */

  arm_biquad_cas_df1_32x64_init_q31(&S1, NUMSTAGES, 
				    (q31_t *) &coeffTable[190*0 + 10*(gainDB[0] + 9)],
				    &biquadStateBand1Q31[0], 2);

  arm_biquad_cas_df1_32x64_init_q31(&S2, NUMSTAGES, 
				    (q31_t *) &coeffTable[190*1 + 10*(gainDB[1] + 9)],
				    &biquadStateBand2Q31[0], 2);
	 
  arm_biquad_cascade_df1_init_q31(&S3, NUMSTAGES, 
				  (q31_t *) &coeffTable[190*2 + 10*(gainDB[2] + 9)],
				  &biquadStateBand3Q31[0], 2);

  arm_biquad_cascade_df1_init_q31(&S4, NUMSTAGES, 
				  (q31_t *) &coeffTable[190*3 + 10*(gainDB[3] + 9)],
				  &biquadStateBand4Q31[0], 2); 
	 
  arm_biquad_cascade_df1_init_q31(&S5, NUMSTAGES, 
				  (q31_t *) &coeffTable[190*4 + 10*(gainDB[4] + 9)],
				  &biquadStateBand5Q31[0], 2); 
	 
 
  /* Call the process functions and needs to change filter coefficients  
     for varying the gain of each band */ 
 
  for(i=0; i < NUMBLOCKS; i++) 
    {	 

      /* ---------------------------------------------------------------------- 
      ** Convert block of input data from float to Q31 
      ** ------------------------------------------------------------------- */ 

      arm_float_to_q31(inputF32 + (i*BLOCKSIZE), inputQ31, BLOCKSIZE);	   
	  	 
      /* ----------------------------------------------------------------------
      ** Scale down by 1/8.  This provides additional headroom so that the
      ** graphic EQ can apply gain.
      ** ------------------------------------------------------------------- */

      arm_scale_q31(inputQ31, 0x7FFFFFFF, -3, inputQ31, BLOCKSIZE);

      /* ----------------------------------------------------------------------
      ** Call the Q31 Biquad Cascade DF1 32x64 process function for band1, band2
      ** ------------------------------------------------------------------- */

      arm_biquad_cas_df1_32x64_q31(&S1, inputQ31, outputQ31, BLOCKSIZE); 
      arm_biquad_cas_df1_32x64_q31(&S2, outputQ31, outputQ31, BLOCKSIZE); 

      /* ---------------------------------------------------------------------- 
      ** Call the Q31 Biquad Cascade DF1 process function for band3, band4, band5
      ** ------------------------------------------------------------------- */		   

      arm_biquad_cascade_df1_q31(&S3, outputQ31, outputQ31, BLOCKSIZE); 
      arm_biquad_cascade_df1_q31(&S4, outputQ31, outputQ31, BLOCKSIZE);	 
      arm_biquad_cascade_df1_q31(&S5, outputQ31, outputQ31, BLOCKSIZE); 
 
      /* ---------------------------------------------------------------------- 
      ** Convert Q31 result back to float 
      ** ------------------------------------------------------------------- */ 

      arm_q31_to_float(outputQ31, outputF32 + (i * BLOCKSIZE), BLOCKSIZE);

      /* ---------------------------------------------------------------------- 
      ** Scale back up
      ** ------------------------------------------------------------------- */ 

      arm_scale_f32(outputF32 + (i * BLOCKSIZE), 8.0f, outputF32 + (i * BLOCKSIZE), BLOCKSIZE);
    }; 

	snr = arm_snr_f32(testRefOutput_f32, testOutput, TESTLENGTH);

	if (snr < SNR_THRESHOLD_F32) 
	{ 
	    status = ARM_MATH_TEST_FAILURE; 
	} 
	else
	{
	    status = ARM_MATH_SUCCESS; 
	}
		 
  /* ---------------------------------------------------------------------- 
  ** Loop here if the signal does not match the reference output.
  ** ------------------------------------------------------------------- */ 
	 
  if( status != ARM_MATH_SUCCESS) 
    { 
      while(1); 
    } 

    while(1);                             /* main function does not return */
}