Work in progress

This commit is contained in:
denny
2015-09-14 21:31:26 -04:00
parent 732d478502
commit c7227ca780
42 changed files with 978 additions and 1356 deletions

View File

@@ -2,6 +2,7 @@ package module.decode.p25;
import instrument.Instrumentable;
import instrument.tap.Tap;
import instrument.tap.TapGroup;
import instrument.tap.stream.AdditiveFloatTap;
import instrument.tap.stream.FloatTap;
@@ -18,7 +19,6 @@ import sample.real.RealSampleProvider;
import source.tuner.frequency.FrequencyCorrectionControl;
import source.tuner.frequency.FrequencyCorrectionControl.FrequencyCorrectionResetListener;
import dsp.gain.DirectGainControl;
import dsp.gain.GainController;
public class C4FMSymbolFilter implements FrequencyCorrectionResetListener,
Listener<RealBuffer>,
@@ -164,7 +164,7 @@ public class C4FMSymbolFilter implements FrequencyCorrectionResetListener,
/* Instrumentation Taps */
private static final String INSTRUMENT_SYMBOL_SPREAD = "Tap Point: Symbol Spread (Goal=2.0)";
private FloatTap mSymbolSpreadTap;
private List<Tap> mAvailableTaps;
private List<TapGroup> mAvailableTaps;
private static final int NUMBER_FILTER_TAPS = 8;
private static final int NUMBER_FILTER_STEPS = 128;
@@ -427,25 +427,29 @@ public class C4FMSymbolFilter implements FrequencyCorrectionResetListener,
}
@Override
public List<Tap> getTaps()
public List<TapGroup> getTapGroups()
{
if( mAvailableTaps == null )
{
mAvailableTaps = new ArrayList<Tap>();
mAvailableTaps = new ArrayList<>();
/*
* Since the target is 2.0, we subtract 2.0 from the value so that
* a good value is plotted right on the zero center line
*/
mAvailableTaps.add(
TapGroup group = new TapGroup( "C4FM Symbol Filter" );
group.add(
new AdditiveFloatTap( INSTRUMENT_SYMBOL_SPREAD, 0, 0.1f, -2.0f ) );
mAvailableTaps.add( group );
}
return mAvailableTaps;
}
@Override
public void addTap( Tap tap )
public void registerTap( Tap tap )
{
if( tap.getName().contentEquals( INSTRUMENT_SYMBOL_SPREAD ) )
{
@@ -454,7 +458,7 @@ public class C4FMSymbolFilter implements FrequencyCorrectionResetListener,
}
@Override
public void removeTap( Tap tap )
public void unregisterTap( Tap tap )
{
if( tap.getName().contentEquals( INSTRUMENT_SYMBOL_SPREAD ) )
{

View File

@@ -30,7 +30,7 @@ import bits.ISyncDetectListener;
import bits.MultiSyncPatternMatcher;
import bits.SoftSyncDetector;
import bits.SyncDetector;
import dsp.psk.CQPSKDemodulator;
import dsp.psk.LSMDemodulator;
import dsp.symbol.Dibit;
import dsp.symbol.FrameSync;
import edac.BCH_63_16_11;
@@ -122,7 +122,7 @@ public class P25MessageFramer implements Listener<Dibit>
mAssemblers.add( new P25MessageAssembler() );
}
public P25MessageFramer( AliasList aliasList, CQPSKDemodulator demodulator )
public P25MessageFramer( AliasList aliasList, LSMDemodulator demodulator )
{
this( aliasList );
@@ -675,11 +675,11 @@ public class P25MessageFramer implements Listener<Dibit>
*/
public class CostasPhaseErrorDetector extends SyncDetector
{
private CQPSKDemodulator mDemodulator;
private LSMDemodulator mDemodulator;
private double mCorrection;
public CostasPhaseErrorDetector( FrameSync frameSync,
CQPSKDemodulator demodulator, double correction )
LSMDemodulator demodulator, double correction )
{
super( frameSync.getSync() );

View File

@@ -18,6 +18,7 @@
package module.decode.p25;
import instrument.tap.Tap;
import instrument.tap.TapGroup;
import instrument.tap.stream.DibitTap;
import instrument.tap.stream.FloatBufferTap;
import instrument.tap.stream.FloatTap;
@@ -49,7 +50,7 @@ public class P25_C4FMDecoder extends P25Decoder implements IRealBufferListener
private final static int MAXIMUM_FREQUENCY_CORRECTION = 3000; //Hertz, +/-
private List<Tap> mAvailableTaps;
private List<TapGroup> mAvailableTaps;
private RealFIRFilter_RB_RB mC4FMPreFilter;
private FrequencyCorrectionControl mFrequencyCorrectionControl;
private C4FMSymbolFilter mSymbolFilter;
@@ -146,21 +147,25 @@ public class P25_C4FMDecoder extends P25Decoder implements IRealBufferListener
* Instrumentation taps for monitoring internal processing
*/
@Override
public List<Tap> getTaps()
public List<TapGroup> getTapGroups()
{
if( mAvailableTaps == null )
{
mAvailableTaps = new ArrayList<Tap>();
mAvailableTaps = new ArrayList<>();
mAvailableTaps.add( new FloatTap( INSTRUMENT_FILTER_OUTPUT, 0, 1.0f ) );
TapGroup group = new TapGroup( "P25 C4FM Decoder" );
group.add( new FloatTap( INSTRUMENT_FILTER_OUTPUT, 0, 1.0f ) );
group.add( new FloatTap( INSTRUMENT_C4FM_SYMBOL_FILTER_OUTPUT, 0, 0.1f ) );
group.add( new DibitTap( INSTRUMENT_C4FM_SLICER_OUTPUT, 0, 0.1f ) );
mAvailableTaps.add( group );
if( mSymbolFilter != null )
{
mAvailableTaps.addAll( mSymbolFilter.getTaps() );
mAvailableTaps.addAll( mSymbolFilter.getTapGroups() );
}
mAvailableTaps.add( new FloatTap( INSTRUMENT_C4FM_SYMBOL_FILTER_OUTPUT, 0, 0.1f ) );
mAvailableTaps.add( new DibitTap( INSTRUMENT_C4FM_SLICER_OUTPUT, 0, 0.1f ) );
}
return mAvailableTaps;
@@ -170,11 +175,11 @@ public class P25_C4FMDecoder extends P25Decoder implements IRealBufferListener
* Adds an instrumentation tap to monitor internal processing.
*/
@Override
public void addTap( Tap tap )
public void registerTap( Tap tap )
{
if( mSymbolFilter != null )
{
mSymbolFilter.addTap( tap );
mSymbolFilter.registerTap( tap );
}
switch( tap.getName() )
@@ -207,11 +212,11 @@ public class P25_C4FMDecoder extends P25Decoder implements IRealBufferListener
* Removes the instrumentation tap.
*/
@Override
public void removeTap( Tap tap )
public void unregisterTap( Tap tap )
{
if( mSymbolFilter != null )
{
mSymbolFilter.removeTap( tap );
mSymbolFilter.unregisterTap( tap );
}
switch( tap.getName() )

View File

@@ -18,6 +18,7 @@
package module.decode.p25;
import instrument.tap.Tap;
import instrument.tap.TapGroup;
import instrument.tap.stream.ComplexSampleTap;
import instrument.tap.stream.ComplexTap;
import instrument.tap.stream.DibitTap;
@@ -40,7 +41,7 @@ import dsp.filter.FilterFactory;
import dsp.filter.Window.WindowType;
import dsp.filter.fir.complex.ComplexFIRFilter_CB_CB;
import dsp.gain.ComplexFeedForwardGainControl;
import dsp.psk.CQPSKDemodulator;
import dsp.psk.LSMDemodulator;
import dsp.psk.QPSKPolarSlicer;
public class P25_LSMDecoder extends P25Decoder implements IComplexBufferListener
@@ -53,14 +54,14 @@ public class P25_LSMDecoder extends P25Decoder implements IComplexBufferListener
private static final String INSTRUMENT_QPSK_DEMODULATOR_OUTPUT = "Tap Point: CQPSK Demodulator Output";
private static final String INSTRUMENT_CQPSK_SLICER_OUTPUT = "Tap Point: CQPSK Slicer Output";
private List<Tap> mAvailableTaps;
private List<TapGroup> mAvailableTaps;
private ComplexFIRFilter_CB_CB mBasebandFilter;
private ComplexBufferToStreamConverter mStreamConverter =
new ComplexBufferToStreamConverter();
private ComplexFeedForwardGainControl mAGC =
new ComplexFeedForwardGainControl( 32 );
private CQPSKDemodulator mCQPSKDemodulator = new CQPSKDemodulator();
private LSMDemodulator mCQPSKDemodulator = new LSMDemodulator();
private QPSKPolarSlicer mCQPSKSlicer = new QPSKPolarSlicer();
private P25MessageFramer mMessageFramer;
@@ -137,20 +138,24 @@ public class P25_LSMDecoder extends P25Decoder implements IComplexBufferListener
* Provides a list of instrumentation taps for monitoring internal processing
*/
@Override
public List<Tap> getTaps()
public List<TapGroup> getTapGroups()
{
if( mAvailableTaps == null )
{
mAvailableTaps = new ArrayList<Tap>();
mAvailableTaps = new ArrayList<>();
mAvailableTaps.add( new ComplexTap( INSTRUMENT_BASEBAND_FILTER_OUTPUT, 0, 1.0f ) );
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 ) );
TapGroup group = new TapGroup( "P25 LSM Decoder" );
group.add( new ComplexTap( INSTRUMENT_BASEBAND_FILTER_OUTPUT, 0, 1.0f ) );
group.add( new ComplexTap( INSTRUMENT_AGC_OUTPUT, 0, 1.0f ) );
group.add( new QPSKTap( INSTRUMENT_QPSK_DEMODULATOR_OUTPUT, 0, 1.0f ) );
group.add( new DibitTap( INSTRUMENT_CQPSK_SLICER_OUTPUT, 0, 0.1f ) );
mAvailableTaps.add( group );
if( mCQPSKDemodulator != null )
{
mAvailableTaps.addAll( mCQPSKDemodulator.getTaps() );
mAvailableTaps.addAll( mCQPSKDemodulator.getTapGroups() );
}
}
@@ -161,11 +166,11 @@ public class P25_LSMDecoder extends P25Decoder implements IComplexBufferListener
* Adds the instrumentation tap
*/
@Override
public void addTap( Tap tap )
public void registerTap( Tap tap )
{
if( mCQPSKDemodulator != null )
{
mCQPSKDemodulator.addTap( tap );
mCQPSKDemodulator.registerTap( tap );
}
switch( tap.getName() )
@@ -198,11 +203,11 @@ public class P25_LSMDecoder extends P25Decoder implements IComplexBufferListener
* Removes the instrumentation tap
*/
@Override
public void removeTap( Tap tap )
public void unregisterTap( Tap tap )
{
if( mCQPSKDemodulator != null )
{
mCQPSKDemodulator.removeTap( tap );
mCQPSKDemodulator.unregisterTap( tap );
}
switch( tap.getName() )