Reply by Bhaskar Thiagarajan December 14, 20042004-12-14
"Rick Lyons" <r.lyons@_BOGUS_ieee.org> wrote in message
news:41bedb73.165789484@news.sf.sbcglobal.net...
> (snipped) > >> > Yesterday I bought Bhaskar a bottle of pilsner > beer (brewed in Holland) named "Mariner". > Because Bhaskar never did show up at my place, > I ended up having to drink his beer myself. > Today I will buy you a 16-ounce can of Henninger > beer (brewed in Stuttgart Germany). Upon returning > home I will wait one hour, and if you don't > arrive to claim your beer I'll be forced to drink > it as well. :-)
Didn't you know that I prefer Ales over Pilsners?? That's why I didn't show up. BTW, I'm glad my explanation made reasonable sense. Cheers Bhaskar
Reply by David Kirkland December 14, 20042004-12-14
Rick Lyons wrote:
> On Mon, 13 Dec 2004 11:32:44 -0500, David Kirkland <spam@netscape.net> > wrote: > > >>Rick Lyons wrote: >> >>>On Wed, 8 Dec 2004 16:04:28 -0800, "Bhaskar Thiagarajan" >>><bhaskart@my-deja.com> wrote: >>> > > (snipped) > > > >>>>If you see the diagram, >>>>one branch uses x(n+1) and the other branch uses x(n). >>>>My method was to apply a z^-1 to both branches. This would result in x(n) >>>>for the top branch and x(n-1) for the bottom branch. In the end, I think it >>>>is important to preserve the fact that the top branch leads the bottom by 1 >>>>unit of delay. >>> >>> >>>Yes Yes Yes! >>>Darn, ... as you say I was focusing in on only >>>part of the system instead of looking at the >>>whole system. >>> > > (snipped) > >>>Good job Bhaskar! That's *another* beer I owe you! >>>(I hope you're keeping track.) >>> >>> >>> >>>>Cheers >>>>Bhaskar >>> >>> >>>Thanks, ... I won't make this mistake again! >>>[-Rick-] >>> >> >>Rick, >> >>I can't say for sure why it's done that way, but from what I've seen in >>similar areas: > > > > Hi David, > > >>Due to symmetry, the math is often easier to follow using time advances. >>In other words when deriving the equations it is easier to keep track of >>what it going on. An example might be something like a filter of Length >>N. If you're interested in the middle element (predict/smoothing) it is >>easier to keep track of it as element 0 , rather than N/2 (N even). > > > Yes, yes. > Here's an example of an "advanced time" scenario. > If we define some H(m) discrete sequence of desired frequency > response values for a filter we're designing, we can > obtain the h(n) time-domain impulse response samples by > taking the DFT of H(m). If we do so, the center > h(n) sample has an "n" time index value of n = 0. > > That h(n) impulse response would then be a noncausal > (zero phase shift) filter which we cannot implement. > If we redefine the h(n) index so that the first sample > is h(0), now we can implement the filter (it's now > causal) but the filter has a time delay of (N-1)/2 samples. > > The above paragraph is what I think about anytime someone > asks, "Why is the delay through an N-tap FIR filter equal to > (N-1)/2 instead of N?" > > >>Other places you might run into similar problems are with foward / >>backward prediction. Backward prediction seems like an odd thing to do, >>but because of symmetry the combination of forward/backward prediction >>produces some very nice results. This often leads to lattice or wave >>filter construction. >> >> >>BTW - how about a beer for the guy that first responded to your post :) > > > Ha. The 1st time I read your 1st response, > your idea didn't sink into my head. > After reading your 1st response again, I now > see just how really sensible it was. > > Thanks David, and yes I'm formally adding your > name to the list of guys whom I owe an adult > beverage. > > Yesterday I bought Bhaskar a bottle of pilsner > beer (brewed in Holland) named "Mariner". > Because Bhaskar never did show up at my place, > I ended up having to drink his beer myself. > Today I will buy you a 16-ounce can of Henninger > beer (brewed in Stuttgart Germany). Upon returning > home I will wait one hour, and if you don't > arrive to claim your beer I'll be forced to drink > it as well. :-) > > >>Cheers, >>David > > > Cheers to you & Thanks again, > [-Rick-] > >
Rick, sorry the first post wasn't as helpful as I would have hoped :(. I admire your taste in beer - although you'd better hope you don't get too much help from this forum :) Cheers, Dave
Reply by Rick Lyons December 14, 20042004-12-14
On Mon, 13 Dec 2004 11:32:44 -0500, David Kirkland <spam@netscape.net>
wrote:

