Main Content

iqcoef2imbal

補償器係数の、振幅と位相の不均衡への変換

説明

[A,P] = iqcoef2imbal(C) は、補償器係数 C を同等の振幅および位相の不均衡に変換します。

すべて折りたたむ

iqcoef2imbal を使用して、所定の複素数係数の振幅と位相の不均衡を推定します。係数は、IQImbalanceCompensator の関数 step からの出力です。

レイズド コサイン送信フィルターを作成して、64-QAM 信号を生成します。

M = 64;
txFilt = comm.RaisedCosineTransmitFilter;

ランダム 64 値シンボルを変調してフィルター処理します。

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

振幅と位相の不均衡を指定します。

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

指定された I/Q 不均衡を適用します。

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;

受信信号の強度を正規化します。

rxSig = rxSig/std(rxSig);

comm.IQImbalanceCompensator System object™ を使用して、I/Q 不均衡を除去します。複素数係数を出力引数として使用できるように、補償器オブジェクトを設定します。

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

補償器係数の最後の値から、不均衡を推定します。

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

推定した不均衡値を指定されたものと比較します。よく一致していることがわかります。

[ampImb phImb; ampImbEst phImbEst]
ans = 2×2

    2.0000   15.0000
    2.0178   14.5740

入力引数

すべて折りたたむ

I/Q 不均衡を補正するために使用される係数。複素数値のベクトルとして指定されます。

例: 0.4+0.6i

例: [0.1+0.2i; 0.3+0.5i]

データ型: single | double

出力引数

すべて折りたたむ

振幅の不均衡 (dB)。C と同じ次元の実数値ベクトルとして返されます。

位相の不均衡 (度)。C と同じ次元の実数値のベクトルとして返されます。

詳細

すべて折りたたむ

I/Q 不均衡の補正

関数 iqcoef2imbalcomm.IQImbalanceCompensator System object™ のサポート関数です。

スケールと回転の係数 G、補償器係数 C および受信信号 x を与えると、補正された信号 y は次の形になります。

y=G[x+Cconj(x)].

行列の形では次のように書き直すことができます。

Y=RX,

ここで、X は不均衡な信号 [XI, XQ] を表す 2 行 1 列のベクトル、Y は補償器の出力 [YI, YQ] を表す 2 行 1 列のベクトルです。

行列 R は次のように表されます。

R=[1+Re{C}Im{C}Im{C}1Re{C}]

補償器が I/Q 不均衡を完全に除去するためには、X=KS であるため、R = K-1 です。ここで、K は 2 行 2 列の行列で、その値は振幅と位相の不均衡により決まり、S は理想の信号です。次の形式の行列 M を定義します。

M=[1αα1]

MM-1 はいずれも係数 G に対応するスケール行列および回転行列と考えられます。K = R-1 であるため、積 M-1 R K M は単位行列で、M-1 R は補償器の出力を表し、K M は I/Q 不均衡を表します。係数 α は以下となるように選択されます。

KM=L[Igaincos(θI)Qgaincos(θQ)Igainsin(θI)Qgainsin(θQ)]

ここで L は定数です。この形から、Igain、Qgain、θI および θQ を取得できます。所定の位相の不均衡 ΦImb に対して、同相および直交角度は次のように表されます。

θI=(π/2)(ΦImb/180)θQ=π/2+(π/2)(ΦImb/180)

したがって、 cos(θQ) = sin(θI) および sin(θQ) = cos(θI) であるため、次のようになります。

L[Igaincos(θI)Qgaincos(θQ)Igainsin(θI)Qgainsin(θQ)]=L[Igaincos(θI)Qgainsin(θI)Igainsin(θI)Qgaincos(θI)]

I/Q 不均衡は次のように表されます。

KM=[K11+αK12αK11+K12K21+αK22αK21+K22]=L[Igaincos(θI)Qgainsin(θI)Igainsin(θI)Qgaincos(θI)]

したがって次のようになります。

(K21+αK22)/(K11+αK12)=(αK11+K12)/(αK21+K22)=sin(θI)/cos(θI)

この方程式は、変数 α を求める 2 次方程式、すなわち D1α2 + D2α + D3 = 0 として記述できます。ここで、

D1=K11K12+K22K21D2=K122+K212K112K222D3=K11K12K21K22

|C| ≤ 1 の場合、この 2 次方程式は以下の解をもちます。

α=D2D24D1D32D1

それ以外の場合、|C| > 1 であれば、解は次の形をとります。

α=D2+D24D1D32D1

最後に、振幅の不均衡 AImb と位相の不均衡 ΦImb が求められます。

K=K[1αα1]AImb=20log10(K11/K22)ΦImb=2tan1(K21/K11)(180/π)

メモ

  • C が実数で |C| ≤ 1 の場合、位相の不均衡は 0 で振幅の不均衡は 20log10((1–C)/(1+C)) です。

  • C が実数で |C| > 1 の場合、位相の不均衡は 180° で振幅の不均衡は 20log10((C+1)/(C−1)) です。

  • C が虚数の場合、AImb = 0 です。

拡張機能

C/C++ コード生成
MATLAB® Coder™ を使用して C および C++ コードを生成します。

バージョン履歴

R2014b で導入

参考

関数

オブジェクト