DSPRelated.com
Forums

Alternatives to Hilbert transformers

Started by Alberto November 26, 2003
If this has been already asked or discussed before, please bear with
me.

I understand that, when you have the I and Q components of a signal at
baseband, you can select the positive and negative frequencies by
using a Hilbert transformer on one leg and a delay on the other. So
far so good.

But I have also read hints here and there that this is just a textbook
approach, and that the optimal solution would be to use a complex
filter on the complex signal I+jQ.

My questions :

1) Is this complex filter just a shifter of PI/4 for I and -PI/4 for Q
(or viceversa), or is it something different ?

2) Any tools (Matlab?) or references to compute the coefficients of
such a filter ?

TIA

Alberto (writing a pgm for a Software Defined Radio)
Hi Alberto,

"Alberto" <adibene@yahoo.com> wrote in message
news:e9aa0d73.0311261557.1944ab6f@posting.google.com...
> I understand that, when you have the I and Q components of a signal at > baseband, you can select the positive and negative frequencies by > using a Hilbert transformer on one leg and a delay on the other. So > far so good.
The problem with this approach is that a real Hilbert transformer is infinitely long, so you need to use a short approximation. Those approximations have various shortcomings and generally don't give you the best possible performance for a given CPU load.
> But I have also read hints here and there that this is just a textbook > approach, and that the optimal solution would be to use a complex > filter on the complex signal I+jQ.
The common approach works like this: 1) Design a real half-band low-pass using remez() or some other method. 2) Phasor-modulate it up and down by pi/4 to produce two new complex filters that select the positive and negative frequencies respectively. These filters will have complex conjugate coefficients. 3) Turn the two complex filters into two real filters. One is the real part of the sum of the complex filters and the other is the imaginary part of the difference. These resulting real filters are a Hilbert transform pair and have lots of zeros that save you CPU and memory. You use them in place of the delay and Hilbert transformer in your original approach.
"Matt Timmermans" <mt0000@sympatico.nospam-remove.ca> wrote in message news:<y7dxb.14240$Eq1.1344947@news20.bellglobal.com>...
> The common approach works like this: > > 1) Design a real half-band low-pass using remez() or some other method. > > 2) Phasor-modulate it up and down by pi/4 to produce two new complex filters > that select the positive and negative frequencies respectively. These > filters will have complex conjugate coefficients. > > 3) Turn the two complex filters into two real filters. One is the real part > of the sum of the complex filters and the other is the imaginary part of the > difference. >
Matt, thanks. In the meantime I came across a couple of pages in the Frerking book where he describes something that resembles your proposal. Am I correct in saying this, or the two approaches are different ? Any caveats to watch for ? I will be using doubles and C language. Do you have any rule of thumb for the length of the filter ? My goal is to suppress the negative portion by at least 60dB, at 48kHz sampling rate. TIA Alberto
Hi Alberto,

I don't have the Frerking book at hand, so I can't speak to it.  (And if I
did have it at hand, I wouldn't look very hard, because you neglected to
provide a page or section reference ;-).

You can use matlab's remezord function to guess the appropriate order for
your filter based on your constraints, which will include more than just the
stopband attenuation.  In particular, don't forget that you can reduce the
required order if you can accept a wider transition region.

There is nothing too spooky to watch out for, as long as you remember that
your final passbands will be centered at pi/4 and -pi/4, not 0.  So be sure
to take that into account when you mix your signal down to "baseband".

"Alberto" <adibene@yahoo.com> wrote in message
news:e9aa0d73.0311270748.6c2f6a70@posting.google.com...
> "Matt Timmermans" <mt0000@sympatico.nospam-remove.ca> wrote in message
news:<y7dxb.14240$Eq1.1344947@news20.bellglobal.com>...
> > The common approach works like this: > > > > 1) Design a real half-band low-pass using remez() or some other method. > > > > 2) Phasor-modulate it up and down by pi/4 to produce two new complex
filters
> > that select the positive and negative frequencies respectively. These > > filters will have complex conjugate coefficients. > > > > 3) Turn the two complex filters into two real filters. One is the real
part
> > of the sum of the complex filters and the other is the imaginary part of
the
> > difference. > > > Matt, > thanks. In the meantime I came across a couple of pages in the > Frerking book where he describes something that resembles your > proposal. Am I correct in saying this, or the two approaches are > different ? Any caveats to watch for ? I will be using doubles and C > language. Do you have any rule of thumb for the length of the filter ? > My goal is to suppress the negative portion by at least 60dB, at 48kHz > sampling rate. > > TIA > Alberto
On Thu, 26 Nov 2003, Alberto wrote:

> I understand that, when you have the I and Q components of a signal at > baseband, you can select the positive and negative frequencies by > using a Hilbert transformer on one leg and a delay on the other. So > far so good. > > But I have also read hints here and there that this is just a textbook > approach, and that the optimal solution would be to use a complex > filter on the complex signal I+jQ.
Here is explained an efficient IIR Hilbert pair structure: http://www.iki.fi/~o/dsp/hilbert However, it remains unclear (to me) how to calculate the coefficients for any specification. That might be a turn-off for you - the cofficients used in the example only give an attenuation of -44 dB. -olli
"Matt Timmermans" <mt0000@sympatico.nospam-remove.ca> wrote in message
news:fmyxb.16272$Eq1.1691627@news20.bellglobal.com...
> There is nothing too spooky to watch out for, as long as you remember that > your final passbands will be centered at pi/4 and -pi/4, not 0. So be
sure
> to take that into account when you mix your signal down to "baseband".
That's +/- pi/2, of course

Alberto wrote:

> If this has been already asked or discussed before, please bear with > me. > > I understand that, when you have the I and Q components of a signal at > baseband, you can select the positive and negative frequencies by > using a Hilbert transformer on one leg and a delay on the other. So > far so good. > > But I have also read hints here and there that this is just a textbook > approach, and that the optimal solution would be to use a complex > filter on the complex signal I+jQ. > > My questions : > > 1) Is this complex filter just a shifter of PI/4 for I and -PI/4 for Q > (or viceversa), or is it something different ? > > 2) Any tools (Matlab?) or references to compute the coefficients of > such a filter ? > > TIA > > Alberto (writing a pgm for a Software Defined Radio)
I always wind my own... Tom
Olli Niemitalo <o@iki.fi> wrote in message news:<Pine.GSO.4.58.0311281337420.18449@paju.oulu.fi>...
> > Here is explained an efficient IIR Hilbert pair structure: > > http://www.iki.fi/~o/dsp/hilbert > > However, it remains unclear (to me) how to calculate the coefficients for > any specification. That might be a turn-off for you - the cofficients used > in the example only give an attenuation of -44 dB. >
Olli and Matt, thanks again for your inputs, I think I have now enough food for thought to go on. BTW, when referring to the Frerking's book, I meant page 170, under the heading "Complex FIR Filters" (it is on page 170 at least in my UK edition, don't know for the US one). Alberto
On 26 Nov 2003 15:57:32 -0800, adibene@yahoo.com (Alberto) wrote:

>But I have also read hints here and there that this is just a textbook >approach, and that the optimal solution would be to use a complex >filter on the complex signal I+jQ.
Maybe I'm wrong at understanding you. In text book, the Hilbert transform filter is h[t] = 1/Pi*t, so I don't take into account where it is related to Complex notation unless you are considering of H[f] = j*Sgn[f]? -- Best regards, James K. (txdiversity@hotmail.com) - Any remarks, proposal and/or indicator to text would be greatly respected. - Private opinions: These are not the opinions from my affiliation. [HOME] http://home.naver.com/txdiversity