comm.CPMDemodulator
Demodulate signal using CPM method and Viterbi algorithm
Description
Thecomm.CPMDemodulator
System object™ demodulates an input signal that was modulated using the continuous phase modulation (CPM) method. The input is a baseband representation of the modulated signal. For more information about the demodulation and filtering applied, seeCPM Demodulation MethodandPulse Shape Filtering.
To demodulate a signal that was modulated using the CPM method:
Create the
comm.CPMDemodulator
object and set its properties.Call the object with arguments, as if it were a function.
To learn more about how System objects work, seeWhat Are System Objects?
Creation
Syntax
Description
cpmdemod = comm.CPMDemodulator
creates a demodulator System object to demodulate input CPM signals using the Viterbi algorithm.
cpmdemod = comm.CPMDemodulator(
sets properties using one or more name-value arguments. For example,Name
,Value
)'SymbolMapping','Gray'
specifies gray-ordered symbol mapping for the modulated symbols.
cpmdemod = comm.CPMDemodulator(
sets theM
,Name
,Value
)ModulationOrder
property toM
and optional name-value arguments.
Properties
Unless otherwise indicated, properties arenontunable, which means you cannot change their values after calling the object. Objects lock when you call them, and therelease
function unlocks them.
If a property istunable, you can change its value at any time.
For more information on changing property values, seeSystem Design in MATLAB Using System Objects.
ModulationOrder
—Modulation order
4(default) |power of two scalar
Modulation order, specified as a power-of-two scalar. The modulation order,M= 2kspecifies the number of points in the signal constellation, wherekis a positive integer indicating the number of bits per symbol.
Data Types:double
BitOutput
—Option to output data as bits
0
orfalse
(default) |1
ortrue
Option to output data as bits, specified as a logical0
(false
) or1
(true
).
Set this property to
false
to output data as integers.Set this property to
true
to output data as bits.
For more information, seeInteger-Valued and Binary-Valued Output Signals.
Data Types:logical
SymbolMapping
—Symbol encoding
'Binary'
(default) |'Gray'
Symbol encoding mapping of constellation bits, specified as'Binary'
or'Gray'
.
Set this property to
'Binary'
地图符号使用自然二进制编码排序.Set this property to
'Gray'
to map symbols using Gray-coded ordering.
For more information, seeInteger-Valued and Binary-Valued Output Signals.
Dependencies
To enable this property, set theBitOutput
property totrue
.
ModulationIndex
—Modulation index
0.5
(default) |nonnegative scalar|column vector
Modulation index, specified as a nonnegative scalar or column vector. For more information, seeCPM Demodulation Method.
Data Types:double
FrequencyPulse
—Type of frequency pulse shaping
'Rectangular'
(default) |'Raised Cosine'
|'Spectral Raised Cosine'
|'Gaussian'
|'Tamed FM'
Type of frequency pulse shaping used by the modulator to smooth the phase transitions of the modulated signal, specified as'Rectangular'
,'Raised Cosine'
,'Spectral Raised Cosine'
,'Gaussian'
, or'Tamed FM'
. For more information, seePulse Shape Filtering.
MainLobeDuration
—Main lobe duration
1
(default) |positive integer
Main lobe duration of the largest lobe in the spectral raised cosine pulse, specified as a positive integer representing the number of symbol intervals used by the demodulator to pulse-shape the modulated signal.
Dependencies
To enable this property, set theFrequencyPulse
property to'Spectral Raised Cosine'
.
Data Types:double
RolloffFactor
—Roll-off factor
0.2
(default) |scalar in the range [0, 1]
Roll-off factor of the spectral raised cosine pulse, specified as a scalar in the range [0, 1].
Dependencies
To enable this property, set theFrequencyPulse
property to'Spectral Raised Cosine'
.
Data Types:double
BandwidthTimeProduct
—Product of bandwidth and symbol time of Gaussian pulse shape
0.3
(default) |positive scalar
Product of the bandwidth and symbol time of the Gaussian pulse shape, specified as a positive scalar. UseBandwidthTimeProduct
to reduce the bandwidth, at the expense of increased intersymbol interference.
Dependencies
To enable this property, set theFrequencyPulse
property to'Gaussian'
.
Data Types:double
PulseLength
—Length of frequency pulse shape
1
(default) |positive integer
Length of the frequency pulse shape in symbol intervals, specified as a positive integer. For more information on the frequency pulse length, refer toLT在Pulse Shape Filtering.
Data Types:double
SymbolPrehistory
—Symbol prehistory
1
(default) |scalar|vector
Symbol prehistory, specified as scalar or vector with odd integer elements in the range [– (ModulationOrder
– 1), (ModulationOrder
– 1)]. This property defines the data symbols used by the modulator prior to the first call of the object in reverse chronological order. When you specify this property as a vector, the length must be (PulseLength
– 1).
Data Types:double
InitialPhaseOffset
—Initial phase offset
0
(default) |scalar
Initial phase offset in radians of the modulated waveform, specified as a scalar.
Data Types:double
SamplesPerSymbol
—Number of samples per input symbol
8
(default) |positive integer
Number of samples per input symbol, specified as a positive integer. This property represents the number of samples input for each integer or binary word output. For all nonbinary schemes, as defined by the pulse shapes, this value must be greater than 1.
Data Types:double
TracebackDepth
—Traceback depth for Viterbi algorithm
16
(default) |positive integer
Traceback depth for the Viterbi algorithm, specified as a positive integer representing the number of trellis branches that the Viterbi algorithm uses to construct each traceback path. The value of this property is also the output delay and the number of zero symbols that precede the first meaningful demodulated symbol in the output. For more information, seeTraceback Depth and Output Delays.
Data Types:double
OutputDataType
—Data type of output
'double'
(default) |'logical'
|'int8'
|'int16'
|'int32'
Data type of the output, specified as one of these values.
When you set the
BitOutput
property tofalse
, you can set the output data type to'double'
,'int8'
,'int16'
, or'int32'
.When you set the
BitOutput
property totrue
, you can set the output data type to'logical'
or'double'
.
Usage
Syntax
Description
Input Arguments
x
—CPM-modulated signal
column vector
CPM-modulated signal, specified as a column vector with a length equal to an integer multiple of theSamplesPerSymbol
property.
Data Types:double
|single
Output Arguments
y
— Output signal
column vector | matrix
Output signal, returned as a column vector or matrix. To specify whether the object outputs values as integers or bits, use theBitOutput
property. To specify the output data type, use theOutputDataType
property.
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 namedobj
, use this syntax:
release(obj)
Examples
CPM Modulate and Demodulate Signal with Gray Mapping and Bit Inputs
Create CPM modulator, and CPM demodulator System objects.
cpmmodulator = comm.CPMModulator(8,...'BitInput',true,...'SymbolMapping','Gray');cpmdemodulator = comm.CPMDemodulator (8,...'BitOutput',true,...'SymbolMapping','Gray');
Create an error rate calculator System object™, that accounts for the delay caused by the Viterbi algorithm.
delay = log2(cpmdemodulator.ModulationOrder)...* cpmdemodulator.TracebackDepth; errorRate = comm.ErrorRate('ReceiveDelay',delay);
Transmit 100 3-bit words and print the error rate results.
forcounter = 1:100 data = randi([0 1],300,1); modSignal = cpmmodulator(data); noisySignal = awgn(modSignal,0); receivedData = cpmdemodulator(noisySignal); errorStats = errorRate(data,receivedData);endfprintf('Error rate = %f\nNumber of errors = %d\n',...errorStats(1),errorStats(2))
Error rate = 0.004006 Number of errors = 120
Apply GFSK Modulation and Demodulation
Using thecomm.CPMModulator
andcomm.CPMDemodulator
System objects, apply Gaussian frequency-shift keying (GFSK) modulation and demodulation to random bit data.
Create a GFSK modulator and demodulator pair.
gfskMod = comm.CPMModulator(...'ModulationOrder',2,...'FrequencyPulse','Gaussian',...'BandwidthTimeProduct',0.5,...'ModulationIndex',1,...'BitInput',true); gfskDemod = comm.CPMDemodulator(...'ModulationOrder',2,...'FrequencyPulse','Gaussian',...'BandwidthTimeProduct',0.5,...'ModulationIndex',1,...'BitOutput',true);
Generate random bit data and apply GFSK modulation. Use a scatter plot to view the constellation.
numSym = 100; x = randi([0 1],numSym*gfskMod.SamplesPerSymbol,1); y = gfskMod(x); eyediagram(y,16)
Demodulate the GFSK-modulated data. To verify that the demodulated signal data is equal to the original data, account for the delay introduced by the Gaussian filtering in the GFSK modulation and demodulation processes.
z = gfskDemod(y); delay = finddelay(x,z); isequal(x(1:end-delay),z(delay+1:end))
ans =logical1
More About
CPM Demodulation Method
The CPM demodulation method process consists of a correlator followed by a maximum-likelihood sequence detector (MLSD) that searches the paths through the state trellis for the minimum Euclidean distance path. When the modulation index is rational (h=m/p), a finite number of phase states exist in the symbol. The implementation uses the Viterbi algorithm to perform MLSD.
{hi} is a sequence of modulation indices that moves cyclically through a set of indices {h0,h1,h2、……hH-1}.
hi=mi/piis the modulation index in proper rational form.
miis the numerator of the modulation index.
pi的分母是the modulation index.
miandpiare relatively prime positive numbers.
The least common multiple (LCM) of{p0,p1,p2、……pH-1}is denoted asp.
hi=m'i/p.
{hi} determines the number of phase states,
and affects the number of trellis states,
numStates=numPhaseStates×M(L-1),
Lis the pulse length.
Mis the modulation order.
CPM Method
The input to the demodulator is a baseband representation of the modulated signal:
{αi} is a sequence ofM-ary data symbols selected from the alphabet ±1, ±3, ±(M–1).
Mmust have the form 2kfor some positive integerk, whereMis the modulation order and specifies the size of the symbol alphabet.
{hi} is a sequence of modulation indices, andhimoves cyclically through a set of indices {h0,hi,h2, ...,hH-1}. WhenH=1, only one modulation index exists,h0, which is denoted ash.
Pulse Shape Filtering
The CPM method uses pulse shaping to smooth the phase transitions of the modulated signal. The functionq(t) is the phase response obtained from the frequency pulse,g(t), through this relation: .
The specified frequency pulse shape corresponds to these pulse shape expressions forg(t).
Pulse Shape | Expression |
---|---|
Rectangular | |
Raised Cosine | |
Spectral Raised Cosine | |
Gaussian | |
Tamed FM (tamed frequency modulation) |
Lmainis the main lobe pulse duration in symbol intervals.
βis the roll-off factor of the spectral raised cosine.
Bbis the product of the bandwidth and the Gaussian pulse.
The duration of the pulse,LT, is the pulse length in symbol intervals. As defined by the expressions, the spectral raised cosine, Gaussian, and tamed FM pulse shapes have infinite length. For all practical purposes,LTspecifies the truncated finite length.
For more information on pulse shape filtering, see[1].
Integer-Valued and Binary-Valued Output Signals
When you set theBitOutput
property tofalse
:
The object outputs an integer column vector of length equal toN/
SamplesPerSymbol
, whereNis the length of the input signal and indicates the number of input baseband modulated symbols. The output values are odd integers in the range [–(ModulationOrder
–1), (ModulationOrder
–1)].You cannot set the
OutputDataType
property to'logical'
.
When you set theBitOutput
property totrue
:
The object outputs a binary column vector of length equal tok×(N/
SamplesPerSymbol
), wherek= log2(ModulationOrder
)andNis the number of input baseband modulated symbols (specifically, the length of the input signal).The
SymbolMapping
property determines how the object maps integers in the range [0,ModulationOrder
– 1] tok-length bit word. The binary word mapping options are natural binary-coded ordering or Gray-coded ordering.You can set the
OutputDataType
property to only'double'
or'logical'
.The object follows this process.
Map each demodulated symbol to an odd integerL在the range [–(
ModulationOrder
–1), (ModulationOrder
–1)].MapLto the nonnegative integer (L+
ModulationOrder
–1)/2.Map each nonnegative integer to ak-length binary word. The binary word mapping options are natural binary-coded ordering or Gray-coded ordering, as specified by the
SymbolMapping
property.
Traceback Depth and Output Delays
The traceback depth is the number of trellis branches used to construct each traceback path. Traceback depth influences the output delay, which is the number of zero symbols that precede the first meaningful demodulated value in the output.
The optimal traceback depth setting depends on minimum squared Euclidean distance calculations. Alternatively, you can choose a typical value, dependent on the number of states, using thefive-times-the-constraint-lengthrule, which corresponds to5log2(numStates).
For a binary raised cosine pulse shape with a pulse length of 3 andh=2/3, applying this rule(5log2(3×22) = 18gives a result that is close to the optimum value of 20.
参考文献
[1]Anderson, John B., Tor Aulin, and Carl-Erik Sundberg.Digital Phase Modulation. New York: Plenum Press, 1986.
Extended Capabilities
C/C++ Code Generation
Generate C and C++ code using MATLAB® Coder™.
Usage notes and limitations:
SeeSystem Objects in MATLAB Code Generation(MATLAB Coder).
Version History
See Also
Objects
Blocks
Open Example
You have a modified version of this example. Do you want to open this example with your edits?
MATLAB Command
You clicked a link that corresponds to this MATLAB command:
Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select:.
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina(Español)
- Canada(English)
- United States(English)
Europe
- Belgium(English)
- Denmark(English)
- Deutschland(Deutsch)
- España(Español)
- Finland(English)
- France(Français)
- Ireland(English)
- Italia(Italiano)
- Luxembourg(English)
- Netherlands(English)
- Norway(English)
- Österreich(Deutsch)
- Portugal(English)
- Sweden(English)
- Switzerland
- United Kingdom(English)