I have multi-shell DWI data (b=0,1000,2000) with the same 64 directions fit per each non-zero shell that I want to produce FA maps for. I know as b-val increases, SNR decreases, so I was wondering if I should fit the tensor on both shells, or only use b = 1000. Any advice? My intuition is that using both shells should be fine.
You will want to use all your weighted images for the calculation. As you note, the signal to noise decreases with b-value, but the spatial specificity increases. At one extreme, the b=0 image has the best SNR, but it has no spatial specificity (spherical), your b=1000 will have intermediate SNR and spatial specificity (e.g. a roundish ellipsoid in fiber tracks), while the b=2000 will have the poorest SNR but the best spatial specificity (more cigar shaped in fiber tracts). You can use DTIFIT, dwi2tensor or Python code to compute your tensor.
Each of those pipelines will first create the tensor as 6 parameters for each voxel (an upper triangle: D11, D22, D33, D12, D13, D23) from which you can compute Eigen vectors (V1…V3), Eigenvalues (L1…L3), FA, MD.
Since your data has two b-weighted values, you can also measure the 15-parameters for diffusion kurtosis (e.g. use dwi2tensor with -dkt) that can be used to estimate popular kurtosis parameters. There are acquisition tradeoffs between what makes good tensors and good measures of kurtosis. Therefore, unless your sequence was designed for kurtosis measures these will likely be noisy and potentially biased.