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:
boolAccess:
Parameter:
FalseWritable:
TrueInitial:
FalseVolatile:
False
Default value:
false
freq_word_dev: peak deviation frequency. Peak frequency-deviation word; must be scaled for the configured.Type:
ulongAccess:
Parameter:
FalseWritable:
FalseInitial:
TrueVolatile:
False
Default value:
0x287daaa
Ports
Inputs:
input: Channel bit stream, one boolean (byte) per MSK symbol (bool_timed_sample).Protocol:
bool_timed_sample-protOptional:
False
Outputs:
output: Complex baseband MSK IQ (complex_short_timed_sample).Protocol:
complex_short_timed_sample-protOptional:
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_devmust match the deployed samples-per-symbol; a mismatched value detunes the deviation and degrades the demodulated signal.
Testing
Tested platforms: None