Adds an AM Demodulator to the list of available decoders.

This commit is contained in:
dennis.sheirer
2014-10-11 18:00:49 +00:00
parent c5c3029392
commit 61ecb5abf2
15 changed files with 472 additions and 47 deletions

View File

@@ -0,0 +1,62 @@
package dsp.am;
import sample.Broadcaster;
import sample.Listener;
import sample.complex.ComplexSample;
import dsp.filter.ComplexFIRFilter;
import dsp.filter.FilterFactory;
import dsp.filter.Window.WindowType;
public class AMDemodulator implements Listener<ComplexSample>
{
private Broadcaster<Float> mBroadcaster = new Broadcaster<Float>();
private ComplexFIRFilter mIQFilter;
public AMDemodulator()
{
this( FilterFactory.getLowPass( 48000, 2000, 73, WindowType.HAMMING ),
1000.0 );
}
public AMDemodulator( double[] iqFilter, double iqGain )
{
mIQFilter = new ComplexFIRFilter( iqFilter, iqGain );
mIQFilter.setListener( new Demodulator() );
}
@Override
public void receive( ComplexSample sample )
{
mIQFilter.receive( sample );
}
/**
* Adds a listener to receive demodulated samples
*/
public void addListener( Listener<Float> listener )
{
mBroadcaster.addListener( listener );
}
/**
* Removes a listener from receiving demodulated samples
*/
public void removeListener( Listener<Float> listener )
{
mBroadcaster.removeListener( listener );
}
public class Demodulator implements Listener<ComplexSample>
{
@Override
public void receive( ComplexSample sample )
{
float demodulated = (float)Math.abs(
Math.sqrt( ( sample.real() * sample.real() ) +
( sample.imaginery() * sample.imaginery() ) ) );
mBroadcaster.broadcast( demodulated * 30.0f );
}
}
}