iqimbal2coef
Convert I/Q imbalance to compensator coefficient
Syntax
Description
Examples
Generate coefficients for the I/Q imbalance compensator System object™ using iqimbal2coef. The compensator corrects for an I/Q imbalance using the generated coefficients.
Create a raised cosine transmit filter System object.
txRCosFilt = comm.RaisedCosineTransmitFilter;
Modulate and filter random 64-ary symbols.
M= 64; data = randi([0 M-1],100000,1); dataMod = qammod(data,M); txSig = txRCosFilt(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 by creating and applying a comm.IQImbalanceCompensator object. Set the compensator such that the complex coefficients are made available as an output argument.
iqComp = comm.IQImbalanceCompensator('CoefficientOutputPort',true);
[compSig,coef] = iqComp(rxSig);Compare the final compensator coefficient to the coefficient generated by the iqimbal2coef function. Observe that there is good agreement.
idealcoef = iqimbal2coef(ampImb,phImb); [coef(end); idealcoef]
ans = 2×1 complex
-0.1137 + 0.1296i
-0.1126 + 0.1334i
Input Arguments
Amplitude imbalance in dB, specified as a real-valued row or column vector.
Example: 3
Example: [0;
5]
Data Types: double
Phase imbalance in degrees, specified as a real-valued row or column vector.
Example: 10
Example: [15;
45]
Data Types: double
Output Arguments
More About
The function iqimbal2coef is
a supporting function for the comm.IQImbalanceCompensator System object™.
Define S and X as 2-by-1 vectors representing the I and Q components of the ideal and I/Q imbalanced signals, respectively.
where K is a 2-by-2 matrix whose values are determined by the amplitude imbalance, A, and phase imbalance, P. A is expressed in dB and P is expressed in degrees.
The imbalance can be expressed as:
Then K has the form:
The vector Y is defined as the I/Q imbalance compensator output.
For the compensator to perfectly remove the I/Q imbalance, R must be the matrix inversion of K, namely:
Using complex notation, the vector Y can be rewritten as:
where,
The output of the function is w2/w1. To exactly obtain the original signal, the compensator output needs to be scaled and rotated by the complex number w1.
Note
There are cases for which the output of iqimbal2coef
is unreliable.
If the phase imbalance is ±90°, the in-phase and quadrature components will become co-linear; consequently, the I/Q imbalance cannot be compensated.
If the amplitude imbalance is 0 dB and the phase imbalance is 180°, w1 = 0 and w2 = 1i; therefore, the compensator takes the form of y = 1i*conj(x).
Extended Capabilities
C/C++ Code Generation
Generate C and C++ code using MATLAB® Coder™.
Version History
Introduced in R2014b
MATLAB Command
You clicked a link that corresponds to this MATLAB command:
Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.
웹사이트 선택
번역된 콘텐츠를 보고 지역별 이벤트와 혜택을 살펴보려면 웹사이트를 선택하십시오. 현재 계신 지역에 따라 다음 웹사이트를 권장합니다:
또한 다음 목록에서 웹사이트를 선택하실 수도 있습니다.
사이트 성능 최적화 방법
최고의 사이트 성능을 위해 중국 사이트(중국어 또는 영어)를 선택하십시오. 현재 계신 지역에서는 다른 국가의 MathWorks 사이트 방문이 최적화되지 않았습니다.
미주
- América Latina (Español)
- Canada (English)
- United States (English)
유럽
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)