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!
- TX and RX connected by a loop-back cable
- 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:
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?!!??