Main Content

このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。

comm.IQImbalanceCompensator

説明

comm.IQImbalanceCompensator System object™ は、変調信号の同相成分と直交成分の間 (IQ) の不平衡を補正します。IQ 不平衡補償器に固有の適応アルゴリズムは、M-PSK、M-QAM、および OFDM の変調スキーム (M>2) と互換性があります。詳細については、アルゴリズムを参照してください。

メモ

補償器の出力は、基準コンスタレーションに対してスケーリングおよび回転されている、つまり、複素数を乗算している場合があります。実際には、受信機がチャネル推定によって復調前に修正するため、この変換によって問題が生じることはありません。

IQ 不平衡を補正するには、次のようにします。

  1. comm.IQImbalanceCompensator オブジェクトを作成し、そのプロパティを設定します。

  2. 関数と同様に、引数を指定してオブジェクトを呼び出します。

System object の機能の詳細については、System object とはを参照してください。

作成

説明

iqcomp = comm.IQImbalanceCompensator は、入力信号の同相成分と直交成分との間の不平衡を補正する補償器の System object を作成します。

iqcomp = comm.IQImbalanceCompensator(Name=Value) は、IQ 不平衡補償器オブジェクトを作成し、名前と値の引数を 1 つ以上使用してプロパティを設定します。たとえば、comm.IQImbalanceCompensator(CoefficientSource="Input port") は、オブジェクトの呼び出し時に補償器係数を与えなければならないことを指定します。この構成の場合、他のすべてのプロパティは無効になります。

プロパティ

すべて展開する

特に指定がない限り、プロパティは "調整不可能" です。つまり、オブジェクトの呼び出し後に値を変更することはできません。オブジェクトは呼び出すとロックされ、ロックを解除するには関数 release を使用します。

プロパティが "調整可能" の場合、その値をいつでも変更できます。

プロパティ値の変更の詳細については、System object を使用した MATLAB でのシステム設計を参照してください。

補償器係数のソース。"Estimated from input signal" または "Input port" として指定します。

  • このプロパティが "Estimated from input signal" に設定されている場合、補償器は適応アルゴリズムと入力信号を使用して補償器係数を推定します。

  • このプロパティが "Input port" に設定されている場合、その他のすべてのプロパティは無効になり、オブジェクトの呼び出し時に補償器係数を入力引数 c として与えなければなりません。

IQ 不平衡の補正に使用される初期係数。複素数のスカラーとして指定します。

依存関係

このプロパティを有効にするには、CoefficientSource プロパティを "Estimated from input signal" に設定します。

データ型: double
複素数のサポート: あり

係数適応のステップ サイズのソース。"Property" または "Input port" として指定します。

  • このプロパティが "Property" に設定されている場合、ステップ サイズを StepSize プロパティで指定します。

  • このプロパティが "Input port" に設定されている場合、オブジェクトの呼び出し時にステップ サイズを入力引数 s として指定します。

適応ステップ サイズ。スカラーとして指定します。このプロパティの値は、アルゴリズムが IQ 不平衡を推定する際に使用するステップ サイズです。詳細については、アルゴリズムを参照してください。

調整可能: Yes

依存関係

このプロパティを有効にするには、StepSizeSource"Property" に設定します。

データ型: double

入力引数に基づいて補償器係数を適応させるかどうかのオプション。logical 0 (false) または logical 1 (true) として指定します。

  • このプロパティが false である場合、係数は出力サンプルごとに更新されます。

  • このプロパティが true である場合、入力引数 a に logical 値を指定して係数の適応を有効または無効にしなければなりません。

補償器係数を出力するかどうかのオプション。logical 0 (false) または logical 1 (true) として指定します。

  • この logical プロパティが false である場合、オブジェクトの呼び出し時に IQ 不平衡補償器の係数を出力として使用できません。

  • この logical プロパティが true である場合、オブジェクトの呼び出し時に IQ 不平衡補償器の係数を出力 coef として使用できます。

使用法

説明

y = iqcomp(x) は、入力信号の IQ 不平衡を補正します。補償器係数は、ブラインド適応アルゴリズムを使用して x から推定します。

y = iqcomp(x,c) は、入力補償係数を内部で生成するのではなく、入力補正係数 c を受け入れます。この構文は CoefficientSource プロパティが Input port に設定されている場合に適用されます。この構文を使用する場合、補償器係数の適応推定は無効になります。

