|
|||||||
![]() |
|
|
Thread Tools |
|
|
#1 |
|
HardwareHeaven Senior Member
Join Date: Jan 2004
Location: St. Cloud, MN
Posts: 492
Rep Power: 0 ![]() |
Linear phase response possable with IIR?!
So i was looking for a FIR based external audio EQ (seeing if one existed) and stumbled upon this: http://www.weiss.ch/eq1/brochures/eq1lp.pdf
the important part in that brochure: "In order to avoid the technical and commercial drawbacks of FIR systems for audio equalizers, the Weiss Gambit EQ1-LP uses yet another scheme for linear phase response based on the following property of IIR filters: if one processes a sample with any IIR system, then time-reverses this sample and processes it again with the same IIR system, one will effectively have cancelled out the phase response of the IIR system, while squaring the amplitude response. The solution lies in the time-reversed (noncausal) filter of this algorithm." Could we use this information to create KX filters that are linear phase response? I realize they would use more resources; not sure how many more... Would appreciate thoughts
__________________
COMP: Dual Intel PIII 733 Mhz; GeForce 4 Ti 4600; 1.128 Gb RAM; SB0350 (Audigy 2 ZS Platnium) STEREO(I UPGRADED):Crown Audio K1 and K2 amplifiers (4000 watts at .1% THD ), JL 13w7 Subwoofer (6.5 CF) (2) 18" PR's, Klipsch SB-1's, some cement blocks for speaker stands...
Last edited by Chester01; Sep 16, 2008 at 03:23 AM. |
|
|
|
|
|
#2 |
|
HardwareHeaven Extreme Member
Join Date: Jan 2005
Posts: 5,503
Rep Power: 60 ![]() ![]() ![]() ![]() ![]() ![]() |
I think that description is a little over-simplified. Doing such a thing to a file would be easy enough, but doing it (the whole time reversal thing) in real time is another story.
|
|
|
|
|
|
#3 |
|
DriverHeaven Newbie
Join Date: Jul 2005
Posts: 19
Rep Power: 0 ![]() |
You said it already. the second (inversed) part would be non-causal. So this can't be done with live signals, only with prerecorded signals. You have to filter the signal, store it, reverse it, play the stored signal back thru the same filter, store the new signal and reverse it again. now you have a twice filtered signal without phase distortion.
|
|
|
|
|
|
|
|
HardwareHeaven Senior Member
Join Date: Jan 2004
Location: St. Cloud, MN
Posts: 492
Rep Power: 0 ![]() |
so how long of a delay would it require to do this? would it be dependant on the frequency being modified so example; 1000 hz would be 48 samples of delay?
__________________
COMP: Dual Intel PIII 733 Mhz; GeForce 4 Ti 4600; 1.128 Gb RAM; SB0350 (Audigy 2 ZS Platnium) STEREO(I UPGRADED):Crown Audio K1 and K2 amplifiers (4000 watts at .1% THD ), JL 13w7 Subwoofer (6.5 CF) (2) 18" PR's, Klipsch SB-1's, some cement blocks for speaker stands...
|
|
|
|
|
|
#5 | |
|
DriverHeaven Newbie
Join Date: Jul 2005
Posts: 19
Rep Power: 0 ![]() |
Quote:
![]() So the only way to get phase linearity is a FIR filter. This is non causal by default (symmetry around t=0) but you can make it causal by delaying it by it's tap size, because it's impulse response is finite. You can't do this with a IIR in realtime, because it's IR is infinite (and asymetric). So the trick you read of is to filter a signal with this asymetric filter, store it and play it backwards thru the same asymetric filter. but as the signal is reverse the assymerty of the filter also becomes reverse to the new signal. So you can think of the assymetric IR mirrored around t=0 which is symetric again. What means IIR? From the very first sample on, all following samples are affected by this until the last sample. Playing reverse means, the very last sample affects every previous sample until the first sample. A live signal is an endless stream, so you don't know the last sample, while the first sample is already gone thru your speaker and can't be changed anymore, except you have a time machine .So you'll either have to deal with phase errors or eat up GPRs with a FIR Filter, which adds latency too. |
|
|
|
|
|
|
#6 |
|
h/h member-shmember
Join Date: Dec 2002
Location: Evil Empire
Posts: 2,606
Rep Power: 66 ![]() ![]() ![]() ![]() ![]() ![]() |
[color=gray]
>so how long of a delay would it require to do this? Well, actually, the delay of such filter for real-time processing must be infinite (since you need to know the value of sample at infinite time in future to be able to calculate the current sample - simply as the response of the IIR is infinite - and when you reverse it - it becomes infinite from future to past) (well, i'm just repeating samplehunter here). In other words it's simply non-realizable in real-time (until someone invents time-machine). (Some tricks/additions to this algorithm do exist (like TIIR for example) but they all make the filter to be FIR actually - and then they have no practical advantages over conventional FIR realization (in context of "linear-phase response" at least)) What they wrote is just a marketing bla-bla-bla (and they did honestly write they have invented time-machine ) Speaking seriously - their technics should be described as "reduced delay approximately linear-phase FIR filtering" (and not as "time-machine IIR" stuff). [/color]
__________________
Last edited by Max M.; Sep 25, 2008 at 11:40 PM. |
|
|
|
|
|
#7 |
|
h/h member-shmember
Join Date: Dec 2002
Location: Evil Empire
Posts: 2,606
Rep Power: 66 ![]() ![]() ![]() ![]() ![]() ![]() |
yet another two cents:
The described technics is intendent to reduce the delay of the FIR filtering and not to significally reduce the amount of needed memory (the memory limit is actually the thing making the FIR to be quite pointless for kX stuff). You can do the 512 point "linear-phase" FIR with 10K2 - but it makes not too much sense. (too poor EQ eating all resources)
__________________
|
|
|
|
|
|
|
|
HardwareHeaven Senior Member
Join Date: Jan 2004
Location: St. Cloud, MN
Posts: 492
Rep Power: 0 ![]() |
ah; so basically i could get up to 512 taps due to the gpr limitation; I understand how this would cause a problem now
thank you all for your explanations and help in understanding the issue regarding FIR and "time machine IIR" lol... lastly; is there anything to this TIIR? from what i can gather on the net (not much i could understand) a TIIR will feed back for a set amount of time and then be chopped off? hense truncated infinite impulse response
__________________
COMP: Dual Intel PIII 733 Mhz; GeForce 4 Ti 4600; 1.128 Gb RAM; SB0350 (Audigy 2 ZS Platnium) STEREO(I UPGRADED):Crown Audio K1 and K2 amplifiers (4000 watts at .1% THD ), JL 13w7 Subwoofer (6.5 CF) (2) 18" PR's, Klipsch SB-1's, some cement blocks for speaker stands...
|
|
|
|
|
|
#9 |
|
h/h member-shmember
Join Date: Dec 2002
Location: Evil Empire
Posts: 2,606
Rep Power: 66 ![]() ![]() ![]() ![]() ![]() ![]() |
[color=gray]
>is there anything to this TIIR? Well, i used this term as a generic - e.g. whatever "truncated impulse response recursive filtering" - the actual implementation may vary. But as soon as you limited to a certain chunk of signal when doing filtering in reverse (and the size of the chunk actually defines the delay of the filter) you have to cut the tail of the filter response at the same 'chunk size point' hence "TIIR" (though probably if you search for "TIIR" you'll get into JOS paper - which is about a certain implementation actually meant for quite different stuff - well, see also linear phase iir filters | Comp.DSP | DSPRelated.com). I'm not sure if there's any generally adopted name for the techniques yet today - as again actual implementation may vary - it's just you have to cut it and there you're free to do that in whatever best way suitable for your particular task. I've seen a few papers on the subject - but sorry - don't know the links - if you're interested i think you just keep searching for whatever combination of: "IIR", "recursive", "linear phase", "reverse" it could be. Either way, the method itself is efficient only for its amount of arithmetic operations (and number of coefficients) but requires not less memory (or even more) than conventional FIR impl. - e.g. still no use for 10kx. >i could get up to 512 taps due to the gpr limitation my bad, actually we need two registers per a tap - one for coefficient and one for state - e.g. only 256 taps. (though for linear phase filter - which is always symmetric - one coefficient is shared between two taps)[/color]
__________________
Last edited by Max M.; Sep 26, 2008 at 07:04 PM. |
|
|
|
|
|
#10 |
|
DriverHeaven Newbie
Join Date: Jul 2005
Posts: 19
Rep Power: 0 ![]() |
Do the TRAM variables count as GPRs too?
if not you could do something like this: input in output out idelay write iw at 0 idelay read ir1 at 1 idelay read ir2 at 2 ... macs iw,in,0,0 macs 0,accum,ir1,0.1234 macs 0,accum ir2,0.5678 ... macs out,accum,ir[n],0.9012* *the coefficients another way could be to set read adress like: macs &ir,0,0x800**,0x1 macs 0,accum,ir,0.12 macs &ir,0,0x800,0x2 macs out,accum,ir,0.34 **don't know if it was 0x800 for the size of one sample Maybe you could make a 512 tap filter (or 510) this way. Still not HQ but the DSP wasn't really made for such things I think. One method eats up gprs, the other eats up the max commands. |
|
|
|
|
|
#11 |
|
h/h member-shmember
Join Date: Dec 2002
Location: Evil Empire
Posts: 2,606
Rep Power: 66 ![]() ![]() ![]() ![]() ![]() ![]() |
[color=gray]
>Do the TRAM variables count as GPRs too? They don't, but it doesn't help too much as there're only 192 tram access registers (e.g. number of possible tram taps) [/color]
__________________
Last edited by Max M.; Oct 3, 2008 at 04:06 AM. |
|
|
|
![]() |
| Bookmarks |
| Thread Tools | |
|
|