This example shows how to process complex data in a Stateflow® chart. The model uses vectors of complex data to find a fixed pattern in a signal from a communication system.
In communication systems, frame synchronization is a method of finding valid data in a transmission that consists of data frames. To aid frame synchronization, the transmitter inserts a fixed data pattern at the start of each data frame to mark the start of valid data. The receiver searches for the fixed pattern and achieves frame synchronization when the correlation between the input data and the fixed pattern is high.
In this example, the Stateflow chart Frame Sync Controller accepts a complex input signal
IQ and searches for the fixed data pattern
trainSig. After recognizing the start of a data frame, the chart stores the valid data in a complex output signal
frame. This output signal is a vector of complex products between each valid data point and the phase angle of the carrier wave. The chart then passes the valid data to the Frame Processor subsystem.
Note that this model does not contain the rest of the communication system.
In the Frame Sync Controller chart, the
look_for_sync state starts the frame synchronization algorithm. At each time step, the MATLAB® function
correlate calculates the correlation between the input signal
IQ and the fixed data pattern
trainSig. The function stores the complex correlation as
corr and its absolute value as
corrAbs. The value of
corrAbs is the correlation percentage, which can range from 0 to 100 percent. At 0 percent, there is no correlation. At 100 percent, there is perfect correlation.
corrAbs exceeds 50 percent, the correlation is high and the chart registers the start of a data frame. The chart takes the transition to the
get_payload state and stores 220 valid data points in the complex vector
corrAbs stays below 50 percent for 300 consecutive data points, the frame synchronization algorithm resets. The chart takes the transition to the
frame_out state and triggers the Frame Processor subsystem. The chart then returns to the
When the Frame Sync Controller chart recognizes the start of a data frame, the
get_payload state calls the MATLAB function
get_carrier_phase to compute the phase angle of the carrier wave. The state stores this phase angle as the local data object
phasor. Then the state collects the scalar values of the product of
IQ*phasor in the vector
frame. To avoid using an extra variable as an index counter, this state indexes into this vector by using the
When the state becomes active, the
entry action stores the initial value of the product in the first element of
In later time steps, the
during action stores the next values of this product in successive elements of
frame. The indexing expression
count(true) returns the number of time steps since the state became active.
After 220 times steps, the transition condition
true and the chart exits from the state. When the chart enters the
frame_out state, the vector
frame contains the values of 220 products. The chart passes this data to the Frame Processor subsystem and then returns to the