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

@@ -23,20 +23,25 @@ import java.io.IOException;
import java.nio.ByteBuffer;
import java.nio.ByteOrder;
import java.nio.ShortBuffer;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Iterator;
import javax.sound.sampled.AudioFormat;
import javax.sound.sampled.AudioInputStream;
import javax.sound.sampled.AudioSystem;
import javax.sound.sampled.UnsupportedAudioFileException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import sample.Broadcaster;
import sample.Listener;
import sample.complex.ComplexSample;
public class ComplexWaveSource extends WaveSource
{
private final static Logger mLog =
LoggerFactory.getLogger( ComplexWaveSource.class );
private boolean mRunning = false;
private boolean mLoop = false;
@@ -51,8 +56,7 @@ public class ComplexWaveSource extends WaveSource
private static int BUFFER_SAMPLE_SIZE = 2000;
private ArrayList<Listener<ComplexSample>> mListeners =
new ArrayList<Listener<ComplexSample>>();
private Broadcaster<ComplexSample> mBroadcaster = new Broadcaster<ComplexSample>();
/**
* Single channel (mono) wave file playback source with optional looping
@@ -223,7 +227,7 @@ public class ComplexWaveSource extends WaveSource
if( broadcast )
{
send( new ComplexSample( (float)i, (float)q ) );
send( new ComplexSample( (float)i / 32767.0f, (float)q / 32767.0f ) );
}
success = true;
@@ -276,12 +280,7 @@ public class ComplexWaveSource extends WaveSource
*/
private void send( ComplexSample sample )
{
Iterator<Listener<ComplexSample>> it = mListeners.iterator();
while( it.hasNext() )
{
it.next().receive( sample );
}
mBroadcaster.broadcast( sample );
}
/**
@@ -289,12 +288,12 @@ public class ComplexWaveSource extends WaveSource
*/
public void addListener( Listener<ComplexSample> listener )
{
mListeners.add( listener );
mBroadcaster.addListener( listener );
}
public void removeListener( Listener<ComplexSample> listener )
{
mListeners.remove( listener );
mBroadcaster.removeListener( listener );
}
@Override