comm.GeneralQAMDemodulator
Demodulate using arbitrary QAM constellation
Description
The comm.GeneralQAMDemodulator
System object™ demodulates a signal modulated using the general quadrature amplitude
modulation (QAM) technique.
To demodulate a general quadrature amplitude modulated signal:
Create the
comm.GeneralQAMDemodulator
object and set its properties.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
Syntax
Description
creates a general QAM demodulator System object, gqamdemod
= comm.GeneralQAMDemodulatorgqamdemod
.
This object demodulates the input signal using the general quadrature amplitude
modulation (QAM) method.
sets the gqamdemod
= comm.GeneralQAMDemodulator(const)Constellation
property to
const
.
sets properties using one or more optional name-value arguments in addition to
any of the input argument combinations in the previous syntaxes. For example,
gqamdemod
= comm.GeneralQAMDemodulator(___,Name=Value
)OutputDataType="double"
sets the data type of the
output to "double"
.
Properties
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.
Constellation
— Signal constellation
exp(2×π×j×[0:7]/8) (default) | vector
Signal constellation, specified as a vector that lists the points in the signal constellation. The length of the constellation vector determines the modulation order.
Data Types: double
Complex Number Support: Yes
BitOutput
— Output data format
false
or 0
(default) | true
or 1
Output data format, specified as a logical 0
(false
) or 1
(true
).
When you set this property to
true
or1
, the demodulator outputs a column vector of bit values. The vector length islog2
(M) multiplied by the number of demodulated symbols, where M is the modulation order as defined by the constellation size.When you set this property to
false
or0
, the demodulator outputs a column vector of integer symbol values ranging from0
to M–1. The vector length is equal to the length of the input data vector. M must be a power of two.
Data Types: logical
DecisionMethod
— Decision method for demodulation
"Hard decision"
(default) | "Log-likelihood ratio"
| "Approximate log-likelihood ratio"
Decision method for the demodulation, specified as "Hard
decision"
, "Log-likelihood ratio"
, or
"Approximate log-likelihood ratio"
.
Dependencies
To enable this property, set the BitOutput
property to true
. When you set the BitOutput
property to false
, the object always performs hard
decision demodulation.
VarianceSource
— Source of noise variance
"Property"
(default) | "Input port"
Source of the noise variance, specified as "Property"
or "Input port"
.
Dependencies
To enable this property, set the DecisionMethod
property to "Log-likelihood
ratio"
or "Approximate log-likelihood
ratio"
.
Variance
— Noise variance
1
(default) | positive scalar
Noise variance, specified as a positive scalar.
Dependencies
To enable this property, set the VarianceSource
property to
"Property"
.
Tips
The exact LLR algorithm computes exponentials using finite precision arithmetic. For computations involving very large positive or negative magnitudes, the exact LLR algorithm yields:
Inf
or-Inf
if the noise variance is a very large valueNaN
if the noise variance and signal power are both very small values
The approximate LLR algorithm does not compute exponentials. You can avoid
Inf
, -Inf
, and NaN
results by using
the approximate LLR algorithm.
Data Types: double
OutputDataType
— Data type of output
"Full precision"
(default) | "Smallest unsigned integer"
| "double"
| "single"
| "int8"
| "uint8"
| "int16"
| "uint16"
| "int32"
| "uint32"
Data type of the output, specified as "Full precision"
,
"Smallest unsigned integer"
,
"double"
, "single"
,
"int8"
, "uint8"
,
"int16"
, "uint16"
,
"int32"
, or "uint32"
.
When you set the
OutputDataType
property to"Full precision"
, the output data type matches the input data type if the input data type is either single or double-precision.When the data type of input signal is an integer data type, you must have a Fixed-Point Designer™ user license to use this property in the
"Smallest unsigned integer"
or"Full precision"
mode.When the input data type is of a fixed-point type, the output data type works as if you had set the
OutputDataType
property to"Smallest unsigned integer"
.When you set the
BitOutput
property totrue
and theDecisionMethod
property to"Hard Decision"
, thelogical
data type becomes a valid option.When you set the
BitOutput
property totrue
and theDecisionMethod
property to"Approximate log-likelihood ratio"
, you can set this property to"Full precision"
only.If you set the
BitOutput
property totrue
and theDecisionMethod
property to"Log-likelihood ratio"
, the output data type matches the input data type for single or double precision values.
Dependencies
To enable this property, use one of these options:
Set the
BitOutput
property tofalse
.Set the
BitOutput
property totrue
and theDecisionMethod
property to"Hard decision"
or"Approximate log-likelihood ratio"
.
Fixed-Point Properties
FullPrecisionOverride
— Full-precision override for fixed-point arithmetic
false
or
0
(default) | true
or 1
Full-precision override for the fixed-point arithmetic, specified as a
logical 0
(false
) or
1
(true
).
When you set the
FullPrecisionOverride
property totrue
or1
, the object computes all internal arithmetic and output data types using full-precision rules. These rules provide the most accurate fixed-point numerics. The object turns off the display of other fixed-point properties because they do not apply individually. These rules guarantee that no quantization occurs within the object. You can add bits, as needed, to ensure that no round-off or overflow occurs.When you set the
FullPrecisionOverride
property tofalse
or0
, the object controls fixed-point data types through individual fixed-point property settings.
For more information, see Full Precision for Fixed-Point System Objects.
RoundingMethod
— Method for rounding of fixed-point numeric values
"Floor"
(default) | "Ceiling"
| "Convergent"
| "Nearest"
| "Round"
| "Simplest"
| "Zero"
Method for rounding of fixed-point numeric values, specified as
"Ceiling"
, "Convergent"
,
"Floor"
, "Nearest"
,
"Round"
, "Simplest"
, or
"Zero"
.
Dependencies
This property applies when the object is not in a full-precision
configuration. This property does not apply when you set
BitOutput
to true
and
DecisionMethod
to "Log-likelihood
ratio"
.
OverflowAction
— Action when fixed-point numeric values overflow
"Wrap"
(default) | "Saturate"
Action when fixed-point numeric values overflow, specified as
"Wrap"
or "Saturate"
. This
property specifies the action to be taken in the case of an overflow.
Overflow occurs when the magnitude of a fixed-point calculation result
does not fit into the range of the data type and scaling that stores the
result.
Dependencies
This property applies when the object is not in a full-precision
configuration. This property does not apply when you set
BitOutput
to true
and
DecisionMethod
to "Log-likelihood
ratio"
.
ConstellationDataType
— Data type of signal constellation
"Same word length as input"
(default) | "Custom"
Data type of the signal constellation, specified as "Same
word length as input"
or
"Custom"
.
Dependencies
This property does not apply when you set BitOutput
to true
and DecisionMethod
to "Log-likelihood
ratio"
.
CustomConstellationDataType
— Unscaled fixed-point data type of custom signal constellation
numerictype([],16)
(default) | numerictype
object with signedness of
Auto
Fixed-point data type of the custom signal constellation, specified as
an unscaled numerictype
(Fixed-Point Designer) object
with a signedness of Auto
.
Dependencies
To enable this property, set the ConstellationDataType
property to
"Custom"
.
Accumulator1DataType
— Data type of accumulator 1
"Full precision"
(default) | "Custom"
Data type of the accumulator 1, specified as "Full
precision"
or "Custom"
.
Dependencies
To enable this property, set the
FullPrecisionOverride
property to
false
. However, it is not applicable when
you set the BitOutput
property to true
and DecisionMethod
to "Log-likelihood
ratio"
.
CustomAccumulator1DataType
— Custom fixed-point data type of accumulator 1
numerictype([],32,30)
(default) | scaled numerictype
object with a signedness of
Auto
Custom fixed-point data type of accumulator 1, specified as a scaled
numerictype
(Fixed-Point Designer) object
with a signedness of Auto
.
Dependencies
To enable this property, set the Accumulator1DataType
property to
"Custom"
.
ProductInputDataType
— Data type of product input
"Same as accumulator 1"
(default) | "Custom"
Data type of the product input, specified as "Same as
accumulator 1"
or "Custom"
.
Dependencies
To enable this property, set the
FullPrecisionOverride
property to
false
. However, it is not applicable when
you set the BitOutput
property to true
and DecisionMethod
to "Log-likelihood
ratio"
.
CustomProductInputDataType
— Custom fixed-point data type of product input
numerictype([],32,30)
(default) | numerictype
object with a signedness of
Auto
Custom fixed-point data type of the product input, specified as a
scaled numerictype
(Fixed-Point Designer) object
with a signedness of Auto
.
Dependencies
To enable this property, set the FullPrecisionOverride
property to false and the
ProductInputDataType
property to
"Custom"
.
ProductOutputDataType
— Data type of product output
"Full precision"
(default) | "Custom"
Data type of the product output, specified as "Full
precision"
or "Custom"
.
Dependencies
To enable this property, set the
FullPrecisionOverride
property to
false
. However, this property does not
apply when you set the BitOutput
property to true
and DecisionMethod
to "Log-likelihood
ratio"
.
CustomProductOutputDataType
— Custom fixed-point data type of product output
numerictype([],32,30)
(default) | numerictype
object with a signedness of
Auto
Custom fixed-point data type of the product output, specified as a
scaled numerictype
(Fixed-Point Designer) object
with a signedness of Auto
Dependencies
To enable this property, set the ProductOutputDataType
property to
"Custom"
.
Accumulator2DataType
— Data type of accumulator 2
"Full precision"
(default) | "Custom"
Data type of accumulator 2, specified as "Full
precision"
or "Custom"
.
Dependencies
To enable this property, set the
FullPrecisionOverride
property to
false
. However, this property does not
apply when you set the BitOutput
property to true
and DecisionMethod
to "Log-likelihood
ratio"
.
CustomAccumulator2DataType
— Custom fixed-point data type accumulator 2
numerictype([],32,30)
(default) | numerictype
object with a signedness of
Auto
Custom fixed-point data type accumulator 2, specified as a scaled
numerictype
(Fixed-Point Designer) object
with a Signedness of Auto.
Dependencies
To enable this property, set the Accumulator2DataType
property to
"Custom"
.
Accumulator3DataType
— Data type of accumulator 3
"Full precision"
(default) | "Custom"
Data type of accumulator 3, "Full precision"
or
"Custom"
.
Dependencies
To enable this property, set the BitOutput
property to true
and DecisionMethod
to "Approximate
log-likelihood ratio"
.
CustomAccumulator3DataType
— Custom fixed-point data type of accumulator 3
numerictype([],32,30)
(default) | numerictype
object with a signedness of
Auto
Custom fixed-point data type of accumulator 3, specified as a scaled
numerictype
(Fixed-Point Designer) object
with a signedness of Auto
.
Dependencies
To enable this property, set the Accumulator3DataType
property to
"Custom"
.
NoiseScalingInputDataType
— Data type of noise-scaling input
"Same as accumulator 3"
(default) | "Custom"
Data type of the noise-scaling input, specified as "Same as
accumulator 3"
or 'Custom"
.
Dependencies
To enable this property, set the BitOutput
property to true
and the DecisionMethod
property to "Approximate
log-likelihood ratio"
.
CustomNoiseScalingInputDataType
— Custom fixed-point data type of noise-scaling input
numerictype([],32,30)
(default) | numerictype
object with a signedness of
Auto
Custom fixed-point data type of the noise-scaling input, specified as
a scaled numerictype
(Fixed-Point Designer) object
with a signedness of Auto
.
Dependencies
To enable this property, set the NoiseScalingInputDataType
property to
"Custom"
.
InverseVarianceDataType
— Data type of inverse noise variance
"Same word length as input"
(default) | "Custom"
Data type of the inverse noise variance, specified as "Same
word length as input"
or
"Custom"
.
Dependencies
To enable this property, set the BitOutput
property to true
, the DecisionMethod
property to "Approximate
log-likelihood ratio"
, and the VarianceSource
property to
"Property"
.
CustomInverseVarianceDataType
— Custom fixed-point data type of inverse noise variance
numerictype([],16,8)
(default) | numerictype
object with a signedness of
Auto
Custom fixed-point data type of the inverse noise variance, specified
as a numerictype
(Fixed-Point Designer) object
with a Signedness of Auto.
Dependencies
To enable this property, set the InverseVarianceDataType
property to
"Custom"
.
CustomOutputDataType
— Fixed-point data type of output
numerictype([],32,30)
(default) | numerictype
object with a signedness of
Auto
Fixed-point data type of the output, specified as a scaled numerictype
(Fixed-Point Designer) object
with a signedness of Auto
.
Dependencies
To enable this property, set the FullPrecisionOverride
property to false and the
OutputDataType
property to
"Custom"
.
Usage
Description
additionally specifies the noise variance, Y
= gqamdemod(X
,vari)vari
, and
applies soft-decision demodulation to the input signal.
This syntax applies when you set the BitOutput
property
to true
, the DecisionMethod
property to
"Approximate log-likelihood ratio"
or
"Log-likelihood ratio"
, and the
VarianceSource
property to "Input
port"
.
Input Arguments
X
— General quadrature amplitude modulated signal
scalar | column vector
General quadrature amplitude modulated signal, specified as a scalar or column vector.
When you set the BitOutput
property to
true
and the DecisionMethod
property to "Log-likelihood ratio"
, the input data
type must be single or double precision. Depending on the
BitOutput
property value, the output Y can be
integer or bit valued.
Data Types: single
| double
| fi
Complex Number Support: Yes
vari
— Noise variance
positive scalar
Noise variance, specified as a positive scalar.
Data Types: single
| double
Output Arguments
Y
— Output signal
scalar | column vector
Output signal, returned as a scalar or column vector. To specify
whether the object output values are integers or bits, use the
BitOutput
property. Specify the output data
type using the OutputDataType
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 named obj
, use
this syntax:
release(obj)
Examples
Demodulate Noisy General Quadrature Amplitude Modulated Signal
Modulate and demodulate data using an arbitrary three-point constellation.
Define a three-point constellation for general quadrature amplitude modulation (QAM).
const = [1 1i -1];
Create general QAM modulator and demodulator System objects with the defined constellation.
gqamMod = comm.GeneralQAMModulator (const); gqamdemod = comm.GeneralQAMDemodulator (const);
Create an error rate calculator.
errorRate = comm.ErrorRate
errorRate = comm.ErrorRate with properties: ReceiveDelay: 0 ComputationDelay: 0 Samples: 'Entire frame' ResetInputPort: false
Run a loop to process frames of data by follwing these steps:
Generate a random sequence of symbols.
Modulate the random data to produce quadrature amplitude modulated symbols.
Transmit the modulated symbols through the additive white Gaussian noise (AWGN) channel.
Demodulate the received noisy symbols back to original data.
Compute error statistics between transmitted and received data.
for counter = 1:100 data = randi([0 2],50,1); modSignal = gqamMod(data); noisySignal = awgn(modSignal,5); receivedData = gqamdemod(noisySignal); errorStats = errorRate(data,receivedData); end
Output the error rate and number of errors.
fprintf("Error rate = %f\nNumber of errors = %d\n", ... errorStats(1), errorStats(2))
Error rate = 0.045200 Number of errors = 226
More About
Full Precision for Fixed-Point System Objects
FullPrecisionOverride
is a convenience property that,
when you set it to true
, automatically sets the appropriate properties
for an object to use full-precision to process fixed-point input.
For System objects, full precision, fixed-point operation refers to growing just enough
additional bits to compute the ideal full-precision result. This operation has no minimum or
maximum range overflow nor any precision loss due to rounding or underflow. It is also
independent of any hardware-specific settings. The data types chosen are based only on known
data type ranges and not on actual numeric values. Full-precision for System objects does
not optimize coefficient values. When you set the FullPrecisionOverride
property to true
, the other fixed-point properties it controls no longer
apply and any of their nondefault values are ignored. These properties are also hidden. To
specify individual fixed-point properties, first set
FullPrecisionOverride
to false
.
Algorithms
The general QAM demodulation algorithm comprises these steps:
Define the signal constellation as a vector of length M, each mth element in the constellation vector mapped to an integer (
m−1
).Input a signal as a scalar or column vector.
Use any of these decision methods to demodulate the signal:
Hard Decision — For each received sample, compute the Hamming distance to each constellation point. Select the symbol corresponding to the minimum Hamming distance. If multiple codewords tie for the minimum distance, randomly select one.
Log-likelihood Ratio (LLR) — For each received signal, calculate the LLR by taking the logarithm of the ratio of probabilities of transmitting a 0 bit versus a 1 bit. Use the LLR values to determine the most likely transmitted symbol for each bit.
Approximate Log-Likelihood Ratio (LLR) — For each bit position, identify the nearest constellation point that corresponds to a 0 and the nearest constellation point that corresponds to a 1. Based on the identified nearest constellation point, compute the LLR for each bit in the received signal.
For more information about the decision methods, see Hard- vs. Soft-Decision Demodulation.
Extended Capabilities
C/C++ Code Generation
Generate C and C++ code using MATLAB® Coder™.
Usage notes and limitations:
The
Variance
property is nontunable when using code generation.See System Objects in MATLAB Code Generation (MATLAB Coder).
Version History
Introduced in R2012a
See Also
Functions
Objects
Blocks
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)