How to config DPD on AD9375?

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:



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]

Top Replies

    •  Analog Employees 
    Jun 17, 2020 in reply to sonminh +1 verified
    BUT I don't understand why system no have dpd run better than system have DPD.

    What do you mean by run better here ? 

Parents Reply Children
  • Hi, In above test cases, I get status of mykonosVswrStatus and mykonosClgcStatus. I see both errorStatus and  trackCount return 0. Why trackCount = 0( Number of times clgc and vswr has successfull run since initialization calibration = 0)
    )?. Is it affect to successfull of DPD?

  • 0
    •  Analog Employees 
    on Jun 26, 2020 11:46 AM 4 months ago in reply to sonminh

    CLGC and VSWR do not impact DPD. They are seperate cal. 

    Your DPD iteration count is increasing , so set up required for DPD is correct. May be there is something wrong with CLGC configuration.

  • Hi ,

    In page 4 of ad9375 datasheet, specification of image rejection at 5500Mhz is 50dbm. But once I try with 3 tone signal 3Mhz, 6Mhz, 9Mhz on AD9375, It generate 3 image -3Mhz, -6Mhz, -9Mhz. and not pass specification.

    How to decrease or filter 3 above image signal. How to configure AD9375 to decrease image signal?

  • 0
    •  Analog Employees 
    on Jun 30, 2020 4:40 AM 4 months ago in reply to sonminh

    Can you share screenshot of your measurement. Are you running QEC tracking calibration.?

    With single tone , what is the level of image?

    What is your application ? If its 4G/5G can you test with a 4G signal at offset and measure QEC performance with tracking cals enabled? 

  • Thanks

     I implement Calib DPD with:

    trackingCalMask = TRACK_ORX1_QEC | TRACK_ORX2_QEC | TRACK_RX1_QEC |
                                 TRACK_RX2_QEC | TRACK_TX1_QEC | TRACK_TX2_QEC | TRACK_TX1_LOL | TRACK_TX2_LOL;


     initCalMaskDpd =  TX_LO_LEAKAGE_EXTERNAL | DPD_INIT | CLGC_INIT | VSWR_INIT;

    You say :"Your DPD iteration count is increasing , so set up required for DPD is correct. May be there is something wrong with CLGC configuration"

    Maybe CLGC configuration not correct because I read  status of CLGC :

    Both clgcStatus.errorStatus and  clgcStatus.trackCount return 0x00;

    I configure Clgc by api:


        mykError = MYKONOS_configClgc(&mykDevice);
        if (mykError != MYKONOS_ERR_OK) {
            errorString = getMykonosErrorMessage(mykError);
    //        goto error_11;
        }
     and clgcConfig default:

    static mykonosClgcConfig_t clgcConfig =
    {
        -2000,          /* (value = 100 * dB (valid range -32768 to 32767) - total gain and attenuation from Mykonos Tx1 output to ORx1 input in (dB * 100)*/
        -2000,          /* (value = 100 * dB (valid range -32768 to 32767) - total gain and attenuation from Mykonos Tx2 output to ORx2 input in (dB * 100)*/
        0,              /* (valid range 0 - 40dB), no default, depends on PA, Protects PA by making sure Tx1Atten is not reduced below the limit*/
        0,              /* (valid range 0 - 40dB), no default, depends on PA, Protects PA by making sure Tx2Atten is not reduced below the limit*/
        75,             /* valid range 1-100, default 75*/
        75,             /* valid range 1-100, default 45*/
        0,              /* 0= allow CLGC to run, but Tx1Atten will not be updated. User can still read back power measurements.  1=CLGC runs, and Tx1Atten automatically updated*/
        0,              /* 0= allow CLGC to run, but Tx2Atten will not be updated. User can still read back power measurements.  1=CLGC runs, and Tx2Atten automatically updated*/
        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)*/
        600,            /* Threshold for Tx1 in order to stop tracking, value = 100 * dB, default 6db then value = 600*/
        600,            /* Threshold for Tx2 in order to stop tracking, value = 100 * dB, default 6db then value = 600*/
        0,              /* Threshold feature enable for Tx1, 0 = disable, 1 = enable, default = 0*/
        0               /* Threshold feature enable for Tx1, 0 = disable, 1 = enable, default = 0*/
    };

    How to configure to run success CLGC ?