Resolved issue with LJ1200 decoder using inverted bit output

This commit is contained in:
dennis.sheirer
2014-11-16 13:43:41 +00:00
parent 827806b6f2
commit 5ef806ef02
7 changed files with 43 additions and 11 deletions

View File

@@ -42,7 +42,7 @@ import decode.mdc1200.MDCDecoder;
import decode.mpt1327.MPT1327ChannelState;
import decode.mpt1327.MPT1327Decoder;
import decode.nbfm.NBFMChannelState;
import decode.nbfm.NBFMConventionalDecoder;
import decode.nbfm.NBFMDecoder;
import decode.p25.P25ChannelState;
import decode.p25.P25Decoder;
import decode.passport.PassportChannelState;
@@ -71,7 +71,7 @@ public class DecoderFactory
retVal = new AMDecoder( sampleType );
break;
case NBFM:
retVal = new NBFMConventionalDecoder( sampleType );
retVal = new NBFMDecoder( sampleType );
break;
case LTR_STANDARD:
DecodeConfigLTRStandard ltrStandardConfig =

View File

@@ -80,7 +80,7 @@ public class LJ1200Decoder extends Decoder implements Instrumentable
mDecimationFilter.setListener( mBandPassFilter );
mFSKDecoder = new FSK2Decoder( DECIMATED_SAMPLE_RATE,
SYMBOL_RATE, Output.INVERTED );
SYMBOL_RATE, Output.NORMAL );
mBandPassFilter.setListener( mFSKDecoder );
mMessageFramer = new MessageFramer(

View File

@@ -119,6 +119,7 @@ public class LJ1200Message extends Message
sb.append( "VRC: " + getVRC() );
sb.append( " LRC: " + getLRC() );
sb.append( " FUNCTION: " + getFunction() );
sb.append( "ADDRESS:" + getAddress() );
return sb.toString();
}

View File

@@ -24,7 +24,7 @@ import decode.DecoderType;
import dsp.filter.DCRemovalFilter2;
import dsp.nbfm.FilteringNBFMDemodulator;
public class NBFMConventionalDecoder extends Decoder
public class NBFMDecoder extends Decoder
{
/**
* This value determines how quickly the DC remove filter responds to
@@ -35,7 +35,7 @@ public class NBFMConventionalDecoder extends Decoder
private FilteringNBFMDemodulator mDemodulator;
private DCRemovalFilter2 mDCRemovalFilter;
public NBFMConventionalDecoder( SampleType sampleType )
public NBFMDecoder( SampleType sampleType )
{
super( sampleType );

View File

@@ -2,6 +2,7 @@ package dsp.agc;
import java.util.concurrent.atomic.AtomicBoolean;
import sample.real.RealBuffer;
import sample.real.RealSampleListener;
import sample.real.RealSampleProvider;
import buffer.DoubleCircularBuffer;
@@ -145,7 +146,32 @@ public class RealAutomaticGainControl implements RealSampleListener,
}
@Override
public void receive( float currentSample )
public void receive( float currentSample )
{
float processed = process( currentSample );
if( mListener != null )
{
mListener.receive( processed );
}
}
/**
* Applies AGC to a buffer of real (float) samples
*/
public RealBuffer process( RealBuffer buffer )
{
float[] samples = buffer.getSamples();
for( int x = 0; x < samples.length; x++ )
{
samples[ x ] = process( samples[ x ] );
}
return new RealBuffer( samples );
}
public float process( float currentSample )
{
float delayedSample = mDelayBuffer.get( currentSample );
@@ -208,11 +234,8 @@ public class RealAutomaticGainControl implements RealSampleListener,
}
delayedSample = (float)( delayedSample * gain );
if( mListener != null )
{
mListener.receive( delayedSample );
}
return delayedSample;
}
/**

View File

@@ -46,6 +46,7 @@ import source.wave.WaveSource.PositionListener;
import decode.Decoder;
import decode.DecoderType;
import decode.fleetsync2.Fleetsync2Decoder;
import decode.lj1200.LJ1200Decoder;
import decode.ltrnet.LTRNetDecoder;
import decode.mdc1200.MDCDecoder;
import decode.mpt1327.MPT1327Decoder;
@@ -144,6 +145,9 @@ public class WaveSourceFrame extends JInternalFrame implements PositionListener
case FLEETSYNC2:
decoder = new Fleetsync2Decoder( null );
break;
case LJ_1200:
decoder = new LJ1200Decoder( null );
break;
case LTR_NET:
decoder = new LTRNetDecoder( SampleType.REAL, null, MessageDirection.OSW );
break;

View File

@@ -29,6 +29,7 @@ import javax.sound.sampled.TargetDataLine;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import dsp.agc.RealAutomaticGainControl;
import sample.Listener;
import sample.adapter.SampleAdapter;
import sample.real.RealBuffer;
@@ -49,6 +50,7 @@ public class RealMixerSource extends RealSource
private String mDisplayName;
private int mBytesPerFrame = 0;
private SampleAdapter mSampleAdapter;
private RealAutomaticGainControl mAGC = new RealAutomaticGainControl();
CopyOnWriteArrayList<Listener<RealBuffer>> mSampleListeners =
new CopyOnWriteArrayList<Listener<RealBuffer>>();
@@ -118,10 +120,12 @@ public class RealMixerSource extends RealSource
* buffer, otherwise send him a copy of the buffer */
if( it.hasNext() )
{
// next.receive( mAGC.process( samples.copyOf() ) );
next.receive( samples.copyOf() );
}
else
{
// next.receive( mAGC.process( samples ) );
next.receive( samples );
}
}