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

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.

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

I hope, this helps.

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.

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

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

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

thanks a lot, I will try.

kind regards
W.S.

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.

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.

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?

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.

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.

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.

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.