mirror of
https://github.com/DSheirer/sdrtrunk.git
synced 2026-11-12 16:47:31 -05:00
113 lines
2.1 KiB
Java
113 lines
2.1 KiB
Java
package dsp.fsk;
|
|
|
|
public enum Dibit
|
|
{
|
|
D01_PLUS_3( false, true, 1, 4 ),
|
|
D00_PLUS_1( false, false, 0, 0 ),
|
|
D10_MINUS_1( true, false, 2, 8 ),
|
|
D11_MINUS_3( true, true, 3, 12 );
|
|
|
|
private boolean mBit1;
|
|
private boolean mBit2;
|
|
private int mLowValue;
|
|
private int mHighValue;
|
|
|
|
private Dibit( boolean bit1, boolean bit2, int lowValue, int highValue )
|
|
{
|
|
mBit1 = bit1;
|
|
mBit2 = bit2;
|
|
mLowValue = lowValue;
|
|
mHighValue = highValue;
|
|
}
|
|
|
|
/**
|
|
* Allowable transition state 1 for trellis coded modulation. Indicates
|
|
* the dibit that differs from this dibit in the LSB bit position.
|
|
*/
|
|
public Dibit getAllowableTransition1()
|
|
{
|
|
switch( this )
|
|
{
|
|
case D00_PLUS_1:
|
|
return D01_PLUS_3;
|
|
case D01_PLUS_3:
|
|
return D00_PLUS_1;
|
|
case D10_MINUS_1:
|
|
return D11_MINUS_3;
|
|
case D11_MINUS_3:
|
|
return D10_MINUS_1;
|
|
default:
|
|
/* We'll never get here */
|
|
return D00_PLUS_1;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Allowable transition state 2 for trellis coded modulation. Indicates
|
|
* the dibit that differs from this dibit in the MSB bit position.
|
|
*/
|
|
public Dibit getAllowableTransition2()
|
|
{
|
|
switch( this )
|
|
{
|
|
case D00_PLUS_1:
|
|
return D10_MINUS_1;
|
|
case D01_PLUS_3:
|
|
return D11_MINUS_3;
|
|
case D10_MINUS_1:
|
|
return D00_PLUS_1;
|
|
case D11_MINUS_3:
|
|
return D01_PLUS_3;
|
|
default:
|
|
/* We'll never get here */
|
|
return D00_PLUS_1;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Indicates if the trellis coded modulation dibit is allowed to transition
|
|
* to the dibit argument.
|
|
*/
|
|
public boolean isAllowableTransition( Dibit dibit )
|
|
{
|
|
return dibit == getAllowableTransition1() ||
|
|
dibit == getAllowableTransition2();
|
|
}
|
|
|
|
public boolean getBit1()
|
|
{
|
|
return mBit1;
|
|
}
|
|
|
|
public boolean getBit2()
|
|
{
|
|
return mBit2;
|
|
}
|
|
|
|
public int getLowValue()
|
|
{
|
|
return mLowValue;
|
|
}
|
|
|
|
public int getHighValue()
|
|
{
|
|
return mHighValue;
|
|
}
|
|
|
|
public static Dibit inverted( Dibit symbol )
|
|
{
|
|
switch( symbol )
|
|
{
|
|
case D10_MINUS_1:
|
|
return D11_MINUS_3;
|
|
case D11_MINUS_3:
|
|
return D01_PLUS_3;
|
|
case D00_PLUS_1:
|
|
return D10_MINUS_1;
|
|
case D01_PLUS_3:
|
|
default:
|
|
return D00_PLUS_1;
|
|
}
|
|
}
|
|
}
|