Hi,

I am trying to apply the I/Q Correction [Analog Devices Wiki] on my program, but I guess there is something wrong either with the description or with my understanding of it. I tried many different things but no use!

Genneral information:

- FMCOMMS4

- TX and RX connected by a loop-back cable

- FDD

- TX and RX: 2.4GHz

- Gain: 0

- First of all, to decrease the imbalance I tried to let the calib_mode in automatic, as it should decrease the imbalance.... (OK I also tried to put it in manual and try different values for the "calib_mode tx_quad <value>" as described in AD9361 Transmit Quadrature Calibration (Tx Quad Cal) trying to find the one that gives me the lowest imbalance.... but it is more or less the same, and I perceived also that the values on subsequent transmissions may change in "range" (I don't know if I can say like that, but the fact is that the values of I and Q vary considerably) so I don't know if setting the tx_quad value manually is a good thing anyway. What do you think, should I let it in automatic, or try to find the best tx_quad by changing gradually the configuration is a good thing?

- The thing is that I am not sure that the formulas described in the I/Q Correction [Analog Devices Wiki] page (and in the pointed S.W. Ellingson's paper are correct). I found that the sin(psy) is in fact 2/alpha²<I''(t)Q''(t)> instead simply 2/alpha<I''(t)Q''(t)>. However, I have now two problems, first is that when I apply the correction (the matrix multiplication) the I is, normally in the interval -1:1, but the Q goes wild! Hummm... well in fact to be honest no, it stays more or less in the same level I received (for the figure below more or less between -150 and +150).

The behavior is understandable, since the D on the matrix is the inverse of cos (psy), which should be between -1:1. So, in the best case, the value would not change (cos=1), but in general it even increases a little bit (cos <1)! So either I am doing something wrong, or the formula considers Q would be between -1:1, moreover, could be also that the advised method, and its formulas, have a problem somewhere! A colleague here looked into it, and for him the formulas for C and D are wrong, they should be:

C=-sin(psy)/cos(psy)

D=1/alpha*cos(psy)

Even though I am not sure it is correct, that certainly helps, but does not solve entirely the problem.

The second problem I have, and that I guess is harder to solve, is that from time to time (not always) the Q is way bigger than the I (see below image), and in that case, the sin is bigger than 1! (alpha is calculated over I², and sin is over I*Q, if Q is bigger... then even dividing the <I''(t)Q''(t)> by the alpha², it may be big enough to be bigger than 1). Well not only that is wrong but after that everything goes nuts, as I don't have even cos(psy) anymore .

I have no Simulink, so I cannot look the provided code to check the formulas. Is there any other implementation of it somewhere else?

What do you think should I do?!!??

Hi,

The amplitude of Q is your reference amplitude. And I is scaled to match that amplitude. It doesn't really matter what your reference amplitude is and you can even leave it at the original as it was received. But for processing you typically want to scale it to a know value. Scaling it to -1,1 makes the correction parameter calculation easier and that's why was chosen I guess.

Note that if Q is scaled to be in the range -1,1 then sin ψ = (2/α)*<I'''(t)Q'''(t)> (not α²)

Your matrix with γ included is correct. To get ψ use: sin ψ = 2/(α*γ)*<I''(t)Q''(t)>. When Q''(t) is normalized to -1,1 γ is 0 and that's why it does not appear in the original formula. You can get there by setting Q'''(t) = Q''(t)/γ and then move the constant factor outside of the integral.

- Lars