Improved LTR FSK decoder for LTR, LTR-Net and Passport decoders. Added IIR DC blocking filter and used improved slicer from the FSK decoder.

Added instrumentation to Passport decoder and updated some of the instrumentation components.
This commit is contained in:
dennis.sheirer
2014-05-01 23:24:51 +00:00
parent d7115f2886
commit da1db8a804
25 changed files with 803 additions and 496 deletions

View File

@@ -45,6 +45,8 @@ public class BinaryTapViewPanel extends TapViewPanel
getModel().setSampleCount(
(int)( getModel().getSampleCount() * tap.getSampleRateRatio() ) );
getModel().setDelay( tap.getDelay() );
}
@Override

View File

@@ -29,10 +29,12 @@ import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.util.HashMap;
import java.util.List;
import javax.swing.JCheckBoxMenuItem;
import javax.swing.JInternalFrame;
import javax.swing.JMenu;
import javax.swing.JMenuItem;
import javax.swing.JPopupMenu;
import javax.swing.JSeparator;
@@ -101,8 +103,12 @@ public class DecoderViewFrame extends JInternalFrame
{
JMenu tapMenu = new JMenu( "Taps" );
popup.add( tapMenu );
Instrumentable i = (Instrumentable)mDecoder;
tapMenu.add( new AddAllTapsItem( i.getTaps() ) );
tapMenu.add( new JSeparator() );
for( Tap tap: i.getTaps() )
{
@@ -157,13 +163,21 @@ public class DecoderViewFrame extends JInternalFrame
break;
}
add( panel, "span" );
validate();
mPanelMap.put( tap, panel );
if( panel != null )
{
add( panel, "span" );
validate();
mPanelMap.put( tap, panel );
((Instrumentable)mDecoder).addTap( tap );
((Instrumentable)mDecoder).addTap( tap );
}
else
{
Log.info( "Tap panel is null, couldn't add for tap " +
tap.getName() + "[" + tap.getType().toString() + "]" );
}
}
public void remove( Tap tap )
@@ -178,9 +192,34 @@ public class DecoderViewFrame extends JInternalFrame
mPanelMap.remove( tap );
}
public class AddAllTapsItem extends JMenuItem
{
private final List<Tap> mTaps;
public AddAllTapsItem( final List<Tap> taps )
{
super( "All Taps" );
mTaps = taps;
addActionListener( new ActionListener()
{
@Override
public void actionPerformed( ActionEvent e )
{
for( Tap tap: mTaps )
{
DecoderViewFrame.this.add( tap );
}
}
} );
}
}
public class TapSelectionItem extends JCheckBoxMenuItem
{
private static final long serialVersionUID = 1L;
private Tap mTap;
public TapSelectionItem( Tap tap )

View File

@@ -28,8 +28,11 @@ import java.awt.geom.Point2D;
import java.util.List;
import java.util.Observable;
import log.Log;
public class FloatTapViewPanel extends TapViewPanel
{
private static final long serialVersionUID = 1L;
private Tap mTap;
private List<Float> mSamples;
private int mSampleCount;
@@ -40,16 +43,20 @@ public class FloatTapViewPanel extends TapViewPanel
mTap = tap;
mTap.addListener( getModel() );
mSampleCount = (int)( 2000 * tap.getSampleRateRatio() );
getModel().setSampleCount( mSampleCount );
getModel().setDelay( tap.getDelay() );
getModel().setSampleCount(
(int)( getModel().getSampleCount() * tap.getSampleRateRatio() ) );
Log.info( "Float Tap Panel [" + tap.getName() + "] count: " +
getModel().getSampleCount() + " delay:" + getModel().getDelay() );
}
@Override
public void update( Observable arg0, Object arg1 )
{
mSamples = (List<Float>)getModel().getSamples();
mSampleCount = getModel().getSampleCount();
repaint();
}
@@ -68,7 +75,8 @@ public class FloatTapViewPanel extends TapViewPanel
g2.drawLine( 0, (int)middle, width, (int)middle );
if( mSamples != null && mSamples.size() > 0 )
if( mSamples != null &&
mSamples.size() > 0 )
{
g2.setColor( getForeground() );

View File

@@ -24,9 +24,13 @@ import java.util.Collections;
import java.util.List;
import java.util.Observable;
import log.Log;
import dsp.fsk.SymbolEvent;
public class SampleModel<T> extends Observable implements TapListener<T>
{
private int mSampleCount = 2000;
private int mDelay = 0;
private ArrayList<T> mSamples = new ArrayList<T>();
public SampleModel()
@@ -56,15 +60,32 @@ public class SampleModel<T> extends Observable implements TapListener<T>
changed();
}
public void setDelay( int delay )
{
mDelay = delay;
}
public int getDelay()
{
return mDelay;
}
@Override
public void receive( T t )
{
mSamples.add( t );
while( mSamples.size() > mSampleCount )
if( mDelay > 0 )
{
mSamples.remove( 0 );
mDelay--;
}
else
{
mSamples.add( t );
while( mSamples.size() > mSampleCount )
{
mSamples.remove( 0 );
}
}
changed();

View File

@@ -28,14 +28,16 @@ import java.awt.geom.Rectangle2D;
import java.util.List;
import java.util.Observable;
import log.Log;
import dsp.fsk.SymbolEvent;
public class SymbolEventTapViewPanel extends TapViewPanel
{
private SymbolEventTap mTap;
private static final long serialVersionUID = 1L;
private SymbolEventTap mTap;
private List<SymbolEvent> mSamples;
private int mSampleCount;
private int mOffset = 0;
public SymbolEventTapViewPanel( SymbolEventTap tap )
{
@@ -44,15 +46,18 @@ public class SymbolEventTapViewPanel extends TapViewPanel
mTap = tap;
mTap.addListener( getModel() );
getModel().setSampleCount(
(int)( getModel().getSampleCount() * tap.getSampleRateRatio() ) );
mSampleCount = (int)( getModel().getSampleCount() * tap.getSampleRateRatio() );
getModel().setSampleCount( mSampleCount );
getModel().setDelay( tap.getDelay() );
}
@Override
public void update( Observable arg0, Object arg1 )
{
mSamples = (List<SymbolEvent>)getModel().getSamples();
mSampleCount = getModel().getSampleCount();
repaint();
}

View File

@@ -44,6 +44,7 @@ import decode.DecoderType;
import decode.fleetsync2.Fleetsync2Decoder;
import decode.mdc1200.MDCDecoder;
import decode.mpt1327.MPT1327Decoder;
import decode.passport.PassportDecoder;
public class WaveSourceFrame extends JInternalFrame implements PositionListener
{
@@ -138,6 +139,8 @@ public class WaveSourceFrame extends JInternalFrame implements PositionListener
case MPT1327:
decoder = new MPT1327Decoder( SampleType.FLOAT, null );
break;
case PASSPORT:
decoder = new PassportDecoder( SampleType.FLOAT, null );
}
if( decoder != null )

View File

@@ -17,6 +17,7 @@
******************************************************************************/
package instrument.tap.stream;
import log.Log;
import instrument.tap.TapListener;
import instrument.tap.TapType;
import sample.Listener;