0
$\begingroup$

I need to find a way to create some fractional delay in a signal processing application that I am working on. Separately to this, I have been messing around with basic filter design (despite reading alot about them, including in the Scientists and engineers guide to DSP, I have still only basic understanding of filters).

During the course of this experimentation, I noticed that one of the random filters I was messing around with caused a delay of 3 samples, and that the impulse response was centred at 3 samples. I have gone back over relevant pages in the DSP guide and now understand what it says better, and that this should be the case.

So, by my current understanding, if I was to create a filter with an impulse response of:

1, 0, 0, 0, 0, 0 (starting at sample 0)

it would pass the signal unchanged.

if I had an impulse response of:

0, 0, 1, 0, 0, 0 (starting at sample 0)

it would pass the signal unchanged aside from a delay of 2 samples.

So, could I create a filter that gives fractional delay by interpolating the impulse response? As an example, if I wanted a delay of 0.75 samples, could I create a filter with this impulse response:

0.25, 0.75, 0, 0, 0, 0 (starting at sample 0)

and if I wanted a time delay of 2.4 samples, an impulse response of:

0, 0, 0.6, 0.4, 0, 0 (starting at sample 0)

I am aware that these filters would be very much sample rate dependant in terms of the real time shifts they created, but that could be easily accounted for.

Cheers in advance for any help,

Pete

EDIT:

I'm sorry if the impulse response notation is a bit crummy, I'm not really sure how the best way to write it would be

$\endgroup$
  • $\begingroup$ Have a look at this answer for references on implementing a fractional delay. $\endgroup$ – Matt L. Jan 27 '16 at 12:56
  • $\begingroup$ I have read that answer already, and looked at the suggested resources, and if I remember correctly I struggled to follow them, however, I'll have another bash at it. Thanks! $\endgroup$ – Iron Attorney Jan 27 '16 at 12:59
0
$\begingroup$

Unfortunately fractional delays are much more complicated than this. Your example would create a filter where delay and amplitude are significantly dependent on frequency. I strongly suggest reading http://ieeexplore.ieee.org/xpl/login.jsp?tp=&arnumber=482137&url=http%3A%2F%2Fieeexplore.ieee.org%2Fiel4%2F79%2F10273%2F00482137.pdf%3FisNumber%3D10273%26arNumber%3D482137%26isnumber%3D10273%26arnumber%3D482137 and https://ccrma.stanford.edu/~jos/Interpolation/

$\endgroup$
  • $\begingroup$ Thanks for the response and links! Is it only the "interpolated" impulse repsonse filters that would be dependent on frequency? If it's the first one's too, I'd need to strongly revise my understanding of those :D $\endgroup$ – Iron Attorney Jan 27 '16 at 12:56
0
$\begingroup$

A windowed Sinc interpolator with a kernel of sufficient width would be better (have lower stop-band noise) than a two point linear interpolation. You can offset the windowed Sinc to get fractional delays.

$\endgroup$

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.