>Rick Lyons wrote: >> On Wed, 8 Dec 2004 16:04:28 -0800, "Bhaskar Thiagarajan" >> <bhaskart@my-deja.com> wrote: >>
(snipped)
>>>If you see the diagram, >>>one branch uses x(n+1) and the other branch uses x(n). >>>My method was to apply a z^-1 to both branches. This would result in x(n) >>>for the top branch and x(n-1) for the bottom branch. In the end, I think it >>>is important to preserve the fact that the top branch leads the bottom by 1 >>>unit of delay. >> >> >> Yes Yes Yes! >> Darn, ... as you say I was focusing in on only >> part of the system instead of looking at the >> whole system. >>
(snipped)
>> >> Good job Bhaskar! That's *another* beer I owe you! >> (I hope you're keeping track.) >> >> >>>Cheers >>>Bhaskar >> >> >> Thanks, ... I won't make this mistake again! >> [-Rick-] >> >Rick, > >I can't say for sure why it's done that way, but from what I've seen in >similar areas:
Hi David,
>Due to symmetry, the math is often easier to follow using time advances. >In other words when deriving the equations it is easier to keep track of >what it going on. An example might be something like a filter of Length >N. If you're interested in the middle element (predict/smoothing) it is >easier to keep track of it as element 0 , rather than N/2 (N even).
Yes, yes. Here's an example of an "advanced time" scenario. If we define some H(m) discrete sequence of desired frequency response values for a filter we're designing, we can obtain the h(n) time-domain impulse response samples by taking the DFT of H(m). If we do so, the center h(n) sample has an "n" time index value of n = 0. That h(n) impulse response would then be a noncausal (zero phase shift) filter which we cannot implement. If we redefine the h(n) index so that the first sample is h(0), now we can implement the filter (it's now causal) but the filter has a time delay of (N-1)/2 samples. The above paragraph is what I think about anytime someone asks, "Why is the delay through an N-tap FIR filter equal to (N-1)/2 instead of N?"
>Other places you might run into similar problems are with foward / >backward prediction. Backward prediction seems like an odd thing to do, >but because of symmetry the combination of forward/backward prediction >produces some very nice results. This often leads to lattice or wave >filter construction. > > >BTW - how about a beer for the guy that first responded to your post :)
Ha. The 1st time I read your 1st response, your idea didn't sink into my head. After reading your 1st response again, I now see just how really sensible it was. Thanks David, and yes I'm formally adding your name to the list of guys whom I owe an adult beverage. Yesterday I bought Bhaskar a bottle of pilsner beer (brewed in Holland) named "Mariner". Because Bhaskar never did show up at my place, I ended up having to drink his beer myself. Today I will buy you a 16-ounce can of Henninger beer (brewed in Stuttgart Germany). Upon returning home I will wait one hour, and if you don't arrive to claim your beer I'll be forced to drink it as well. :-)
>Cheers, >David
Cheers to you & Thanks again, [-Rick-]
Reply by David Kirkland December 13, 20042004-12-13
Rick Lyons wrote:
> On Wed, 8 Dec 2004 16:04:28 -0800, "Bhaskar Thiagarajan" > <bhaskart@my-deja.com> wrote: > > > (snipped) > > >>Hi Rick > > > Hi Bhaskar, > > I haven't been ignoring you, > I've just been pretty busy. > > (snipped) > >>If you see the diagram, >>one branch uses x(n+1) and the other branch uses x(n). >>My method was to apply a z^-1 to both branches. This would result in x(n) >>for the top branch and x(n-1) for the bottom branch. In the end, I think it >>is important to preserve the fact that the top branch leads the bottom by 1 >>unit of delay. > > > Yes Yes Yes! > Darn, ... as you say I was focusing in on only > part of the system instead of looking at the > whole system. > > I wonder why neither Vaidyanathan nor C.-C Hsiao > explained this issue (to guys like me) as > well as you just did. > > >>I'd be glad to answer more questions if you have any - not that I can >>promise I'll have answers but I'll certainly try. > > > Good job Bhaskar! That's *another* beer I owe you! > (I hope you're keeping track.) > > >>Cheers >>Bhaskar > > > Thanks, ... I won't make this mistake again! > [-Rick-] >
Rick, I can't say for sure why it's done that way, but from what I've seen in similar areas: Due to symmetry, the math is often easier to follow using time advances. In other words when deriving the equations it is easier to keep track of what it going on. An example might be something like a filter of Length N. If you're interested in the middle element (predict/smoothing) it is easier to keep track of it as element 0 , rather than N/2 (N even). Other places you might run into similar problems are with foward / backward prediction. Backward prediction seems like an odd thing to do, but because of symmetry the combination of forward/backward prediction produces some very nice results. This often leads to lattice or wave filter construction. BTW - how about a beer for the guy that first responded to your post :) Cheers, David
Reply by Peter K. December 12, 20042004-12-12
Rick wrote:

] Good job Bhaskar! That's *another* beer I owe you!
] (I hope you're keeping track.)
(-: If he's not, Google will. :-)

Ciao,

Peter K.

Reply by Rick Lyons December 12, 20042004-12-12
On Wed, 8 Dec 2004 16:04:28 -0800, "Bhaskar Thiagarajan"
<bhaskart@my-deja.com> wrote:


  (snipped)

>Hi Rick
Hi Bhaskar, I haven't been ignoring you, I've just been pretty busy. (snipped)
> >If you see the diagram, >one branch uses x(n+1) and the other branch uses x(n). >My method was to apply a z^-1 to both branches. This would result in x(n) >for the top branch and x(n-1) for the bottom branch. In the end, I think it >is important to preserve the fact that the top branch leads the bottom by 1 >unit of delay.
Yes Yes Yes! Darn, ... as you say I was focusing in on only part of the system instead of looking at the whole system. I wonder why neither Vaidyanathan nor C.-C Hsiao explained this issue (to guys like me) as well as you just did.
>I'd be glad to answer more questions if you have any - not that I can >promise I'll have answers but I'll certainly try.
Good job Bhaskar! That's *another* beer I owe you! (I hope you're keeping track.)
>Cheers >Bhaskar
Thanks, ... I won't make this mistake again! [-Rick-]
Reply by Bhaskar Thiagarajan December 8, 20042004-12-08
"Rick Lyons" <r.lyons@_BOGUS_ieee.org> wrote in message
news:41b78cd4.399900843@news.sf.sbcglobal.net...
> On Mon, 6 Dec 2004 09:23:22 -0800, "Bhaskar Thiagarajan" > <bhaskart@my-deja.com> wrote: > > (snipped) > > > >I've had the same problem when I've used his text to solve some polyphase > >decomposition problems. > >The way I dealt with it was to add a fixed delay equal to the largest > >positive power of z at the input. This would give me a z^0 and several
z^-ve
> >values (depending on my resampling ratios). So I then implemented them as > >delays and jumped around the time advance that his text suggests. > >It seemed to make sense to me and the fact that my design worked made me > >feel a little better about it. > > > >Hope this helps. > > > >Cheers > >Bhaskar > > Hi Bhaskar, > > it sounds like you solved this problem. > Sorry to be so "thick-skulled", but can you answer a > couple of questions for me? > > Looking at the following block diagram, how can I add > delays so that sample x(n+1) is available to me > at time instant n? > > > ??? Delay Delay > > |----| |-----| |-----| > x(n)-->| z |--*-->| 1/z |--*-->| 1/z |--> a(n) > |----| | |-----| | |-----| > | | > | |------------> b(n) > | > |-------------------------> x(n+1) > > > Can you tell me what your term "z^-ve" means?
Hi Rick Sorry, I shouldn't have assumed that "z^-ve value" would read as "z raised to negative values"...anyways, that's what I meant. In your diagram, you have taken one segment of the diagram from the book - I'm not sure how I can help solve just this one section without using the other half. If you see the diagram, one branch uses x(n+1) and the other branch uses x(n). My method was to apply a z^-1 to both branches. This would result in x(n) for the top branch and x(n-1) for the bottom branch. In the end, I think it is important to preserve the fact that the top branch leads the bottom by 1 unit of delay. I'd be glad to answer more questions if you have any - not that I can promise I'll have answers but I'll certainly try. Cheers Bhaskar
> > I'd sure like to figure this out. > Thanks Bhaskar, > [-Rick-]
Reply by Rick Lyons December 8, 20042004-12-08
On Mon, 6 Dec 2004 09:23:22 -0800, "Bhaskar Thiagarajan"
<bhaskart@my-deja.com> wrote:

  (snipped)
> >I've had the same problem when I've used his text to solve some polyphase >decomposition problems. >The way I dealt with it was to add a fixed delay equal to the largest >positive power of z at the input. This would give me a z^0 and several z^-ve >values (depending on my resampling ratios). So I then implemented them as >delays and jumped around the time advance that his text suggests. >It seemed to make sense to me and the fact that my design worked made me >feel a little better about it. > >Hope this helps. > >Cheers >Bhaskar
Hi Bhaskar, it sounds like you solved this problem. Sorry to be so "thick-skulled", but can you answer a couple of questions for me? Looking at the following block diagram, how can I add delays so that sample x(n+1) is available to me at time instant n? ??? Delay Delay |----| |-----| |-----| x(n)-->| z |--*-->| 1/z |--*-->| 1/z |--> a(n) |----| | |-----| | |-----| | | | |------------> b(n) | |-------------------------> x(n+1) Can you tell me what your term "z^-ve" means? I'd sure like to figure this out. Thanks Bhaskar, [-Rick-]
Reply by Rick Lyons December 8, 20042004-12-08
On Mon, 6 Dec 2004 12:55:30 -0500, "Jaime Andr&#4294967295;s Aranguren Cardona"
<jaac@nospam.sanjaac.com> wrote:

>Hi Rick, > >It seems that many of us have got into the trouble of the "non-causality" >created by that z^(+1) in Vaidyanathan's book. > >Just to complement whay Bhaskar wrote, have a look at this thread in >comp.dsp archives http://tinyurl.com/668qw I hope this helps in clarifying, >as it did for me. > >Regards, > >-- >Jaime Andr&#4294967295;s Aranguren Cardona
Hello Jaime, thanks, I'll take a look at that thread. [-Rick-]
Reply by December 6, 20042004-12-06
Hi Rick,

It seems that many of us have got into the trouble of the "non-causality"
created by that z^(+1) in Vaidyanathan's book.

Just to complement whay Bhaskar wrote, have a look at this thread in
comp.dsp archives http://tinyurl.com/668qw I hope this helps in clarifying,
as it did for me.

Regards,

--
Jaime Andr&#4294967295;s Aranguren Cardona
jaac@nospam.sanjaac.com
SanJaaC Electronics
Soluciones en DSP
www.sanjaac.com

(Remove "nospam" from e-mail address)

"Rick Lyons" <r.lyons@_BOGUS_ieee.org> escribi&#4294967295; en el mensaje
news:41b470cc.196117296@news.sf.sbcglobal.net...
> > Hello Earthlings, > > I recently ran across some material in > Vaidyanathan's "Multirate Systems and Filter Banks" > DSP book that discusses a way to improve the > computational efficiency of polyphase filters > used in non-integer decimation applications. > > Vaidyanathan's description (starting on page 128, > and derived from a 1987 conference paper by > C.-C Hsiao) sounds interesting except for one > tiny little thing. To implement this "nice trick, > as Vaidyanathan calls it, we have to implement the > inverse of a delay. What I mean by that is: > if a single-sample delay is represented by > z^(-1), 1/z, Vaidyanathan shows an element in > his Figure 4.3-8 block diagrams represented by > a "z" (z to the plus one power)!!! > > It looks something like: > > ??? Delay Delay > > |----| |-----| |-----| > x(n)-->| z |--*-->| 1/z |--*-->| 1/z |--> a(n) > |----| | |-----| | |-----| > | | > | |------------> b(n) > | > |-------------------------> c(n) > > I've read his description just about as thoroughly > as I can, but I still can't figure out how we can > implement that initial "time advance by one sample" > operation shown above. > I took a look at the original Hsaio conference paper, > but found no discernable explanation for that > troubesome "z" operation. I even went through > Stephan Hawking's "A Brief History of Time" book > to see if there was some way to travel into the > future to obtain future time samples. I had no luck > reading either Hsaio's or Hawking's material. > > Can the decimation scheme in Vaidyanathan's > Figure 4.3-8 block diagrams actually work in our > universe? :-) > > Gosh, ... I know I'm making some sort of silly mistake > here, but I'm darned if I can figure what it is? > > Hey wait a second. After typing this post it just > occurred to me that maybe this "nice trick" can only > be used "offline", the situation where all the x(n) > time samples are available before the decimation > process begins. However, neither Vaidyanathan nor > Hsaio mentioned (as far as I know) an "offline only" > restriction for their decimation filters. > > Anyway, I'd sure appreciate it if one of you guys could > straighten me out. > > Thanks Guys, > [-Rick-] >