How to pick coefficients for Fractional Delay Filters? I have a Virtex 6 FPGA running at 200MHz with ADC/DACs on it.  I have been converting a WiFi signal (2462MHz) down to a more reasonable IF of 25MHz, sampling, running the signal through taps, tweaking them, and mixing back up.  This all works fine.

My issue is that since I am mixing down and sampling at a lower rate, I cannot implement RF level multipath by adjusting the delay in the taps for phase changes, instead I had to adjust it at the IF level instead.  This works OK, but it means that timing is off (things like TDOA or stuff with TOF measurements could care about that).  It seems like the best way around this (and probably the right way) is to implement a fractional delay filter (FDF), but I am not sure the best way to do it.

It seems like I need to come up with the coefficients for the taps, but I cannot seem to glean that out of the whitepapers I've read on FDF.  Any ideas?
I usually do this by creating a low pass filter that entirely passes through the signal that I want to delay.  I create the LPF "manually" by creating a windowed sinc function.  Something along the lines of-

filt = sinc(-80:.8:80);
filt = filt .* hamming(length(filt)).';


This gets you a filter that passes about 80% of the nyquist region (the 80% is set by the .8 increment in the sinc indexing).  To get a fractional delay you simply include the fractional delay in the calculation of your filter.  Adding a constant to the sinc indexing delays the filter by $\frac{constant}{increment}$ samples.  For instance, in the case of the filter above, adding 0.1 would create a fractional delay of $\frac{0.1}{0.8}$ samples, or $0.125$ samples.

filt = sinc((-80:.8:80) + .1);
filt = filt .* hamming(length(filt)).';


This works because filtering is a linear operation and delaying the filter is equivalent to convolving your original LPF with a fractionally delayed delta function.  Since linearity implies that the associative property holds, convolving your signal with the delayed LPF is equivalent to convolving your signal with a fractionally delayed delta function and then filtering it with the "undelayed" LPF.

Note: When creating the "undelayed" LPF you must make sure that the indices are symmetric.  The easiest way to do that is to make sure the start and end points are integer multiples of your indexing increment.  That is why I used +/- 80 for an increment of 0.8.