# FIR filter phase shifter

Started by May 20, 2005
```I'm trying to generate sets of all-pass FIR filter coefficients to apply
varying degrees of phase shift (say from 0 to pi/2) to filter input
signals.  Can anyone suggest a good way to go about calculating these?
Will it be similar to the derivation of a Hilbert Transform?

Thanks very much,

Jim Singleton

This message was sent using the Comp.DSP web interface on
www.DSPRelated.com
```
```in article b86dnXt-h4OOZBDfRVn-1w@giganews.com, jim_dsp_q at
js_04410@yahoo.com wrote on 05/20/2005 10:49:

> I'm trying to generate sets of all-pass FIR filter coefficients to apply
> varying degrees of phase shift (say from 0 to pi/2) to filter input
> signals.

you want a constant phase shift for all frequencies?  and constant gain?

>  Can anyone suggest a good way to go about calculating these?
> Will it be similar to the derivation of a Hilbert Transform?

i s'pose, if you're willing to put up with a delay factor in the phase
shift, you can sum the output of a Hilbert transformer (or the negative of
it) to the input signal delayed by the same amount your H.T. does.  that
will give you the angle you want, and then you'll have to scale if you want
constant gain for all frequecies.

--

r b-j                  rbj@audioimagination.com

"Imagination is more important than knowledge."

```
```>>you want a constant phase shift for all frequencies?  and constant
gain?

Yes exactly.  I'm trying to impliment selectable phase shifters (i.e. I'll
have coefficients stored for 0 shift, pi/16 shift, pi/8 shift up to pi/2)
for two inputs of an FPGA (for use in stimulating a digital beam former in
another FPGA).  The firmware I was supplied with has 16 tap filters applied
to both inputs, and I thought they would be an easy solution for this
problem.

I first tried taking the fft of two sine waves (one trailing the other by
pi/4), then doing a complex divide to get the impulse response of the
required filter, but the result wasn't very good at all, so I started
looking into the derivation of the Hilbert transform and trying to make it
work for pi/4 instead of pi/2.  My background isn't that strong in this
though and I haven't gotten it to work.

>>i s'pose, if you're willing to put up with a delay
>>factor in the phase shift, you can sum the output of
>>a Hilbert transformer (or the negative of it) to the
>>input signal delayed by the same amount your H.T.
>>does. that will give you the angle you want, and
>>then you'll have to scale if you want constant gain
>>for all frequecies.

So you don't think I can do this with just the simple FIRs?

This message was sent using the Comp.DSP web interface on
www.DSPRelated.com
```
```jim_dsp_q wrote:
> I'm trying to generate sets of all-pass FIR filter coefficients to apply
> varying degrees of phase shift (say from 0 to pi/2) to filter input
> signals.  Can anyone suggest a good way to go about calculating these?
> Will it be similar to the derivation of a Hilbert Transform?
>
> Thanks very much,
>
> Jim Singleton
>
>
>
> This message was sent using the Comp.DSP web interface on
> www.DSPRelated.com

You'll need a Hilbert transformer with the bandwidth you want. Assuming
that you use an odd number of taps and your tap weights are adjusted to
give unity gain, the sum of the filter output and the output from the
middle tap will give 45 degrees phase shift and a gain of sqrt(2). With
both the original signal and one shifted by 90 degrees, you can get any
phase you want by linear addition and scaling. Consider the Scott T
transformer: It converts between 2-phase and 3-phase power.

There may be a cleverer way, but I kinda doubt it.

Jerry
--
Engineering is the art of making what you want from things you can get.
&#2013266095;&#2013266095;&#2013266095;&#2013266095;&#2013266095;&#2013266095;&#2013266095;&#2013266095;&#2013266095;&#2013266095;&#2013266095;&#2013266095;&#2013266095;&#2013266095;&#2013266095;&#2013266095;&#2013266095;&#2013266095;&#2013266095;&#2013266095;&#2013266095;&#2013266095;&#2013266095;&#2013266095;&#2013266095;&#2013266095;&#2013266095;&#2013266095;&#2013266095;&#2013266095;&#2013266095;&#2013266095;&#2013266095;&#2013266095;&#2013266095;&#2013266095;&#2013266095;&#2013266095;&#2013266095;&#2013266095;&#2013266095;&#2013266095;&#2013266095;&#2013266095;&#2013266095;&#2013266095;&#2013266095;&#2013266095;&#2013266095;&#2013266095;&#2013266095;&#2013266095;&#2013266095;&#2013266095;&#2013266095;&#2013266095;&#2013266095;&#2013266095;&#2013266095;&#2013266095;&#2013266095;&#2013266095;&#2013266095;&#2013266095;&#2013266095;&#2013266095;&#2013266095;&#2013266095;&#2013266095;&#2013266095;&#2013266095;
```