Page 1 of 4

Hilbert Shifter

PostPosted: Wed Dec 24, 2014 7:53 am
by martinvicanek
A Hilbert shifter creates two signals with a relative phase shift of 90 degrees for all Fourier components in the audible range. It can be used for e.g. single-sided modulation or frequency shifting. As opposed to pitch shifting, frequency shifting alters harmonic overtones so the result may not always sound musical. :mrgreen:

This Hilbert shifter is based on Tronic's coefficients calculator. 8-) It is rather high quality: covered range is from 30 Hz to 22 kHz (at 44k sample rate), sideband suppression is around 90 dB. However, the implementation is optimised so the CPU load is not at all critical.

Merry Christmas!
MV

Re: Hilbert Shifter

PostPosted: Wed Dec 24, 2014 8:17 am
by MyCo
Dammit, crashs 3.0.7 immediately.

EDIT: Not related to 3.0.7, happens in 3.0.6 as well

Re: Hilbert Shifter

PostPosted: Wed Dec 24, 2014 8:33 am
by steph_tsf
I'm on Win7 now.
I faced the same instant crash when double clicking the .fsm.
There is no crash when opening Flowstone, then "File" then "Open".
Nice piece of art, indeed.
What kind of instructions are : fld a00[0]; fstp a1[0]; fld a01[0]; fstp a1[1];

Say I build an envelope detector using the sqrt(sin^2 + cos^2) identity.
Will I get a proper result, knowing that both sides (odd and even) get phase-shifted, hence time-domain modified?

many thanks,
and happy Christmas,
Steph

Re: Hilbert Shifter

PostPosted: Wed Dec 24, 2014 9:04 am
by Tronic
THX...

Re: Hilbert Shifter

PostPosted: Wed Dec 24, 2014 9:06 am
by MyCo
Weird, as Steph wrote, loading it from within FS doesn't crash.

What kind of instructions are : fld a00[0]; fstp a1[0]; fld a01[0]; fstp a1[1];


fld x[y] loads a float value from x (sse channel y) on a stack
fstp x[y] stores the latest stack value into x (sse channel y) and removes it from stack

Re: Hilbert Shifter

PostPosted: Wed Dec 24, 2014 12:16 pm
by martinvicanek
Ouch, that's bad. No problems here, though. :? I am still with FS 3.0.3. No backward cpmpatibility? :(
P.S. I had forgotten to eliminate denormals in the original schematic. :oops: Fixed now.

Re: Hilbert Shifter

PostPosted: Wed Dec 24, 2014 12:42 pm
by KG_is_back
Is it possible to create an allpass filter with 90° phase shift form the original signal?
I know Nyquist and DC components can't get phase shifted, but perhaps if the filter was also HLP/LPF to remove these elements. It would be very useful in phase-alignment tools (making 0-360° phase shifter).

Re: Hilbert Shifter

PostPosted: Wed Dec 24, 2014 1:03 pm
by martinvicanek
KG_is_back wrote:90° phase shift form the original signal
Yes, you can do that with a FIR filter, however at the cost of more latency and much more CPU load.

Re: Hilbert Shifter

PostPosted: Wed Dec 24, 2014 2:45 pm
by tester
Confirming. DbClick on schematic - crashes Flowstone. Opening schematic from within Flowstone - opens it normally. Some initialization problem was probably introduced in FS. Sent to Malc.

Re: Hilbert Shifter

PostPosted: Sun Dec 28, 2014 11:46 pm
by cbbuntz
Are you using the same filter structure that Olli Niemitalo used? I tried plugging the coefficients into an existing allpasses and it didn't work. I'm having trouble deciphering the code.

The performance is very impressive.