0
$\begingroup$

I have a feedback loop with a transfer function $H(z) = \sum_{i=0}^{L-1} h(i) z^{-i}$. Is there a way to make this FIR filter non-causal? If it was a feed-forward filter, we could simply do so by buffering data. But can it be done in a feedback loop?

enter image description here

$\endgroup$
1
$\begingroup$

There's a tendency when doing "pure" DSP to call a filter "noncausal" because you started by designing it to be symmetric around t = 0, but then you're running it with a bunch of delay, or because you're running filtfilt on the data (where you scan the filter forward, and then backward), or some other simulated non-causal behavior.

But you cannot make a real noncausal filter. As soon as a filter is put into a loop, as you have done, then if the loop is even remotely real you can't have a noncausal filter in there. Even having a forward and a reverse path that both have a zero-delay response immediately pitches you into an algebraic loop -- and isn't something you'll find in the real world.

So -- don't do that, unless for some reason you're starting with the question "well, what if I actually did have a time machine" and you're going from there.

$\endgroup$
3
$\begingroup$

Is there a way to make this filter non-causal?

Remember that non-causal filters aren't possible to interpret in any case, because "non-causal" literally means there's output caused by input that comes later.

Just because you can buffer something if latency doesn't matter doesn't mean you've actually built a non-causal system - your buffering adds delay back in that actually has to be at least as long as the anticausal part of your system.

So, no. This makes no sense. You'll have to make your H(z) causal (which isn't hard at all), and deal with the resulting group delay (which might be problematic).

$\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.