主要内容

cemicmod

R2026b

CEMIC modulation

Since R2026b

    Description

    [modsignal,efficiency] = cemicmod(signal,ampfactor) modulates the input signals signal using the constant envelope multiplexing with intermodulation construction (CEMIC) technique. The function returns a multiplexed signal, modsignal, and the power efficiency of the multiplexing process efficiency. The amplification factor ampfactor defines the power distribution between the signals.

    For more information, see the Algorithms section.

    example

    Examples

    collapse all

    Generate four random signals to modulate.

    numSignals = 4;
    x = 2*randi([0,1],1000,numSignals) - 1;

    Set the power distribution among the signals to 20%, 30%, 40%, and 10%, respectively.

    Calculate the corresponding amplitude factors as the square root of the power distribution of that signal.

    ampfactor = [sqrt(0.2) sqrt(0.3) sqrt(0.4) sqrt(0.1)];

    Apply CEMIC modulation to the four signals.

    [y,efficiency] = cemicmod(x,ampfactor);

    Display the power efficiency of interplexing process.

    disp(efficiency)
        0.4444
    

    Generate these three GPS signals, and combine them into a single constant-envelope waveform by using CEMIC modulation technique.

    • L1C data signal

    • C/A-code signal

    • Dummy M-code signal

    Specify a GPS satellite PRN ID.

    PRNID = 1;

    Specify the number of navigation data bits to include in the waveform. To generate a longer waveform, you can increase this value.

    numNavDataBits = 1;

    The GPS LNAV data rate is 50 bps, so one navigation data bit lasts 20 ms.

    oneBitDuration = 20;

    The GPS C/A-code chipping rate is 1.023 Mcps, or 1023 chips/ms. Calculate the number of CA chips in one navigation data bit.

    numCAChipsPerDataBit = 1023*oneBitDuration;

    Create random binary navigation data for the signal components. These sequences act as the input message bits.

    lenLNAVData  = 37500;
    lenCNAV2Data = 88200;
    randLNAVData  = randi([0 1],lenLNAVData,1);
    randCNAV2Data = randi([0 1],lenCNAV2Data,1);

    Generate the C/A spreading code for the specified GPS satellite.

    caCode = gnssCACode(PRNID,"GPS");
    % Repeat the C/A code so that it spans one navigation data bit.
    tempCABits = repmat(caCode,oneBitDuration,1);
    % Apply the LNAV data bit to the repeated C/A code. XOR maps the navigation data onto the spreading sequence.
    caBits = xor(tempCABits,randLNAVData(1:numNavDataBits).');
    % Convert the result to a column vector.
    caBits = caBits(:);
    % Repeat the C/A-code sequence so that its length matches the M-code signal length.
    rateMatchedCABits = repmat(caBits.',20,1);
    % Convert binary values {0,1} to bipolar values {+1,-1}.
    caCodeSig = 1 - 2*rateMatchedCABits(:);

    Generate the GPS L1C data ranging codes for the specified satellite.

    [l1cd,~,~] = gpsL1CCodes(PRNID);

    Apply the CNAV-2 data bit to the L1C data code. Modulate the L1C data signal by using BOC(1,1).

    l1cdBits = xor(l1cd,randCNAV2Data(1:numNavDataBits).');
    l1cdSig = bocmod(l1cdBits(:),1,1,20);

    Generate a dummy M-code signal. Modulate the M-code by using BOC(10,5).

    dummyMcode = randi([0 1],numCAChipsPerDataBit*numNavDataBits,1);
    mcodeSig = bocmod(dummyMcode,10,5,5);

    Specify the amplitude scaling factors for the three input signals, C/A-code, L1C data, and M-code, in order.

    ampfactors = [sqrt(0.4) sqrt(0.1) sqrt(0.4)];

    Combine the signals using CEMIC modulation.

    [GPSL1BBWaveform,efficiency] = cemicmod([caCodeSig l1cdSig mcodeSig],ampfactors);

    Display the CEMIC modulation efficiency for the waveform.

    disp(efficiency)
        0.9000
    

    Input Arguments

    collapse all

    Input signals, specified as an m-by-n matrix. m is the length of the input signals, and n is the number of signals to be interplexed. n must be in the range [1, 5].

    Note

    Each element of the matrix must be either +1 or -1.

    Data Types: double
    Complex Number Support: Yes

    Amplification factor, specified as one of these options.

    • Scalar — Assign the same value to each input signal.

    • n-element vector — Assign an individual value to each input signal. n is the number of signals specified in signal.

    The amplification factor defines the power distribution between the signals. The cemicmod function internally derives modulation indices corresponding to each signal using their amplification factors. It then uses these modulation indices to compute the multiplexed signal modsignal.

    Data Types: double

    Output Arguments

    collapse all

    CEMIC multiplexed signal, returned as an n-element column vector. n is the number of signals specified in signal.

    Data Types: double
    Complex Number Support: Yes

    Power efficiency ratio, returned as a scalar in the range [0, 1].

    Efficiency is computed as the total signal power divided by the total transmitted power.

    Data Types: double

    Algorithms

    To understand the CEMIC modulation workflow, consider multiplexing N input signals. These N input signals and their intermodulation products together form 2N components. Each components is scaled by a complex weight, Cn, and summed to produce a constant envelope multiplexed output. Here, n is in the range [1, 2N].

    This equation computes the complex weights from the phase mapping table of the desired multiplexing scheme.

    C=S1×A×exp(jθ)

    where:

    • S is the 2N-by-2N Hardmand matrix formed by all possible values of the input signals, with S–1 = ST / 2N

    • A is the amplitude of the signal.

    • Theta is a vector of 2N target phase values.

    For detailed information, see [1].

    References

    [1] X.M. Zhang, X. Zhang, Z. Yao, and M. Lu. "Implementation of Constant Envelope Multiplexing Based on Extended Interplex and Inter-Modulation Construction Method." Proceedings of the 25th International Technical Meeting of The Satellite Division of the Institute of Navigation (ION GNSS 2012). (September 21, 2012): 893-900.

    Extended Capabilities

    expand all

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

    Version History

    Introduced in R2026b