Main Content

# iqcoef2imbal

Convert compensator coefficient to amplitude and phase imbalance

## Syntax

``````[A,P] = iqcoef2imbal(C)``````

## Description

example

``````[A,P] = iqcoef2imbal(C)``` converts compensator coefficient `C` to its equivalent amplitude and phase imbalance. ```

## Examples

collapse all

Use `iqcoef2imbal` to estimate the amplitude and phase imbalance for a given complex coefficient. The coefficients are an output from the `step` function of the `IQImbalanceCompensator`.

Create a raised cosine transmit filter to generate a 64-QAM signal.

```M = 64; txFilt = comm.RaisedCosineTransmitFilter;```

Modulate and filter random 64-ary symbols.

```data = randi([0 M-1],100000,1); dataMod = qammod(data,M); txSig = step(txFilt,dataMod);```

Specify amplitude and phase imbalance.

```ampImb = 2; % dB phImb = 15; % degrees```

Apply the specified I/Q imbalance.

```gainI = 10.^(0.5*ampImb/20); gainQ = 10.^(-0.5*ampImb/20); imbI = real(txSig)*gainI*exp(-0.5i*phImb*pi/180); imbQ = imag(txSig)*gainQ*exp(1i*(pi/2 + 0.5*phImb*pi/180)); rxSig = imbI + imbQ;```

Normalize the power of the received signal

`rxSig = rxSig/std(rxSig);`

Remove the I/Q imbalance using the `comm.IQImbalanceCompensator` System object. Set the compensator object such that the complex coefficients are made available as an output argument.

```hIQComp = comm.IQImbalanceCompensator('CoefficientOutputPort',true); [compSig,coef] = step(hIQComp,rxSig);```

Estimate the imbalance from the last value of the compensator coefficient.

`[ampImbEst,phImbEst] = iqcoef2imbal(coef(end));`

Compare the estimated imbalance values with the specified ones. Notice that there is good agreement.

`[ampImb phImb; ampImbEst phImbEst]`
```ans = 2×2 2.0000 15.0000 2.0178 14.5740 ```

## Input Arguments

collapse all

Coefficient used to compensate for an I/Q imbalance, specified as a complex-valued vector.

Example: `0.4+0.6i`

Example: ```[0.1+0.2i; 0.3+0.5i]```

Data Types: `single` | `double`

## Output Arguments

collapse all

Amplitude imbalance in dB, returned as a real-valued vector with the same dimensions as `C`.

Phase imbalance in degrees, returned as a real-valued vector with the same dimensions as `C`.

## More About

collapse all

### I/Q Imbalance Compensation

The function `iqcoef2imbal` is a supporting function for the `comm.IQImbalanceCompensator` System object™.

Given a scaling and rotation factor, G, compensator coefficient, C, and received signal, x, the compensated signal, y, has the form

`$y=G\left[x+C\mathrm{conj}\left(x\right)\right]\text{\hspace{0.17em}}.$`

In matrix form, this can be rewritten as

`$Y=R\text{ }X\text{\hspace{0.17em}},$`

where X is a 2-by-1 vector representing the imbalanced signal [XI, XQ] and Y is a 2-by-1 vector representing the compensator output [YI, YQ].

The matrix R is expressed as

`$R=\left[\begin{array}{cc}1+\mathrm{Re}\left\{C\right\}& \mathrm{Im}\left\{C\right\}\\ \mathrm{Im}\left\{C\right\}& 1-\mathrm{Re}\left\{C\right\}\end{array}\right]$`

For the compensator to perfectly remove the I/Q imbalance, R = K-1 because $X=K\text{\hspace{0.17em}}S$, where K is a 2-by-2 matrix whose values are determined by the amplitude and phase imbalance and S is the ideal signal. Define a matrix M with the form

`$M=\left[\begin{array}{cc}1& -\alpha \\ \alpha & 1\end{array}\right]$`

Both M and M-1 can be thought of as scaling and rotation matrices that correspond to the factor G. Because K = R-1, the product M-1 R K M is the identity matrix, where M-1 R represents the compensator output and K M represents the I/Q imbalance. The coefficient α is chosen such that

`$K\text{ }M=L\left[\begin{array}{cc}{I}_{gain}\mathrm{cos}\left({\theta }_{I}\right)& {Q}_{gain}\mathrm{cos}\left({\theta }_{Q}\right)\\ {I}_{gain}\mathrm{sin}\left({\theta }_{I}\right)& {Q}_{gain}\mathrm{sin}\left({\theta }_{Q}\right)\end{array}\right]$`

