The gain, phase, and offset correction factor values can be set using the RFdc driver API. An example of using the API is as follows.
// Initial Setup
XRFdc_QMC_Settings QMC_Settings_I, QMC_Settings_Q; // RF-ADC block0 is I, RF-ADC block1 is Q
QMC_Settings_I.EventSource = XRFDC_EVNT_SRC_TILE; // QMC settings are updated with a tile event
QMC_Settings_Q.EventSource = XRFDC_EVNT_SRC_TILE;
....
// Update Gain/Phase/Offset for I/Q RF-DACs in tile0
QMC_Settings_I.GainCorrectionFactor = 0.9; // Set gain for I
QMC_Settings_I.PhaseCorrectionFactor = -5.0; // I/Q imbalance factor applied to I side, approx. in degrees
QMC_Settings_I.EnableGain = 1;
QMC_Settings_I.EnablePhase = 1;
QMC_Settings_Q.GainCorrectionFactor = 0.95;
QMC_Settings_Q.EnableGain = 1;
XRFdc_SetQMCSettings(ptr, XRFDC_ADC_TILE, 0, 0, &QMC_Settings_I); // Write settings for ADC0,0 - I ADC
XRFdc_SetQMCSettings(ptr, XRFDC_ADC_TILE, 0, 1, &QMC_Settings_Q); // Write settings for ADC0,1 - Q ADC
XRFdc_UpdateEvent(ptr, XRFDC_ADC_TILE, 0, 0, XRFDC_EVENT_QMC); // Generate a Tile Update Event - applies all QMC settings at once
It is also possible to read back the QMC settings from any converter, using the
XRFdc_GetQMCSettings
RFdc driver API command. This populates the QMC_Settings
structure with the values from the hardware.