Post Go back to editing

How to config DPD on AD9375?

Thread Summary

The user is experiencing issues with DPD performance on a custom board using AD9375 with a GaN PA, where the system with DPD enabled runs slower and has higher error rates compared to without DPD. The DPD and CLGC configurations appear correct, but the CLGC error status indicates it is disabled due to `allowTx1AttenUpdates` and `allowTx2AttenUpdates` being set incorrectly. The user is advised to ensure these parameters are enabled and to measure EVM and Tx output power to diagnose the issue further.
AI Generated Content

Hi,

I use default DPDconfig to configure DPD on my custom board:

static mykonosDpdConfig_t dpdConfig =
{
    10,              /* 1/2^(damping + 8) fraction of power `forgotten' per sample (default: `1/8192' = 5, valid 0 to 15), 0 = infinite damping*/
    1,              /* number of weights to use for int8_cpx weights weights member of this structure (default = 1)*/
    2,              /* DPD model version: one of four different generalized polynomial models: 0 = same as R0 silicon, 1-3 are new and the best one depends on the PA (default: 2)*/
    1,              /* 1 = Update saved model whenever peak Tx digital RMS is within 1dB of historical peak Tx RMS*/
    20,             /* Determines how much weight the loaded prior model has on DPD modeling (Valid 0 - 32, default 20)*/
    0,              /* Default off = 0, 1=enables automatic outlier removal during DPD modeling */
    512,            /* Number of samples to capture (default: 512, valid 64-32768)*/
    4096,           /* threshold for sample in AM-AM plot outside of 1:1 line to be thrown out. (default: 50% = 8192/2, valid 8192 to 1)*/
    0,              /* 16th of an ORx sample (16=1sample), (default 0, valid -64 to 64)*/
    255,            /* Default 255 (-30dBFs=(20Log10(value/8192)), (valid range  1 to 8191)*/
    {{64,0},{0,0},{0,0}}/* DPD model error weighting (real/imag valid from -128 to 127)*/
};

My system have multi mode BPSK, QPSK, QUAM16,QUAM64 with bandwidth 5MHz, 10MHz, 20Mhz. 

I have feedback Tx2 signal into ORX2 with power -24dbm and configure dpd follow ug992. But i don't see any different between have setup DPD and no have DPD.

Here is status that I read using MYKONOS_getDpdStatus:

 dpdStatus.dpdErrorStatus = 0,

dpdStatus.dpdExtPathDelay = 0x73B ,

dpdStatus.dpdIterCount = 0,

dpdStatus.dpdMaxAdaptation = 0,

dpdStatus.dpdModelErrorPercent = 1000,

dpdStatus.dpdTrackCount = 0

Can you suggest for me how to solve? Thanks. This is my output from tx:

Edit Notes

dpdStatus.dpdErrorStatus = 0, dpdStatus.dpdExtPathDelay = 0x73B , dpdStatus.dpdIterCount = 0, dpdStatus.dpdMaxAdaptation = 0, dpdStatus.dpdModelErrorPercent = 1000, dpdStatus.dpdTrackCount = 0
[edited by: sonminh at 2:00 AM (GMT 0) on 24 Apr 2020]

