This quick mail to announce a new gnuradio block from osmocom:
The general idea is to suppress symmetrical images caused by IQ
imbalance in the RX path of quadrature receivers.
It’s composed of two subblocks:
“IQ Bal Fix”: This applies the actual correction. to a complex
stream. The correction parameters are only magnitude/phase and the
actual correction algo is the same as applied in hardware in the USRP.
You can either specify the correction parameters manually on the
block, or send them via ‘messages’. ( simple float vector
“IQ Bal Optimize”: This blocks tries to blindly detect the imbalance
by minimizing the correlation between the left and right part of the
spectrum. See the code for the “how it does it”. The general idea is
inspired from papers found on the internet and the way some SDR
software achieve the same things (sdr# for eg, although there are
significant differences in the actual implementation).
Since those correction are frequency dependent, they’ll need time to
‘adapt’ when changing frequency. You can force them to ‘reset’ when
you retune for faster reconvergence.
The algorithm has proven to work very nicely for me and for other
people, however there is the chance that it can fail if you’re looking
at one centered wideband signal …
To cope with that, the best approach is to “calibrate” the correction
when you’re looking at some narrow band signals close to your signal
of interest and then “lock” that correction. (possible by setting the
update period to ‘0’ on the ‘optimize’ block).
Example usage graph : http://i.imgur.com/ISvzRtb.png
The code can be found at :
To build (it uses git submodules to pull in some external code):
git clone git://git.osmocom.org/gr-iqbal.git
git submodule init
git submodule update
Finally, if that block is present and installed on your system when
you build the gr-osmosdr source block for hardware abstraction, then
the latter will automatically make use of gr-iqbal to try and correct
any imbalance in your source, so the application doesn’t need to me
modified at all. (although of course if an app is aware of it, it can
do more clever things)