P25 LSM decoder work in progress. Adds a CQPSK decoder based on Max's (KA1RBI) scope.py and gardner loop.

The CQPSK decoder is starting to take shape, but needs more tweaking and testing.  It's not keeping a good lock on strong P25 signals.  I have to add some more features to the intrumentation package to allow me to visualize the internals of the CQPSK decoder so that I can get a better sense of what needs fine tuning.

The CQPSK decoder may work for anyone that wants to sync the repo and run the build script.
This commit is contained in:
dennis.sheirer
2015-02-10 00:42:08 +00:00
parent 9310fb0daf
commit a65e821e85
43 changed files with 1996 additions and 413 deletions

View File

@@ -22,10 +22,14 @@ import instrument.tap.Tap;
import instrument.tap.TapViewPanel;
import instrument.tap.stream.BinaryTap;
import instrument.tap.stream.BinaryTapViewPanel;
import instrument.tap.stream.ComplexTap;
import instrument.tap.stream.ComplexTapViewPanel;
import instrument.tap.stream.DibitTap;
import instrument.tap.stream.DibitTapViewPanel;
import instrument.tap.stream.FloatTap;
import instrument.tap.stream.FloatTapViewPanel;
import instrument.tap.stream.QPSKTap;
import instrument.tap.stream.QPSKTapPanel;
import instrument.tap.stream.SymbolEventTap;
import instrument.tap.stream.SymbolEventTapViewPanel;
@@ -52,6 +56,7 @@ import org.slf4j.LoggerFactory;
import sample.Listener;
import source.Source.SampleType;
import source.wave.ComplexWaveSource;
import source.wave.FloatWaveSource;
import source.wave.WaveSource;
import source.wave.WaveSource.PositionListener;
@@ -77,7 +82,8 @@ public class DecoderViewFrame extends JInternalFrame
if( source.getSampleType() == SampleType.COMPLEX )
{
mLog.error( "Hey, we're not wired up yet for complex" );
ComplexWaveSource cws = (ComplexWaveSource)mWaveSource;
cws.addListener( mDecoder.getComplexReceiver() );
}
else if( source.getSampleType() == SampleType.REAL )
{
@@ -167,6 +173,7 @@ public class DecoderViewFrame extends JInternalFrame
panel = new BinaryTapViewPanel( (BinaryTap)tap );
break;
case STREAM_COMPLEX:
panel = new ComplexTapViewPanel( (ComplexTap)tap );
break;
case STREAM_DIBIT:
panel = new DibitTapViewPanel( (DibitTap)tap );
@@ -174,6 +181,9 @@ public class DecoderViewFrame extends JInternalFrame
case STREAM_FLOAT:
panel = new FloatTapViewPanel( (FloatTap)tap );
break;
case STREAM_QPSK:
panel = new QPSKTapPanel( (QPSKTap)tap );
break;
case STREAM_SYMBOL:
panel = new SymbolEventTapViewPanel( (SymbolEventTap)tap );
break;
@@ -211,6 +221,8 @@ public class DecoderViewFrame extends JInternalFrame
public class AddAllTapsItem extends JMenuItem
{
private static final long serialVersionUID = 1L;
private final List<Tap> mTaps;
public AddAllTapsItem( final List<Tap> taps )