void RDSdecode(float theSample){
  RXoutput=matchedFilter(theSample) ;
  BitClkPLL(RXoutput) ;
  BitClock++ ;
  BitClockTimer += sampleTime2 ;
  if( BitClockTimer > RDSperiod ){
    BitClockTimer-=RDSperiod ;
    BitClock=0 ;
    }
  if(BitClock==midthPosition) { // undo differential coding
    lastSample=xRDSsample ;
    xRDSsample=(RXoutput>0) ; // sampling and bit decision
    doRDSbit( xRDSsample!=lastSample) ;
    }
  }
