MSK Modulator (msk_mod)

Modulates an Opulent Voice channel bit stream to complex baseband MSK (minimum-shift keying) IQ.

Function

msk_mod consumes a stream of boolean samples — one byte per channel bit (0x00/0x01), i.e. the frame_bits stream of sync word followed by the randomized, convolutionally-encoded, interleaved frame bits — and produces a continuous-phase, constant-envelope MSK signal as complex_short IQ.

Each input boolean is one MSK symbol. The HDL implementation uses a single NCO (phase accumulator) whose frequency word changes sign at symbol boundaries, with optional half-sine pulse shaping of the frequency deviation to produce true MSK. The peak deviation is set by freq_word_dev (scaled for the configured samples per symbol; see the worker documentation). Because MSK is constant-envelope, the output amplitude is fixed by the sinusoid look-up table; the HDL worker left-justifies that value into the 16-bit sample so a 12-bit DAC taking the top 12 bits is driven at full scale.

Interface

<!-- This is the spec file (OCS) for: msk_mod
     Add component spec attributes, like "protocol".
     Add property elements for spec properties.
     Add port elements for i/o ports -->
<ComponentSpec>
	<!-- Add property and port elements here -->
	<property name='init' type='bool' writable='true' default='false'/>
	<property name='freq_word_dev' type='ulong' initial='true' default='0x287daaa' description="peak deviation frequency"/>
	<port name="input" producer="false" protocol="bool_timed_sample-prot"/>
	<port name="output" producer="true" protocol="complex_short_timed_sample-prot"/>
</ComponentSpec>

Properties

  • init: Pulse high to reset the modulator phase/state.

    • Type: bool

    • Access:

      • Parameter: False

      • Writable: True

      • Initial: False

      • Volatile: False

    • Default value: false

  • freq_word_dev: peak deviation frequency. Peak frequency-deviation word; must be scaled for the configured.

    • Type: ulong

    • Access:

      • Parameter: False

      • Writable: False

      • Initial: True

      • Volatile: False

    • Default value: 0x287daaa

Ports

Inputs:

  • input: Channel bit stream, one boolean (byte) per MSK symbol (bool_timed_sample).

    • Protocol: bool_timed_sample-prot

    • Optional: False

Outputs:

  • output: Complex baseband MSK IQ (complex_short_timed_sample).

    • Protocol: complex_short_timed_sample-prot

    • Optional: False

Implementations

  • msk_mod (HDL)

    Skeleton outline: Optional summary of the implementation of this worker. Anything before the next heading will be included as worker summary on component documentation page.

  • msk_mod (RCC)

    Skeleton outline: Optional summary of the implementation of this worker. Anything before the next heading will be included as worker summary on component documentation page.

Dependencies

The dependencies to other elements in OpenCPI are:

  • ieee.std_logic_1164

  • ieee.numeric_std

Limitations

Limitations of msk_mod are:

  • freq_word_dev must match the deployed samples-per-symbol; a mismatched value detunes the deviation and degrades the demodulated signal.

Testing

Tested platforms: None