y = iqcomp(x,s) は、入力ステップ サイズ s を受け入れます。この構文は StepSizeSource プロパティが Input port に設定されている場合に適用されます。

y = iqcomp(x,a) は、係数の更新を有効または無効にするための適応制御信号 a を受け入れます。この構文は AdaptInputPort プロパティが true に設定されている場合に適用されます。

y = iqcomp(x,s,a) は、ステップ サイズ s、および係数の更新を有効または無効にするための適応制御信号 a を受け入れます。この構文は、StepSizeSource プロパティが Input port に設定され、AdaptInputPort プロパティが true に設定されている場合に適用されます。

[y,estcoef] = iqcomp(x,___) は、前述したいずれかの構文の入力引数を使用し、推定された補償係数も返します。この構文は CoefficientOutputPort プロパティが Input port に設定されている場合に適用されます。

入力引数

すべて展開する

入力信号。スカラーまたは列ベクトルとして指定します。

データ型: double | single
複素数のサポート: あり

補償器係数。入力信号 x と同じ長さのスカラーまたは列ベクトルとして指定します。

依存関係

この入力を有効にするには、CoefficientSource プロパティを "Input port" に設定します。

データ型: single | double

ブラインド適応で補償器係数を推定する際のステップ サイズ。スカラーとして指定します。

依存関係

この入力を有効にするには、StepSizeSource プロパティを "Input port" に設定します。

データ型: single | double

適応制御信号。logical スカラーとして指定します。

  • このプロパティが true である場合、補償器係数は適応処理されます。

  • このプロパティが false である場合、補償器係数は変更されません。

依存関係

この入力を有効にするには、AdaptInputPort プロパティを "Input port" に設定します。

データ型: logical

出力引数

すべて展開する

IQ 不平衡補正後の信号。入力信号 x と同じサイズのスカラーまたは列ベクトルとして返されます。

推定された補償器係数。入力信号 x と同じサイズのスカラーまたは列ベクトルとして返されます。

  • atrue である場合、オブジェクトを呼び出すと、適応処理が行われた補償器係数が返されます。

  • afalse である場合、前回オブジェクトを呼び出したときと同じ補償器係数が返されます。

オブジェクト関数

オブジェクト関数を使用するには、System object を最初の入力引数として指定します。たとえば、obj という名前の System object のシステム リソースを解放するには、次の構文を使用します。

release(obj)

すべて展開する

stepSystem object のアルゴリズムの実行
releaseリソースを解放し、System object のプロパティ値と入力特性の変更を可能にします。
resetSystem object の内部状態のリセット

すべて折りたたむ

comm.IQImbalanceCompensator System object™ を使用することにより、振幅および位相の不平衡が QPSK 変調信号に与える影響を軽減します。

ランダム データ シンボルを生成して QPSK 変調を適用します。

M = 4;                       % QPSK
spf = 1e6;                   % Samples per frame
data = randi([0 M-1],spf,1);
txSig = pskmod(data,M,pi/4);

IQ 不平衡の補正前後の QPSK 信号を表示するコンスタレーション ダイアグラム オブジェクトを作成します。既定の QPSK 基準コンスタレーションと送信信号が一致するため、オブジェクトの基準コンスタレーションを更新する必要はありません。

cdscope = comm.ConstellationDiagram( ...
    NumInputPorts=2, ...
    ShowLegend=true, ...
    ChannelNames=["Impaired signal","IQ imbalance compensated"]);

IQ 不平衡補償器を作成します。

iqImbComp = comm.IQImbalanceCompensator;

送信信号に振幅および位相の不均衡を適用します。

ampImb = 5;                          % dB
phImb = 15;                          % deg
rxSig = iqimbal(txSig,ampImb,phImb);

受信機側で、劣化した信号に IQ 補償アルゴリズムを適用します。

compSig = iqImbComp(rxSig);

劣化した信号と IQ 劣化補正済みの信号を表示するため、信号に含まれる最後の 1000 個のシンボルをコンスタレーション ダイアグラム オブジェクトに読み込みます。劣化した信号コンスタレーションは、IQ の振幅と位相の劣化要因を示しています。劣化補正された信号コンスタレーションは、基準コンスタレーションとほぼ一致しています。

cdscope(rxSig(spf - 1000:end),compSig(spf - 1000:end))
release(cdscope)

comm.IQImbalanceCompensator System object™ を外部係数と共に使用して、8-PSK 信号の振幅および位相の不均衡を補正します。