where L is a constant. From this form, we can obtain Igain, Qgain, θI, and θQ. For a given phase imbalance, ΦImb, the in-phase and quadrature angles can be expressed as

`$\begin{array}{c}{\theta }_{I}=-\left(\pi /2\right)\left({\Phi }_{Imb}/180\right)\\ {\theta }_{Q}=\pi /2+\left(\pi /2\right)\left({\Phi }_{Imb}/180\right)\end{array}$`

Hence, cos(θQ) = sin(θI) and sin(θQ) = cos(θI) so that

`$L\left[\begin{array}{cc}{I}_{gain}\mathrm{cos}\left({\theta }_{I}\right)& {Q}_{gain}\mathrm{cos}\left({\theta }_{Q}\right)\\ {I}_{gain}\mathrm{sin}\left({\theta }_{I}\right)& {Q}_{gain}\mathrm{sin}\left({\theta }_{Q}\right)\end{array}\right]=L\left[\begin{array}{cc}{I}_{gain}\mathrm{cos}\left({\theta }_{I}\right)& {Q}_{gain}\mathrm{sin}\left({\theta }_{I}\right)\\ {I}_{gain}\mathrm{sin}\left({\theta }_{I}\right)& {Q}_{gain}\mathrm{cos}\left({\theta }_{I}\right)\end{array}\right]$`

The I/Q imbalance can be expressed as

`$\begin{array}{c}K\text{ }M=\left[\begin{array}{cc}{K}_{11}+\alpha {K}_{12}& -\alpha {K}_{11}+{K}_{12}\\ {K}_{21}+\alpha {K}_{22}& -\alpha {K}_{21}+{K}_{22}\end{array}\right]\\ =L\left[\begin{array}{cc}{I}_{gain}\mathrm{cos}\left({\theta }_{I}\right)& {Q}_{gain}\mathrm{sin}\left({\theta }_{I}\right)\\ {I}_{gain}\mathrm{sin}\left({\theta }_{I}\right)& {Q}_{gain}\mathrm{cos}\left({\theta }_{I}\right)\end{array}\right]\end{array}$`

Therefore,

`$\left({K}_{21}+\alpha {K}_{22}\right)/\left({K}_{11}+\alpha {K}_{12}\right)=\left(-\alpha {K}_{11}+{K}_{12}\right)/\left(-\alpha {K}_{21}+{K}_{22}\right)=\mathrm{sin}\left({\theta }_{I}\right)/\mathrm{cos}\left({\theta }_{I}\right)$`

The equation can be written as a quadratic equation to solve for the variable α, that is D1α2 + D2α + D3 = 0, where

`$\begin{array}{c}{D}_{1}=-{K}_{11}{K}_{12}+{K}_{22}{K}_{21}\\ {D}_{2}={K}_{12}^{2}+{K}_{21}^{2}-{K}_{11}^{2}-{K}_{22}^{2}\\ {D}_{3}={K}_{11}{K}_{12}-{K}_{21}{K}_{22}\end{array}$`

When |C| ≤ 1, the quadratic equation has the following solution:

`$\alpha =\frac{-{D}_{2}-\sqrt{{D}^{2}-4{D}_{1}{D}_{3}}}{2{D}_{1}}$`

Otherwise, when |C| > 1, the solution has the following form:

`$\alpha =\frac{-{D}_{2}+\sqrt{{D}^{2}-4{D}_{1}{D}_{3}}}{2{D}_{1}}$`

Finally, the amplitude imbalance, AImb, and the phase imbalance, ΦImb, are obtained.

`$\begin{array}{c}{K}^{\prime }=K\left[\begin{array}{cc}1& -\alpha \\ \alpha & 1\end{array}\right]\\ {A}_{Imb}=20{\mathrm{log}}_{10}\left({{K}^{\prime }}_{11}/{{K}^{\prime }}_{22}\right)\\ {\Phi }_{Imb}=-2{\mathrm{tan}}^{-1}\left({{K}^{\prime }}_{21}/{{K}^{\prime }}_{11}\right)\left(180/\pi \right)\end{array}$`

Note

• If C is real and |C| ≤ 1, the phase imbalance is 0 and the amplitude imbalance is 20log10((1–C)/(1+C))

• If C is real and |C| > 1, the phase imbalance is 180° and the amplitude imbalance is 20log10((C+1)/(C−1)).

• If C is imaginary, AImb = 0.

## See Also

### Objects

Introduced in R2014b

## Support

#### Bridging Wireless Communications Design and Testing with MATLAB

Download white paper