FIR-bandpass and Hilbert-flter in one?

Guest #4147477
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.
Guest #4148223
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.
Guest #4149218
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
Guest #6842310
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.
Guest #6846284
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.
Guest #7186159
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

Please log in before posting.

or

Log in with Google account

Registration is free and takes only a minute.

Register now