DSPRelated.com
Forums

Signal And filter Index

Started by rider April 25, 2004
Hi!

I am trying to implement a Fractional Delay Interpolator using a
Farrow Structure as described by Gardner in the article "Interpolation
in Digital Modems -Parts I/II ". The basic underlaying equation is :

y(kTi) = SUM(over m) {x[mTs].h[kTi-mTs]} ---- EQ (1)

Where Ts is the input sample time and Ti is output sample time, both
incommensurate to each other.

The author then defines some new indexes as: if m is signal index,
then define

. 'filter' index i such that :

i= int[kTi/Ts] - m  , where int[z] means largest integer not exceeding
z

Define 'basepoint index' as :

m(k)=int[kTi/Ts]  ===> m= m(k) -i 

And a fractional interval: u(k)= kTi/Ts - m(k)

He then re-writes the EQ(1) as:

y(kTi)= y(k) =  SUM(i=I1 to I2) { x[m(k)-i].h[i+u(k)] }

The limit I1 starts from a negative value , like for a cubic
interpolator, I1=-2,and I2=1. So at any time k, we have to deal with
these values in the filter input and memory (for values of
i=-2,-1,0,1):

x[m(k)+2], x[m(k)+1], x[m(k)] , x[m(k)-1]

I would like to ask what do these values stand for if x(m) was our
sequence, given that m=m(k)-i . Which one of them is the most "recent"
value and which one is the most "delayed"? As far as normal notation
is concerned, we should say that x[m(k)] is the current value,
x[m(k)-1] is delayed by one sample, and x[m(k)+1] and x[m(k)+2] are
"future" values [ a non-casaul system?] . However, seeing the Farrow
structure in Article Part II , it suggests that 'most-delayed' value
is x[m(k)+2] and 'most recent' is x[m(k)-1]. Which one is true? What
effect/significance does the re-definition m = m(k)-i have?

Regards
Rider
"rider" <shabana_rizvi@yahoo.com> wrote in message
news:ca3a68c8.0404250924.6c760bdd@posting.google.com...
> Hi! > > I am trying to implement a Fractional Delay Interpolator using a > Farrow Structure as described by Gardner in the article "Interpolation > in Digital Modems -Parts I/II ". The basic underlaying equation is : > > y(kTi) = SUM(over m) {x[mTs].h[kTi-mTs]} ---- EQ (1) > > Where Ts is the input sample time and Ti is output sample time, both > incommensurate to each other. > > The author then defines some new indexes as: if m is signal index, > then define > > . 'filter' index i such that : > > i= int[kTi/Ts] - m , where int[z] means largest integer not exceeding > z > > Define 'basepoint index' as : > > m(k)=int[kTi/Ts] ===> m= m(k) -i > > And a fractional interval: u(k)= kTi/Ts - m(k) > > He then re-writes the EQ(1) as: > > y(kTi)= y(k) = SUM(i=I1 to I2) { x[m(k)-i].h[i+u(k)] } > > The limit I1 starts from a negative value , like for a cubic > interpolator, I1=-2,and I2=1. So at any time k, we have to deal with > these values in the filter input and memory (for values of > i=-2,-1,0,1): > > x[m(k)+2], x[m(k)+1], x[m(k)] , x[m(k)-1] > > I would like to ask what do these values stand for if x(m) was our > sequence, given that m=m(k)-i . Which one of them is the most "recent" > value and which one is the most "delayed"? As far as normal notation > is concerned, we should say that x[m(k)] is the current value, > x[m(k)-1] is delayed by one sample, and x[m(k)+1] and x[m(k)+2] are > "future" values [ a non-casaul system?] . However, seeing the Farrow > structure in Article Part II , it suggests that 'most-delayed' value > is x[m(k)+2] and 'most recent' is x[m(k)-1]. Which one is true? What > effect/significance does the re-definition m = m(k)-i have? > > Regards > Rider
I've read Part I of that paper, but not Part II. But I think you want to have future values for your interpolator to work properly. This puts a small delay in your tracking loop, but not much. The Farrow filter requires little storage for coefficients, but does require a lot of processing. I wonder if that structure is as relevant now with all the lookup table storage capacity in DSPs and FPGAs. You might be better off storing lookup tables of coefficients, rather than calculating them, and using a linear interpolator if need be to enhance the precision a bit more. One thing you can do is to combine the interpolator and the matched filter. I don't know if this reduces the number of computations but it's convenient and probably more accurate since the interpolator is then using the matched filter function to calculate the interpolants. If you stored, say, coeffs for 64 polyphases of the matched filter in a lookup table, you could then do the matched filter function with the polyphase that coresponds to u*64. Then the matched filter outputs a sample that has no (very low) ISI and is interpolated to the strobe instant. -Kevin