Thread Notes

  • HI ,

    I have mistake once post this question in to that forum, then I received this answer:

    "Moving to No-Os forum for comments on the DPD configuration"

    Because I don't know delete that question, I have post again in this forum.

    Thanks

  • Can you please share your complete configuration file? Are you using a profile that supports DPD?

    Please check that you are enabling the DPD init and tracking calibration.

    Please make sure that you are enabling the required DPD parameters.

    typedef struct
    {
    mykonosDacDiv_t dacDiv; /*!< The divider used to generate the DAC clock (ENUM Values)*/
    mykonosFir_t *txFir; /*!< Pointer to Tx FIR filter structure */
    uint8_t txFirInterpolation; /*!< The TX digital FIR filter interpolation (1,2,4) */
    uint8_t thb1Interpolation; /*!< Tx Halfband1 (HB1) filter interpolation (1,2) */
    uint8_t thb2Interpolation; /*!< Tx Halfband2 (HB2) filter interpolation (1,2) */
    uint8_t txInputHbInterpolation; /*!< Interpolation of half band filter before the programmable FIR (valid 1,2,4) */
    uint32_t iqRate_kHz; /*!< Tx IQ data rate in kHz */
    uint32_t primarySigBandwidth_Hz; /*!< Tx primary signal BW */
    uint32_t rfBandwidth_Hz; /*!< Tx RF passband bandwidth for the profile */
    uint32_t txDac3dBCorner_kHz; /*!< DAC filter 3dB corner in kHz */
    uint32_t txBbf3dBCorner_kHz; /*!< Tx BBF 3dB corner in kHz */
    uint8_t enableDpdDataPath; /*!< Enable Tx Dynamic pre distortion - only valid for a DPD-enabled transceiver */
    } mykonosTxProfile_t;

  • Hi ,

    Thanks for your help, I had configure DPD done . But  the result of using DPD in different frequency is different. Here is result once use DPD:

    In 4,5G:

    In 4.6G:

    In 4.8G:

    Here is dpd config:

    static mykonosDpdConfig_t dpdConfig =

        5,              /* 1/2^(damping + 8) fraction of power `forgotten' per sample (default: `1/8192' = 5, valid 0 to 15), 0 = infinite damping*/
        1,              /* number of weights to use for int8_cpx weights weights member of this structure (default = 1)*/
        2,              /* DPD model version: one of four different generalized polynomial models: 0 = same as R0 silicon, 1-3 are new and the best one depends on the PA (default: 2)*/
        1,              /* 1 = Update saved model whenever peak Tx digital RMS is within 1dB of historical peak Tx RMS*/
        20,             /* Determines how much weight the loaded prior model has on DPD modeling (Valid 0 - 32, default 20)*/
        0,              /* Default off = 0, 1=enables automatic outlier removal during DPD modeling */
        16384,            /* Number of samples to capture (default: 512, valid 64-32768)*/
        4096,           /* threshold for sample in AM-AM plot outside of 1:1 line to be thrown out. (default: 50% = 8192/2, valid 8192 to 1)*/
        0,              /* 16th of an ORx sample (16=1sample), (default 0, valid -64 to 64)*/
        255,            /* Default 255 (-30dBFs=(20Log10(value/8192)), (valid range  1 to 8191)*/
        {{64,0},{0,0},{0,0}}/* DPD model error weighting (real/imag valid from -128 to 127)*/

    static mykonosObsRxSettings_t obsRxSettings =
    {
        &orxProfile,    /* ORx datapath profile, 3dB corner frequencies, and digital filter enables*/
        &orxGainControl,/* ObsRx gain control settings structure*/
        &obsRxAgcConfig,/* ORx AGC control settings structure*/
        &snifferProfile,/* Sniffer datapath profile, 3dB corner frequencies, and digital filter enables*/
        &snifferGainControl,/* SnRx gain control settings structure*/
        &obsRxFramer,   /* ObsRx JESD204b framer configuration structure */
        MYK_ORX2,
    //    (MYK_ORX1_ORX2 | MYK_SNRXA_B_C),/* obsRxChannel */
        OBSLO_TX_PLL,   /* (obsRxLoSource) The Obs Rx mixer can use the Tx Synth(TX_PLL) or Sniffer Synth (SNIFFER_PLL) */
        4467000000U,     /* SnRx PLL LO frequency in Hz */
        0,              /* Flag to choose if complex baseband or real IF data are selected for Rx and ObsRx paths. Where if > 0 = real IF data, '0' = complex data*/
        NULL,           /* Custom Loopback ADC profile to set the bandwidth of the ADC response */
        OBS_RXOFF       /* Default ObsRx channel to enter when radioOn called */
    };

    And here is section that configure DPD:

    8838.dpd_configure.txt

    Can you suggest to me solution improve DPD run better and result is the same in different frequency? My system operate from 4.4G to 5G

    Thanks and brgs.

  • Can you please share the DPD status for all the frequencies? 

    Did you verify your PA performance across frequency?

    What is the PA you are using? 

  • Hi ,

    Thanks for your help.

    I use PA: TGA 2578-CP operate from 2g to 6G.

    I  just change frequency in runtime and verified DPD status for above frequencies:

    In 4.5G:

     dpdStatus.dpdErrorStatus = 0,

    dpdStatus.dpdExtPathDelay = 0x73E,

    dpdStatus.dpdIterCount = 0xB6,

    dpdStatus.dpdMaxAdaptation = 0x1F92,

    dpdStatus.dpdModelErrorPercent = 0xE,

    dpdStatus.dpdTrackCount = 0xB

    In 4.6G:

    dpdStatus.dpdErrorStatus = 0,

    dpdStatus.dpdExtPathDelay = 0x73E,

    dpdStatus.dpdIterCount = 0x1B,

    dpdStatus.dpdMaxAdaptation = 0xF47,

    dpdStatus.dpdModelErrorPercent = 0x11,

    dpdStatus.dpdTrackCount = 0x1B

    In 4.8G:

    dpdStatus.dpdErrorStatus = 9,

    dpdStatus.dpdExtPathDelay = 0x73E,

    dpdStatus.dpdIterCount = 0x144,

    dpdStatus.dpdMaxAdaptation = 0x1F92,

    dpdStatus.dpdModelErrorPercent = 0x12E,

    dpdStatus.dpdTrackCount = 0x1D

    Then I change frequency 4.5G again and read dpd status:

    dpdStatus.dpdErrorStatus = 0,

    dpdStatus.dpdExtPathDelay = 0x73E,

    dpdStatus.dpdIterCount = 0x25D,

    dpdStatus.dpdMaxAdaptation = 0x1F92,

    dpdStatus.dpdModelErrorPercent = 0x53,

    dpdStatus.dpdTrackCount = 0x24

    Thanks

  • DPD is still working without any errors.

    The power levels for the three measurements seems to be different, at 4.6G power is 2 dB higher than 4.5G. For caparison make sure output powers are same. 

    What is the raw ACLR (without DPD) of PA for same power at frequencies 4,5 G, 4.6G  and  4.8G ?

  • Thanks , May be my system don't have CFR block or PAR not the same in user guide:

    A peak to average ratio
    (PAR) of 7.5 dB to 8.5 dB is typical for a 20 MHz LTE FDD
    waveform post CFR. Note that the CFR operations on the test
    waveforms are precomputed in the GUI software. A CFR block
    is not integrated into the
    AD9375 transceiver.

    Thanks

  • Yes the PAR of the signal needs to be between 7.5dB and 8.5dB for best DPD performance.

  • Hi ,

    I have a question.

    have i must calibration DPD again  use MYKONOS_runInitCals and MYKONOS_enableTrackingCals every change frequency or only calibration DPD once at Initialize and change any frequency without DPD calibration again?

    Thanks