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.
Iowa Hills Hilbert Filter Designer Ver 2.3 (free) I hope, this helps.
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.
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
Octave has an open remez algorithm for hilpert FIR http://octave.sourceforge.net/signal/function/remez.html
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.
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?
Carlton F. wrote in post #6841692:
> Iowa Hills Hilbert Filter Designer, hope it will help
It was just SPAM that and pushed the thread.
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.