Hi all,

When I designed fir filter for ad9361, I noticed that the number of taps of FIR is automatically changed by Fstop and Fpass setting.

For example, when FIR configuration is set as attached screenshot, the valued of TxFIR taps is 128.

However, when Fpass is changed to 3MHz, the value of TxFIR taps is automatically decreased to 64.

I'd like to know that how the wizard calculates the value of FIR taps internally.

Could you tell me about it?

Regards,

Taiki

Hi Taiki,

The value of FIR taps are calculated in the following files:

Tx: MathWorks_tools/internal_designtxfilters9361_sinc.m at master · analogdevicesinc/MathWorks_tools · GitHub

Rx: MathWorks_tools/internal_designrxfilters9361_sinc.m at master · analogdevicesinc/MathWorks_tools · GitHub

They are calculated by two steps. Taking Rx for example, the first step is to determine a suitable number of taps:

N = min(16*floor(input.converter_rate/(2*input.data_rate)),128);

which is determined by converter rate and input data rate.

In order to save the power consumptions and to improve efficiency, the second step is to find out the minimum number of taps which can meet the requirements. It is implemented by some loops (starting from the number N found above, in each loop, decreasing this number by 16):

elseif dBripple_actual_vector(1) > input.dBripple || dBstop_actual_vector(1) < input.dBstop

h = tap_store(1,1:N);

dBripple_actual = dBripple_actual_vector(1);

dBstop_actual = dBstop_actual_vector(1);

break

elseif dBripple_actual_vector(i) > input.dBripple || dBstop_actual_vector(i) < input.dBstop

h = tap_store(i-1,1:N+16);

dBripple_actual = dBripple_actual_vector(i-1);

dBstop_actual = dBstop_actual_vector(i-1);

break

else

N = N-16;

i = i+1;

end

Hope it helps,

Di