8-PSK の基準コンスタレーションを作成します。コンスタレーション ダイアグラム System object を作成します。2 つの入力信号に含まれる最後の 100 個のデータ シンボルのみが表示されるようにコンスタレーション ダイアグラム オブジェクトを構成し、基準コンスタレーションを提供します。

refconst = pskmod(0:7,8,0);
cdscope = comm.ConstellationDiagram(...
    NumInputPorts=2, ...
    SymbolsToDisplaySource="Property", ...
    SymbolsToDisplay=100, ...
    ReferenceConstellation=refconst, ...
    ChannelNames=["Uncompensated","Compensated"]);

アルゴリズム係数の入力端子をもつ I/Q 不均衡補償器オブジェクトを作成します。

iqcomp = comm.IQImbalanceCompensator( ...
    CoefficientSource="Input port");

ランダム データ シンボルを生成して 8-PSK 変調を適用します。

data = randi([0 7],1000,1);
txSig = pskmod(data,8,0);

送信信号に振幅および位相の不均衡を適用します。

ampImb = 5;                          % dB
phImb = 15;                          % degrees
rxSig = iqimbal(txSig,ampImb,phImb);

関数 iqimbal2coef を使用して、振幅および位相の不均衡に対する補償係数を決定します。

compCoef = iqimbal2coef(ampImb,phImb);

iqcomp オブジェクトの呼び出し時に、受信信号に対して補償係数を適用します。補正されていない信号と補正された信号について、結果として得られたコンスタレーションを表示します。補正されていない信号では IQ 不平衡が著しいのに対し、補正された信号コンスタレーションは基準コンスタレーションにほぼ一致していることがわかります。

compSig = iqcomp(rxSig,compCoef);
cdscope(rxSig,compSig)
release(cdscope)

入力端子からアルゴリズムのステップ サイズを設定しながら、64-QAM 信号から IQ 不平衡を除去し、推定された係数を外部から使用できるようにします。

constellation diagram オブジェクトを作成します。名前と値のペアを使用して、コンスタレーション ダイアグラムに最後の 256 データ シンボルのみが表示されようにし、座標軸の範囲を設定して基準コンスタレーションを指定します。

M = 64;
refC = qammod(0:M-1,M);
cdscope = comm.ConstellationDiagram(...
    NumInputPorts=2, ...
    SymbolsToDisplaySource="Property", ...
    SymbolsToDisplay=256, ...
    XLimits=[-10 10], ...
    YLimits=[-10 10], ...
    ReferenceConstellation=refC, ...
    ChannelNames=["Uncompensated","Compensated"]);

IQ 不平衡補償器の System object™ を作成します。その際、ステップ サイズを入力引数として指定し、推定された係数を出力端子から使用できるように構成します。

iqImbComp = comm.IQImbalanceCompensator( ...
    StepSizeSource="Input port", ...
    CoefficientOutputPort=true);

ランダム データ シンボルを生成して 64-QAM 変調を適用します。

nSym = 30000;
data = randi([0 M-1],nSym,1);
txSig = qammod(data,M);

送信信号に振幅および位相の不均衡を適用します。

ampImb = 2;                          % dB
phImb = 10;                          % deg
rxSig = iqimbal(txSig,ampImb,phImb);

IQ 不平衡補償器のステップ サイズ パラメーターを指定します。

stepSize = 1e-5;

入力引数でステップ サイズを設定しながら、IQ 不平衡を補正します。受信信号のコンスタレーション ダイアグラムをプロットします。補正された信号コンスタレーションが、今度は基準コンスタレーションにほぼ一致していることがわかります。

[compSig,estCoef] = iqImbComp(rxSig,stepSize);
cdscope(rxSig,compSig)
release(cdscope)

推定された係数の実数値と虚数値をプロットします。出力係数を見ると、約 5000 シンボル後にシミュレーションが定常状態の解に達していることがわかります。

