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.

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