discuss-gnuradio
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: Complex in/Complex out Hilbert?


From: Michael Carosino
Subject: Re: Complex in/Complex out Hilbert?
Date: Sun, 19 Apr 2020 11:21:15 -0700

The Hilbert block in gnuradio is specifically for taking a real input and creating it's analytic signal. As noted above, this means the output is complex with real(out) = delayed(in), imag(out) = hilbert_filtered(in). This is the same as how it is implemented in MATLAB, e.g.  https://www.mathworks.com/help/signal/ug/hilbert-transform.html 

If you only want the input filtered by the hilbert filter, keep only the imaginary output of the block.( You could also design your own hilbert filter taps and then use them in a FIR filter block).

I suggest taking a look here http://www.panoradio-sdr.de/ssb-demodulation/ The SSB phasing demodulator is in fact exactly what liquid-dsp's ssb demod does. I'm not sure it should really be called a "complex hilbert transform", but here I've implemented it in a simple gnuradio flowgraph (assuming the left hand side is coming from e.g. an N310 where we've already performed quadrature downconversion). Note this assumes that the frequency of the mixers in the (not shown) quadrature downconversion that precedes this are "close enough" to the ideal. Similar comments for phase, although for voice applications it's not a big deal. Here's another reference https://www.dsprelated.com/showarticle/176.php
image.png
Liquid-dsp also has a non-supressed carrier SSB demod using a PLL to lock to the carrier and center the spectrum. Again this is fairly easy to implement, e.g.
image.png
(fair warning I haven't actually tested these but at a rough glance they look okay to me).

Mike

On Sun, Apr 19, 2020 at 9:44 AM Fons Adriaensen <address@hidden> wrote:
On Sun, Apr 19, 2020 at 07:44:00AM -0500, David Hagood wrote:

> Yes, I know - "If you want it, write it yourself, then". And I may just do
> that, but since I hate duplicating effort, I'd like to know if anybody else
> has done that, or is doing that.

I've been developing my own SDR modules (C++, a Python interface will be
added later). Main reason for that I've never been able to compile and
run GR (on a plain ArchLinux system) without running into trouble with
at least one of it countless dependencies.

One of those modules is a complex in/out Hilbert filter. The I filter
is actually just a delay, and the Q filter is the familar anti-symmteric
FIR with all coefficients on even positions zero (they are not even used
in the actual code).

If the GR module is similar, I don't really understand why it doesn't have
a complex input. If necessary you could always send the same signal to
both I and Q, so nothing would be lost.

Ciao,

--
FA



reply via email to

[Prev in Thread] Current Thread [Next in Thread]