mirror of
https://github.com/DSheirer/sdrtrunk.git
synced 2026-11-13 09:07:27 -05:00
Compare commits
6 Commits
v0.3.4-bet
...
v0.3.4-bet
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
dfaf506e23 | ||
|
|
81c9a352a8 | ||
|
|
e6937764c3 | ||
|
|
5bfc5bf456 | ||
|
|
ce83273393 | ||
|
|
95aa9f8803 |
@@ -1,4 +1,5 @@
|
|||||||
0.3.4 20180210
|
0.3.4 20180418
|
||||||
|
- New P25 C4FM decoder that uses Differential QPSK decoder instead of FM demodulation with 4FSK.
|
||||||
- Adds channel auto-start and ordering capability with startup dialog allowing user to invoke or bypass channel
|
- Adds channel auto-start and ordering capability with startup dialog allowing user to invoke or bypass channel
|
||||||
auto-start. Provides user with more control over startup configuration.
|
auto-start. Provides user with more control over startup configuration.
|
||||||
- Adds preferred tuner attribute to channel configuration allowing user to select a preferred tuner for the channel
|
- Adds preferred tuner attribute to channel configuration allowing user to select a preferred tuner for the channel
|
||||||
|
|||||||
@@ -15,7 +15,7 @@ repositories {
|
|||||||
mavenCentral()
|
mavenCentral()
|
||||||
}
|
}
|
||||||
|
|
||||||
version = '0.3.4-beta.1'
|
version = '0.3.4-beta.2'
|
||||||
sourceCompatibility = 1.8
|
sourceCompatibility = 1.8
|
||||||
|
|
||||||
sourceSets {
|
sourceSets {
|
||||||
|
|||||||
@@ -130,7 +130,7 @@ public class InterpolatingSampleBuffer
|
|||||||
*/
|
*/
|
||||||
public Complex getPrecedingSample()
|
public Complex getPrecedingSample()
|
||||||
{
|
{
|
||||||
mPrecedingSample.setValues(mDelayLineInphase[mDelayLinePointer + 4], mDelayLineQuadrature[mDelayLinePointer + 3]);
|
mPrecedingSample.setValues(mDelayLineInphase[mDelayLinePointer + 3], mDelayLineQuadrature[mDelayLinePointer + 3]);
|
||||||
return mPrecedingSample;
|
return mPrecedingSample;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -20,9 +20,9 @@ import io.github.dsheirer.dsp.filter.FilterFactory;
|
|||||||
import io.github.dsheirer.dsp.filter.design.FilterDesignException;
|
import io.github.dsheirer.dsp.filter.design.FilterDesignException;
|
||||||
import io.github.dsheirer.dsp.filter.fir.FIRFilterSpecification;
|
import io.github.dsheirer.dsp.filter.fir.FIRFilterSpecification;
|
||||||
import io.github.dsheirer.dsp.filter.fir.complex.ComplexFIRFilter;
|
import io.github.dsheirer.dsp.filter.fir.complex.ComplexFIRFilter;
|
||||||
|
import io.github.dsheirer.dsp.gain.ComplexFeedForwardGainControl;
|
||||||
import io.github.dsheirer.dsp.psk.DQPSKDemodulator;
|
import io.github.dsheirer.dsp.psk.DQPSKDemodulator;
|
||||||
import io.github.dsheirer.dsp.psk.InterpolatingSampleBuffer;
|
import io.github.dsheirer.dsp.psk.InterpolatingSampleBuffer;
|
||||||
import io.github.dsheirer.dsp.psk.InterpolatingSampleBufferInstrumented;
|
|
||||||
import io.github.dsheirer.dsp.psk.pll.CostasLoop;
|
import io.github.dsheirer.dsp.psk.pll.CostasLoop;
|
||||||
import io.github.dsheirer.sample.Listener;
|
import io.github.dsheirer.sample.Listener;
|
||||||
import io.github.dsheirer.sample.complex.ComplexBuffer;
|
import io.github.dsheirer.sample.complex.ComplexBuffer;
|
||||||
@@ -38,6 +38,7 @@ import java.util.concurrent.ScheduledExecutorService;
|
|||||||
public class P25_C4FMDecoder extends P25Decoder implements IComplexBufferListener, Listener<ComplexBuffer>
|
public class P25_C4FMDecoder extends P25Decoder implements IComplexBufferListener, Listener<ComplexBuffer>
|
||||||
{
|
{
|
||||||
private final static Logger mLog = LoggerFactory.getLogger(P25_C4FMDecoder.class);
|
private final static Logger mLog = LoggerFactory.getLogger(P25_C4FMDecoder.class);
|
||||||
|
private ComplexFeedForwardGainControl mAGC = new ComplexFeedForwardGainControl(32);
|
||||||
protected static final double SYMBOL_RATE = 4800;
|
protected static final double SYMBOL_RATE = 4800;
|
||||||
protected InterpolatingSampleBuffer mInterpolatingSampleBuffer;
|
protected InterpolatingSampleBuffer mInterpolatingSampleBuffer;
|
||||||
protected DQPSKDemodulator mQPSKDemodulator;
|
protected DQPSKDemodulator mQPSKDemodulator;
|
||||||
@@ -65,7 +66,7 @@ public class P25_C4FMDecoder extends P25Decoder implements IComplexBufferListene
|
|||||||
|
|
||||||
mCostasLoop = new CostasLoop(mSampleRate, SYMBOL_RATE);
|
mCostasLoop = new CostasLoop(mSampleRate, SYMBOL_RATE);
|
||||||
|
|
||||||
mInterpolatingSampleBuffer = new InterpolatingSampleBufferInstrumented((float)(sampleRate / SYMBOL_RATE));
|
mInterpolatingSampleBuffer = new InterpolatingSampleBuffer((float)(sampleRate / SYMBOL_RATE));
|
||||||
mQPSKDemodulator = new DQPSKDemodulator(mCostasLoop, mInterpolatingSampleBuffer);
|
mQPSKDemodulator = new DQPSKDemodulator(mCostasLoop, mInterpolatingSampleBuffer);
|
||||||
|
|
||||||
//Message framer can trigger a symbol-inversion correction to the PLL when detected
|
//Message framer can trigger a symbol-inversion correction to the PLL when detected
|
||||||
@@ -77,8 +78,11 @@ public class P25_C4FMDecoder extends P25Decoder implements IComplexBufferListene
|
|||||||
@Override
|
@Override
|
||||||
public void receive(ComplexBuffer complexBuffer)
|
public void receive(ComplexBuffer complexBuffer)
|
||||||
{
|
{
|
||||||
ComplexBuffer filtered = filter(complexBuffer);
|
ComplexBuffer basebandFiltered = filter(complexBuffer);
|
||||||
mQPSKDemodulator.receive(filtered);
|
|
||||||
|
ComplexBuffer gainApplied = mAGC.filter(basebandFiltered);
|
||||||
|
|
||||||
|
mQPSKDemodulator.receive(gainApplied);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected ComplexBuffer filter(ComplexBuffer complexBuffer)
|
protected ComplexBuffer filter(ComplexBuffer complexBuffer)
|
||||||
|
|||||||
Reference in New Issue
Block a user