def farid_filters(n=3):
    """Farid's differentiation filters
    From Differentiation of Discrete Multidimensional Signals, H. Farid & E. P. Simoncelli, IEEE 2004
    n : number of taps, either 3 or 5
    returns p, d : p is the interpolation filter, d, is the derivative filter
    e.g:
    p,d = farid_filters(5)
    darr_dx = sepfirnd(arr, (p, d), (0,1)) #apply p to axis 0, d to axis 1
    darr_dy = sepfirnd(arr, (p, d), (1,0)) #apply p to axis 1, d to axis 0
    """
    if n == 3:
        return [0.229879, 0.540242, 0.229879], [0.425287, 0.0, -0.425287]
    elif n == 5:
        return [0.037659, 0.249153, 0.426375, 0.249153, 0.037659], [0.109604, 0.276691, 0.0, -0.276691, -0.109604]