Main Content

sdaOCTModulator

R2026b

Generate modulated SDA OCT waveform

Description

The sdaOCTModulator System object™ generates a modulated Space Development Agency (SDA) Optical Communications Terminal (OCT) waveform, by implementing physical layer modulation, as defined in the SDA OCT standard version 4.0.0 [1].

To modulate a SDA OCT waveform:

  1. Create the sdaOCTModulator object and set its properties.

  2. Call the object with arguments, as if it were a function.

To learn more about how System objects work, see What Are System Objects?

Creation

Description

sdaOCTModObj = sdaOCTModulator creates a default SDA OCT modulator System object.

example

sdaOCTModObj = sdaOCTModulator(PropertyName=Value) sets writable properties using one or more name-value arguments. For example, sdaOCTModulator(ModulationFormat="Manchester-BM12") sets the modulation format to Manchester encoding with a burst modulation duty cycle of 1/12.

Properties

expand all

Unless otherwise indicated, properties are nontunable, which means you cannot change their values after calling the object. Objects lock when you call them, and the release function unlocks them.

If a property is tunable, you can change its value at any time.

For more information on changing property values, see System Design in MATLAB Using System Objects.

Physical layer modulation format, specified as one of these options.

  • "OOK-NRZ" — Use this option to set the modulation format to on-off keying with non-return-to-zero (OOK-NRZ).

  • "Manchester" — Use this option to set the modulation format to standard Manchester encoding.

  • "Manchester-BM12" — Use this option to set the modulation format to Manchester encoding with a burst modulation duty cycle of 1/12.

  • "Manchester-BM16" — Use this option to set the modulation format to Manchester encoding with a burst modulation duty cycle of 1/16.

Data Types: char | string

Modulation index, specified as real scalar from the set {0, 0.1, 0.2, 0.33} or in the range [0.8, 1].

The property represents the amplitude modulation depth applied to the waveform and enables you to control the amplitude modulation tracking tone. A value of 0 indicates amplitude tone modulation is off.

Dependencies

To enable this property, you must set the ModulationFormat property to "OOK-NRZ" or "Manchester".

Data Types: double

Optical signaling rate, in hertz, specified as 2500e6, 1250e6, 625e6, or 312.5e6.

Dependencies

To enable this property, you must set the ModulationFormat property to "OOK-NRZ" or "Manchester".

Data Types: double | uint32

Optical signaling rate in hertz, specified as 40e3 or 50e3.

Dependencies

To enable this property, you must satisfy either of these conditions.

  • Set the ModulationFormat property to "OOK-NRZ" or "Manchester", and set the ModulationIndex property to a value greater than zero.

  • Set the ModulationFormat property to "Manchester-BM12" or "Manchester-BM16".

Data Types: double | uint16

Peak power for the SDA OCT waveform, specified as a positive scalar.

Data Types: double

Usage

Description

modOut = sdaOCTModObj(modIn) modulates the input data, and returns a modulated SDA OCT waveform.

Input Arguments

expand all

Input data to modulate, specified as a binary-valued column vector.

Data Types: double | int8 | logical

Output Arguments

expand all

Modulated SDA OCT waveform, returned as a column vector.

Data Types: double

Object Functions

To use an object function, specify the System object as the first input argument. For example, to release system resources of a System object named obj, use this syntax:

release(obj)

expand all

stepRun System object algorithm
releaseRelease resources and allow changes to System object property values and input characteristics
cloneCreate duplicate System object
isLockedDetermine if System object is in use
resetReset internal states of System object

Examples

collapse all

Create random bits to modulate.

% Input length must be a multiple of 128 for Manchester burst modulation
numBits = 12800;
txBits = randi([0 1],numBits,1);

Create an SDA OCT modulator object, and set the modulation format and peak power.

modObj = sdaOCTModulator;
modObj.ModulationFormat = "Manchester-BM16";
modObj.PeakPower = 12;

Modulate the bits to generate an SDA OCT modulated waveform.

modOut = modObj(txBits);

Plot the waveform using different time scales to show its structure at both microsecond and nanosecond scales.

samplesPerSlot = 10;
samples = repelem(modOut,samplesPerSlot);
% Create time vector for plotting
tsamp = 1/(samplesPerSlot*modObj.SignalingRate);
t = 0:tsamp:tsamp*(length(samples)-1);

