From: Mehmet Fide on
Hi,

I’m trying to implement Hilbert transformer 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');

Hhilb =

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 by using 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?

Thanks.