@Override
  public List<Tap> getTaps() {
    if (mAvailableTaps == null) {
      mAvailableTaps = new ArrayList<Tap>();

      if (mSourceSampleType == SampleType.COMPLEX) {
        if (mCQPSKDemodulator != null) {
          mAvailableTaps.addAll(mCQPSKDemodulator.getTaps());
        }
        //				mAvailableTaps.add( new ComplexTap( INSTRUMENT_COMPLEX_INPUT, 0, 1.0f ) );
        //				mAvailableTaps.add( new ComplexTap( INSTRUMENT_BASEBAND_FILTER_OUTPUT, 0, 1.0f ) );
      } else {
        mAvailableTaps.add(new FloatTap(INSTRUMENT_REAL_INPUT, 0, 1.0f));
      }

      if (mModulation == Modulation.C4FM) {
        mAvailableTaps.add(new FloatTap(INSTRUMENT_DGC_OUTPUT, 0, 1.0f));
        mAvailableTaps.add(new FloatTap(INSTRUMENT_C4FM_SYMBOL_FILTER_OUTPUT, 0, 0.1f));
        mAvailableTaps.add(new DibitTap(INSTRUMENT_C4FM_SLICER_OUTPUT, 0, 0.1f));

        if (mSymbolFilter != null) {
          mAvailableTaps.addAll(mSymbolFilter.getTaps());
        }
      } else {
        mAvailableTaps.add(new ComplexTap(INSTRUMENT_AGC_OUTPUT, 0, 1.0f));
        mAvailableTaps.add(new QPSKTap(INSTRUMENT_QPSK_DEMODULATOR_OUTPUT, 0, 1.0f));
        mAvailableTaps.add(new DibitTap(INSTRUMENT_CQPSK_SLICER_OUTPUT, 0, 0.1f));
      }
    }

    return mAvailableTaps;
  }