% Plot waveform at different time scales
tl = tiledlayout(3,1);

% Plot 1: Show a longer segment to visualize overall burst structure.
ax(1) = nexttile;
samplesToPlot = floor(length(samples)/10);
plot(t(1:samplesToPlot)*1e6,samples(1:samplesToPlot))

% Plot 2: Zoom in further to examine finer transitions within the burst region.
ax(2) = nexttile;
samplesToPlot = floor(length(samples)/30);
plot(t(1:samplesToPlot)*1e6,samples(1:samplesToPlot))

% Plot 3: Zoom in to the nanosecond scale to observe sample-level waveform detail.
ax(3) = nexttile;
samplesToPlot = floor(length(samples)/4e3);
plot(t(1:samplesToPlot)*1e9,samples(1:samplesToPlot))

xlabel(ax(1:2),"Time (\musec)")
xlabel(ax(3),"Time (nsec)")
ylabel(ax,"Amplitude",FontSize=8)
title(tl,"Plot for SDA OCT Modulated Waveform Using " + modObj.ModulationFormat)

Figure contains 3 axes objects. Axes object 1 with xlabel Time (\musec), ylabel Amplitude contains an object of type line. Axes object 2 with xlabel Time (\musec), ylabel Amplitude contains an object of type line. Axes object 3 with xlabel Time (nsec), ylabel Amplitude contains an object of type line.

Create random bits to modulate.

numBits = 1e6;
txBits = randi([0 1],numBits,1);

Create an SDA OCT modulator object, and set the modulation format. Set the modulation index to a nonzero value to enable the amplitude tracking tone.

modObj = sdaOCTModulator( ...
    ModulationFormat="OOK-NRZ", ...
    ModulationIndex=0.8, ...        % Nonzero value enables amplitude tracking tone
    AMFrequency=50e3);              % Tracking tone frequency (Hz)

Modulate the binary input data to return the time-domain SDA OCT waveform.

modOut = modObj(txBits);

Plot the waveform using different time scales to show its structure at both microsecond and nanosecond scales.

samplesPerSlot = 5;
samples = repelem(modOut,samplesPerSlot);
% Create time vector for plotting
tsamp = 1/(samplesPerSlot*modObj.SignalingRate);
t = 0:tsamp:tsamp*(length(samples)-1);

% Plot waveform at different time scales
% Use a tiled layout to compare waveform structure at multiple zoom levels.
tl = tiledlayout(3,1);

% Plot 1: Show the full waveform to view overall behavior.
ax(1) = nexttile;
samplesToPlot = floor(length(samples));                % Plot all samples
plot(t(1:samplesToPlot)*1e6,samples(1:samplesToPlot))  % Time in microseconds

% Plot 2: Zoom in to observe transitions and tone-related variation more clearly.
ax(2) = nexttile;
samplesToPlot = floor(length(samples)/30);             % Plot shorter segment
plot(t(1:samplesToPlot)*1e6,samples(1:samplesToPlot))  % Time in microseconds

% Plot 3: Zoom in further to see fine-scale sample-level detail.
ax(3) = nexttile;
samplesToPlot = floor(length(samples)/4e3);            % Plot very short segment
plot(t(1:samplesToPlot)*1e9,samples(1:samplesToPlot))  % Time in nanoseconds


xlabel(ax(1:2),"Time (\musec)")
xlabel(ax(3),"Time (nsec)")
ylabel(ax,"Amplitude", FontSize= 8)
title(tl,"Plot for SDA OCT Modulated Waveform Using " + modObj.ModulationFormat)

Figure contains 3 axes objects. Axes object 1 with xlabel Time (\musec), ylabel Amplitude contains an object of type line. Axes object 2 with xlabel Time (\musec), ylabel Amplitude contains an object of type line. Axes object 3 with xlabel Time (nsec), ylabel Amplitude contains an object of type line.

References

[1] Space Development Agency (SDA). Optical Communications Terminal (OCT) Standard Version 4.0.0. Washington DC: SDA United States Space Force, June 28, 2024.

Extended Capabilities

expand all

C/C++ Code Generation
Generate C and C++ code using MATLAB® Coder™.

Version History

Introduced in R2006b