UG-1828 Preliminary Technical Data
Rev. PrA | Page 154 of 253
In summary, in the frequency deviation output mode, the rxnbdem can provide more important resources as followed:
• A 2k-depth FIFO,
• A spur-free carrier frequency offset correction,
• A profile-switchable channel filter,
• An accurate digital frequency discriminator,
• A low-pass filter or a pulse shaping filter for the frequency deviation, and
• A precise frequency deviation resampler.
All above resources can be manually enabled and controlled by the BBIC.
API PROGRAMMING
Configuration for blocks in rxnbdem subsystem is profile related on so far, all relative blocks are enabled or bypassed in profile by
selecting Rx “IQ” mode or “Frequency Deviation” mode, more user configurable capability will be added in later software release.
Carrier Frequency Corrector API programming
The API function adi_adrv9001_Rx_FrequencyCorrection_Set() is provided to set CFC frequency word, as mentioned earlier, the
frequency correction word should be in the range of min (±20k,20% of sample rate) (will change the limitation in later software). And
the frequency correct operation can take effect immediately or at the start of next available frame by set the parameter “immediate” to
“Ture” or “False”.
Rx Programmable FIR Filter API Programming
Profile Pre-defined Rx PFIR coefficients (customized Rx PFIR coefficients will be supported in the later software release) are atomically
loaded during chip initialization, there is no need for baseband processor to call any PFIR coefficients loading API function.
The configuration structure adi_adrv9001_PfirWbNbBuffer_t is defined as the following for the programming FIR filter coefficients.
typedef struct adi_adrv9001_PfirWbNbBuffer
{
uint8_t numCoeff; /* number of coefficients */
adi_adrv9001_PfirSymmetric_e symmetricSel; /* symmetric selection */
adi_adrv9001_PfirNumTaps_e tapsSel; /* taps selection */
adi_adrv9001_PfirGain_e gainSel; /* gain selection */
int32_t coefficients[ADI_ADRV9001_WB_NB_PFIR_COEFS_MAX_SIZE]; /* coefficients */
} adi_adrv9001_PfirWbNbBuffer_t;
Baseband processor can prepare new FPIR coefficients in one or more adi_adrv9001_PfirWbNbBuffer_t instances and call the API
function adi_adrv9001_arm_NextPfir_Set() in “PRIMED” or “RF_ENABLED” state to load each required instance into ADRV9001
hardware. Multiple PFIRs using the same coefficients can be loaded in a single call. However, note that the old coefficients remain in
effect until adi_adrv9001_arm_Profile_Switch() is called.
The API function adi_adrv9001_arm_NextRxChannelFilter_Set() calls adi_adrv9001_arm_NextPfir_Set() once or twice as needed to
update channel filter coefficients for Rx1, Rx2, or both. Either PFIR pointer may be NULL to prevent modifying the corresponding PFIR
but it is an error if both PFIR pointers are NULL.
The ADRV9001 performs the PFIR coefficients switch for all channels that have new coefficients prepared and waiting when the API
command adi_adrv9001_arm_Profile_Switch() is called. If ADRV9001 is in PRIMED state, the new coefficients will take effect on the
next transition to RF_ENABLED. If it is in RF_ENABLED, they take effect immediately.
An example python code for the RX PFIR coefficients switch is in below:
pfir_dmr_12p5k_coeff = [1,4,10,14,10,-8,-36,-56,-43,18,110,176,140,-36,-296,\
-477,-385,65,717,1164,945,-116,-1630,-2655,-2161,224,3612,5917,4823,-660,-8930,\
-15835,-16492,-8267,6681,21178,26054,15428,-8503,-34452,-46572,-33192,4645,50326,\
77802,65235,9575,-66663,-122526,-118715,-41686,81623,189288,211654,109809,-93600,\
-309489,-411032,-287232,101328,691337,1327974,1817574,2001178,1817574,1327974,\
691337,101328,-287232,-411032,-309489,-93600,109809,211654,189288,81623,-41686,\
-118715,-122526,-66663,9575,65235,77802,50326,4645,-33192,-46572,-34452,-8503,\
15428,26054,21178,6681,-8267,-16492,-15835,-8930,-660,4823,5917,3612,224,-2161,\