AnsweredAssumed Answered

ad9361 - unexpected filter response

Question asked by obenj on Jul 9, 2015
Latest reply on Jul 20, 2015 by obenj

I am seeing an unexpected filter characteristics for a TX signal chain. I generated a set of TX FIR coefficients from the AD9361 Filter Wizard (attached as The corresponding screenshots for the filter wizard settings and fvtool plots are also attached; filter_wizard.png shows the sample rate rate selection and output transmit FIR magnitude response; cascaded_filter_magn_resp.png shows the fvtool plot for the TX filter chain.


Notable points: I was aiming for a passband ripple of +-0.5 dB and passband edge at 30 KHz.


But when I produce a chirped tone that sweeps from -120KHz to +120KHz (from the negative to positive Nyquist frequencies for the IQ sample rate), the output spectrum that I observe is seen in the last attached image (actual_passband.png). There are very significant dips in in the passband (I don't know if I would described it as ripple) and the passband extends to +-60KHz depending on where you want to call the corner.


I've tested previously on Git commit drivers/iio/adc/ad9361: Add calib_mode manual_tx_quad · analogdevicesinc/linux@0996957 · GitHub , but I've updated earlier this week to Merge branch 'xcomm_zynq' of… · analogdevicesinc/linux@39f5f9b · GitHub to include all recent changes to the ad9361 Linux driver. I didn't know if the commit drivers/iio/adc/ad9361: Fix FIR filter load issue. · analogdevicesinc/linux@9a13b3c · GitHub would specifically change anything, but I see the same behavior before and after.


I have tried altering the formatting for the .ftr file to make sure the filter coefficients are being read in as expected. The Linux driver uses the line formatting:


ret = sscanf(line, "%d,%d", &txc, &rxc);

  if (ret == 1) {

  coef_tx[i] = coef_rx[i] = (short)txc;



  } else if (ret == 2) {

  coef_tx[i] = (short)txc;

  coef_rx[i] = (short)rxc;





I think this is working properly with the attached *.ftr file, because I can read out the coefficients using registers 0x60, 0x63, and 0x64 and the coefficients looks like they match the input file.


Has similar behavior been observed before?