EmbDev.net

Forum: DSP FIR-bandpass and Hilbert-flter in one?


von W.S. (Guest)


Rate this post
useful
not useful
hallo together,

today I have a little question: Is it possible to turn a common 
FIR-bandpass into a bandpass with 90 degree phase shift? And if 
possible, how to do?

My usual procedure:
1. make a lowpass for the lower frequency edge (sin(x)/x * Blackmann)
2. make a second lowpass for the upper frequency edge (also sin(x)/x * 
Blackmann)
3. normalize both lowpasses
4. turn the second lowpass per spektral inversion to a highpass
5. add both passes, this makes a band reject pass
6. turn it into a band pass by spektral inversion

This makes all the taps for a decent FIR-bandpass, it works fine for 
even as well as for odd tap numbers, but without any phase shift.

The output is limited to the desired frequency span as requested, so I 
hope it should be possible to add a 90 degree phase shift to it (a la 
Hilbert)

A decent testbench for the a.m. filter I already have written for 
myself, but not yet for a added Hilbert transformation.

so, has anyone a nice idea for this?

kind regards
W.S.

von Wolfgang Kiefer (Guest)


Rate this post
useful
not useful
Iowa Hills Hilbert Filter Designer Ver 2.3 (free)

I hope, this helps.

von W.S. (Guest)


Rate this post
useful
not useful
Sorry, no.
I already know the apps from IOWA.
My intention is rather, to be able to calculate the taps at runtime in 
the device. So I need the algorithm raher than the output of a IOWA 
filter app.

thanks and
kind regards
W.S.

von derguteweka (Guest)


Rate this post
useful
not useful
Moin,

Maybe this recipe works out for you:

All frequencies between 0..1(=Fsample/2)

Lower Band edge: Fa
Upper Band edge: Fb

Calculate:
 Fshift=(Fa+Fb)/2
 Flp=(Fb-Fa)/2

Design Lowpass filter with Flp as usual. Index of its coefficents goes 
from -k...0...+k.
For the Quadrature-BP: Multiply each of its coefficients by 
sin(pi*k*Fshift) (for the Inphase-BP: Multiply with cos(pi*k*Fshift))

Gruss
WK

von Christoph Kessler (Guest)


Rate this post
useful
not useful
Octave has an open remez algorithm for hilpert FIR
http://octave.sourceforge.net/signal/function/remez.html

von W.S. (Guest)


Rate this post
useful
not useful
derguteweka wrote:
> Maybe this recipe..

thanks a lot, I will try.

kind regards
W.S.

von W.S. (Guest)


Rate this post
useful
not useful
Carlton F. wrote in post #6841692:
> Iowa Hills Hilbert Filter Designer

I DO know this app. But: meanwhile I found the solution myself.

Just for your interest:
1. calculate a usual band pass (as I already described) using sin(x)/x - 
this gives you a mirror symmetric filter kernel, which does not alter 
the phase. Let us call the result Y[0..M-1]
2. calculate the same band pass using (1-cos(x))/x instead of sin(x)/x - 
this gives you a point symmetric filter kernel, which shifts the phase 
and makes a 90 degree phase shift. Let us call the result Z[0..M-1]
3. assume, each tap is a point in the Y,Z lane. Now you can turn this 
point for a angle of your desire according to the known CORDIC 
procedure. This gives you (in the Y array) the final kernel with a phase 
shift of your choice. The new values in the Z array are not used.

W.S.

von Tobi (Guest)


Rate this post
useful
not useful
but you did not really take all of this 6 years to find the solution, 
did you?

I wonder which is the application which require this function?

von -gb- (Guest)


Rate this post
useful
not useful
Carlton F. wrote in post #6841692:
> Iowa Hills Hilbert Filter Designer, hope it will help

It was just SPAM that and pushed the thread.

von W.S. (Guest)


Rate this post
useful
not useful
Tobi wrote:
> I wonder which is the application which require this function?

When you want to receive SSB transmissions, you need to suppress the 
unwanted side band. For this you can use a narrow quartz filter if you 
design a analog receiver - but designing a digital receiver you need to 
use a I/Q mixer and apply to one of the resulting data streams a 
additional 90 degree phase shift - or apply a phase shift of +45 degree 
to one stream and a phase shift of -45 degree to the other stream (this 
is in short called the phase methode). But it is rather uncomfortable 
and a waste of clock cycles to apply a straight delay to one stream and 
a 90 degree Hilbert transformation to the other stream, so I decided to 
combine the band pass filtering and the phase shift to avoid wasting 
precious clock cycles.
That's it.

W.S.

von Anaka (Guest)


Rate this post
useful
not useful
Band stop filter has two pass-bands and separated by a small frequency 
called notch frequency where it has zero output.

von W.S. (Guest)


Rate this post
useful
not useful
The problem is solved. Looking back I see, that the solution is easy. 
Simply calculate a complex filter, the real component is 
mirror-symmeteric and the imaginary component is point-symmetric and 
then rotate it using CORDIC or similar. So every phase shift is 
possible.

So this thread may be closed.

W.S.

Reply

Entering an e-mail address is optional. If you want to receive reply notifications by e-mail, please log in.

Rules — please read before posting

  • Post long source code as attachment, not in the text
  • Posting advertisements is forbidden.

Formatting options

  • [c]C code[/c]
  • [code]code in other languages, ASCII drawings[/code]
  • [math]formula (LaTeX syntax)[/math]




Bild automatisch verkleinern, falls nötig
Note: the original post is older than 6 months. Please don't ask any new questions in this thread, but start a new one.