Compensate for I/Q imbalance
The IQImbalanceCompensator
System
object™ compensates for the imbalance between the inphase
and quadrature components of a modulated signal.
To compensate for I/Q imbalance:
Define and set up the IQImbalanceCompensator
object.
See Construction.
Call step
to compensate for the
I/Q imbalance according to the properties of comm.IQImbalanceCompensator
.
The behavior of step
is specific to each object in
the toolbox.
The adaptive algorithm inherent to the I/Q imbalance compensator is compatible with MPSK, MQAM, and OFDM modulation schemes, where M>2.
The output of the compensator might be scaled and rotated, that is, multiplied by a complex number, relative to the reference constellation. In practice, this is not an issue as receivers correct for this prior to demodulation through the use of channel estimation.
Starting in R2016b, instead of using the step
method
to perform the operation defined by the System
object™, you can
call the object with arguments, as if it were a function. For example, y
= step(obj,x)
and y = obj(x)
perform
equivalent operations.
H = comm.IQImbalanceCompensator
creates
a compensator System
object, H
, that compensates
for the imbalance between the inphase and quadrature components of
the input signal.
H = comm.IQImbalanceCompensator(
creates
an I/Q imbalance compensator object, Name
,Value
)H
, with each
specified property Name
set to the specified Value
.
You can specify additional namevalue pair arguments in any order
as (Name1
,Value1
,...,NameN
,ValueN
).

Source of compensator coefficients Specify either 

Initial coefficient used to compensate for I/Q imbalance The initial coefficient is a complex scalar that can be either
single or double precision. The default value is 

Source of step size for coefficient adaptation Specify either 

Adaptation step size Specifies the step size used by the algorithm in estimating
the I/Q imbalance. This property is accessible only when 

Creates input port to control compensator coefficient adaptation When this logical property is 

Create port to output compensator coefficients When this logical property is 
reset  Reset states of the IQImbalanceCompensator System
object 
step  Compensate I/Q Imbalance 
Common to All System Objects  

release  Allow System object property value changes 
One of the major impairments affecting direct conversion receivers is the imbalance between the received signal’s inphase and quadrature components. Rather than improving the frontend, analog hardware, it is more cost effective to tolerate a certain level of I/Q imbalance and then implement compensation methods. A circularitybased blind compensation algorithm is used as the basis for the I/Q Imbalance Compensator.
A generalized I/Q imbalance model is shown, where g is the amplitude imbalance and ϕ is the phase imbalance (ideally, g = 1 and ϕ = 0). In the figure, H(f) is the nominal frequency response of the branches due to, for example, lowpass filters. H_{I}(f) and H_{Q}(f) represent the portions of the inphase and quadrature amplitude and phase responses that differ from the nominal response. With perfect matching, H_{I}(f) = H_{Q}(f) = 1.
Let z(t) be the ideal baseband equivalent signal of the received signal, r(t), where its Fourier transform is denoted as Z(f). Given the generalized I/Q imbalance model, the Fourier transform of the imbalanced signal, x(t) = x_{I}(t) + x_{Q}(t), is
$$X(f)={G}_{1}(f)Z(f)+{G}_{2}(f){Z}^{*}(f)$$
where G_{1}(f) and G_{2}(f) are the direct and conjugate components of the I/Q imbalance. These components are defined as
$$\begin{array}{l}{G}_{1}(f)=\left[{H}_{I}(f)+{H}_{Q}(f)g\mathrm{exp}(j\varphi )\right]/2\\ {G}_{2}(f)=\left[{H}_{I}(f)+{H}_{Q}(f)g\mathrm{exp}(j\varphi )\right]/2\end{array}$$
Applying the inverse Fourier transform to X(f), the signal model becomes x(t) = g_{1}(t) * z(t) + g_{2}(t) * z^{*}(t).
This suggests the compensator structure as shown in which discretetime notation is used to express the variables. The compensated signal is expressed as y(n) = x(n) + wx^{*}(n).
A simple algorithm of the form
$$\{\begin{array}{l}y(n)=x(n)+w(n){x}^{*}(n)\\ w(n+1)=w(n)M{y}^{2}(n)\end{array}$$
is used to determine the weights, because it ensures that the
output is “proper”, that is, $$E[{y}^{2}(n)]=0$$ [1]. The initial value of w is
determined by the InitialCoefficient
property,
which has a default value of 0 + 0i
. M is
the step size, as specified in the StepSize
property.
[1] Anttila, L., M. Valkama, and M. Renfors. “Blind compensation of frequencyselective I/Q imbalances in quadrature radio receivers: Circularitybased approach”, Proc. IEEE ICASSP, pp.III245–248, 2007.
[2] Kiayani, A., L. Anttila, Y. Zou, and M. Valkama, “Advanced Receiver Design for Mitigating Multiple RF Impairments in OFDM Systems: Algorithms and RF Measurements”, Journal of Electrical and Computer Engineering, Vol. 2012.