plot((1:nSym)'/1000,[real(estCoef),imag(estCoef)])
grid
xlabel('Symbols (thousands)')
ylabel('Coefficient Value')
legend('Real','Imaginary','location','best')

Figure contains an axes object. The axes object with xlabel Symbols (thousands), ylabel Coefficient Value contains 2 objects of type line. These objects represent Real, Imaginary.

外部引数を使用して、IQ 不平衡補償器の適応アルゴリズムを制御します。

QPSK 変調をランダム データ シンボルに適用します。

data = randi([0 3],600,1);
txSig = pskmod(data,4,pi/4,'gray');

入力端子からの適応アルゴリズムの制御、StepSize プロパティによるステップ サイズの指定、および推定された係数の出力端子からの利用を行う IQ 不平衡補償器を作成します。

iqImbComp = comm.IQImbalanceCompensator( ...
    AdaptInputPort=true, ...
    StepSize=0.001, ...
    CoefficientOutputPort=true);

送信信号に振幅および位相の不均衡を適用します。

ampImb = 5; % dB
phImb = 15; % deg
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;

補正操作を 3 つのセグメントに分割し、補償器が最初の 200 シンボルに対して有効、次の 200 シンボルに対して無効、最後の 200 シンボルに対して有効になるようにします。係数データを 3 つのベクトルに保存します。

[~,estCoef1] = iqImbComp(rxSig(1:200),true);
[~,estCoef2] = iqImbComp(rxSig(201:400),false);
[~,estCoef3] = iqImbComp(rxSig(401:600),true);

複素アルゴリズム係数を連結し、実数部と虚数部をプロットします。補償器が無効になっているときは係数が適応しないことを確認します。

estCoef = [estCoef1; estCoef2; estCoef3];
plot((1:600)',[real(estCoef) imag(estCoef)])
grid
xlabel('Symbols')
ylabel('Coefficient Value')
legend('Real','Imaginary','location','best')

Figure contains an axes object. The axes object with xlabel Symbols, ylabel Coefficient Value contains 2 objects of type line. These objects represent Real, Imaginary.

アルゴリズム

アナログ フロントエンドの RF ハードウェアを改善する場合と比べ、RF 受信機の信号出力に含まれる同相成分と直交成分との間の不平衡をコスト効率の高い方法で補正できます。IQ 不平衡は、特に直接変換受信機で発生します。IQ 不平衡補償器の基礎として、循環性ベースのブラインド補償アルゴリズムが使用されます。

一般化した IQ 不平衡のモデルを示します。ここで、g は振幅の不平衡、ϕ は位相の不平衡です。劣化要因がない場合、g = 1 および ϕ = 0 となります。この図で、H(f) は、ローパス フィルターなどによるブランチの公称周波数応答です。HI(f) と HQ(f) は、公称応答とは異なる部分の同相成分と直交成分の振幅応答および位相応答です。完全に一致する場合、HI(f) = HQ(f) = 1 です。

IQ imbalance model

z(t) を、受信信号 r(t) の理想的なベースバンド等価信号とし、そのフーリエ変換を Z(f) で表します。一般化された IQ 不平衡モデルでは、不平衡信号 x(t) = xI(t) + xQ(t) のフーリエ変換は次のようになります。

X(f)=G1(f)Z(f)+G2(f)Z*(f)

ここで、G1(f)G2(f) は IQ 不平衡の直接成分と共役成分です。これらの成分は次のように定義されます。

G1(f)=[HI(f)+HQ(f)gexp(jϕ)]/2G2(f)=[HI(f)+HQ(f)gexp(jϕ)]/2

逆フーリエ変換を X(f) に適用すると、信号モデルは x(t) = g1(t) × z(t) + g2(t) × z*(t) となります。

この変換は、変数が離散時間で表される次のような補償器の構造を示しています。補正された信号は y(n) = x(n) + wx*(n) と表現されます。

IQ imbalance compensator structure

次の形式のアルゴリズム

{y(n)=x(n)+w(n)x*(n)w(n+1)=w(n)My2(n)

が重みの決定に使用されます。これによって、常に "適正" な出力を得ることができる、つまり、条件 E[y2(n)] = 0 を満たすことができるためです。詳細については、[1]を参照してください。w の初期値は補償器係数の初期値で決定され、既定値は 0 + 0i です。M は StepSize で表される適応ステップ サイズです。

参照

[1] Anttila, L., M. Valkama, and M. Renfors. "Blind compensation of frequency-selective I/Q imbalances in quadrature radio receivers: Circularity-based approach", Proc. IEEE ICASSP, pp.III-245–248, 2007.

[2] Kiayani, A., L. Anttila, Y. Zou, and M. Valkama, "Advanced Receiver Design for Mitigating Multiple RF Impairments in OFDM Systems: Algorithms and RF Measurements", Journal of Electrical and Computer Engineering, Vol. 2012.

拡張機能

バージョン履歴

R2014b で導入