メインコンテンツ

iqimbal2coef

I/Q 不均衡の補償器係数への変換

説明

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

すべて折りたたむ

iqimbal2coef を使用して、I/Q 不均衡補償器 System object™ の係数を生成します。補償器は生成された係数を使用して I/Q 不均衡を補正します。

レイズド コサイン送信フィルター System object を作成します。

txRCosFilt = comm.RaisedCosineTransmitFilter;

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

M= 64;
data = randi([0 M-1],100000,1);
dataMod = qammod(data,M);
txSig = txRCosFilt(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 オブジェクトを作成して適用することにより、I/Q 不均衡を除去します。複素数係数を出力引数として使用できるように、補償器を設定します。

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

最終的な補償器係数を、関数 iqimbal2coef によって生成された係数と比較します。よく一致していることがわかります。

idealcoef = iqimbal2coef(ampImb,phImb);
[coef(end); idealcoef]
ans = 2×1 complex

  -0.1137 + 0.1296i
  -0.1126 + 0.1334i

入力引数

すべて折りたたむ

振幅の不均衡 (dB)。実数値の行または列ベクトルとして指定します。

例: 3

例: [0; 5]

データ型: double

位相の不均衡 (度)。実数値の行または列ベクトルとして指定します。

例: 10

例: [15; 45]

データ型: double

出力引数

すべて折りたたむ

I/Q 不均衡を完全に補正する係数。A および P と同じ次元の複素数値ベクトルとして返されます。

詳細

すべて折りたたむ

拡張機能

すべて展開する

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

バージョン履歴

R2014b で導入

参考

関数

オブジェクト