90 degree phase shifter for 60Hz

Started by mehm...@gmail.com July 26, 2010

I’m trying to implement hilbert filter with a narrow ripple and my limited processing power.

TW = 35; % Transition Width 35 Hz
Apass = 0.02; % Passband Ripple (dB) -> variation 0.1%
Fs = 1024; % Sampling Frequency

h = fdesign.hilbert('TW,Ap', TW, Apass, Fs);

Hd = design(h, 'equiripple');

FilterStructure: 'Direct-Form FIR'
Arithmetic: 'double'
Numerator: [1x106 double]
PersistentMemory: false

It needs 106 tabs! Common, I don’t have such a processing power. Let’s try IIR..
Hd = design(h, 'ellip');

Hd FilterStructure: Cascade
Stage(1): Parallel
Stage(1): Cascade Minimum-Multiplier Allpass
Stage(2): Cascade
Stage(1): Direct-Form FIR
Stage(2): Cascade
Stage(2): Scalar
PersistentMemory: false

Hd.Stage(1).Stage(1) FilterStructure: 'Cascade Minimum-Multiplier Allpass'
AllpassCoefficients: Section1: [0 -0.227820626646375]
Section2: [0 -0.890379613912486]
PersistentMemory: false

Hd.Stage(1).Stage(2).Stage(1) FilterStructure: 'Direct-Form FIR'
Arithmetic: 'double'
Numerator: [0 0+i*1]
PersistentMemory: false

Hd.Stage(1).Stage(2).Stage(2).Stage(1) FilterStructure: 'Scalar'
Arithmetic: 'double'
Gain: -1
PersistentMemory: false

Hd.Stage(1).Stage(2).Stage(2).Stage(2) FilterStructure: 'Cascade Minimum-Multiplier Allpass'
AllpassCoefficients: Section1: [0 -0.61509297109775]
PersistentMemory: false

Hd.Stage(2) FilterStructure: 'Scalar'
Arithmetic: 'double'
Gain: 0.5
PersistentMemory: false

It seems very complex but the result is very good for me and Matlab reports it needs only 5 multiplier per sample and 7 adder. I don’t know how I can implement this filter in my MSP430 with C, and there is some complex coefficients that I don’t know about at all. As a result, I’m in doubt if It can be implemented easier than FIR. Can you draw a path me to realize such as filter, what should I do?