Main Content

このページの翻訳は最新ではありません。ここをクリックして、英語の最新版を参照してください。

comm.IQImbalanceCompensator

説明

IQImbalanceCompensator System object™ は、変調信号の同相成分と直交成分の間の不均衡を補正します。

I/Q 不均衡を補正するには、次の手順に従います。

  1. IQImbalanceCompensator オブジェクトを定義して設定します。構築を参照してください。

  2. step を呼び出して、comm.IQImbalanceCompensator のプロパティに従って I/Q 不均衡を補正します。step の動作は、ツールボックスの各オブジェクト固有のものです。

I/Q 不均衡補償器に固有の適応アルゴリズムは、M-PSK、M-QAM および OFDM 変調方式 (M>2) と互換です。

メモ

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

メモ

R2016b 以降では、step メソッドを使用して、System object によって定義された演算を実行する代わりに、引数を関数であるかのように使ってオブジェクトを呼び出すことができます。たとえば、y = step(obj,x)y = obj(x) は同等の演算を実行します。

構築

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

H = comm.IQImbalanceCompensator(Name,Value) は、指定された各プロパティ Name を指定された Value に設定して、I/Q 不均衡補償器オブジェクト H を作成します。(Name1,Value1,...,NameN,ValueN) のように、追加の名前と値のペアの引数を任意の順番で指定できます。

プロパティ

CoefficientSource

補償器係数のソース

Estimated from input signal または Input port を指定します。CoefficientSource プロパティが Estimated from input signal に設定されている場合、補償器は適応アルゴリズムを使用して補償器係数を入力信号から推定します。CoefficientSource プロパティが Input port に設定されている場合、その他のすべてのプロパティは無効になり、補償器係数を入力引数として関数 step に提示しなければなりません。既定値は Estimated from input signal です。このプロパティは調整不可能です。

InitialCoefficent

I/Q 不均衡の補正に使用される初期係数

初期係数は、単精度または倍精度の複素スカラーです。既定値は 0+0i です。このプロパティは調整不可能です。

StepSizeSource

係数適応のステップ サイズのソース

Property または Input port を指定します。StepSizeSourceProperty に設定されている場合、ステップ サイズを StepSize プロパティで指定します。そうでない場合は、ステップ サイズは入力引数として関数 step に提供されます。既定値は Property です。このプロパティは調整不可能です。

StepSize

適応ステップ サイズ

I/Q 不均衡を推定するアルゴリズムによって使用されるステップ サイズを指定します。このプロパティは、StepSizeSourceProperty に設定されている場合のみアクセス可能です。既定値は 1e-5 です。このプロパティは調整可能です。

AdaptInputPort

補償器係数の適応を制御する入力端子を作成

この論理プロパティが true の場合、係数適応を有効または無効にする入力端子が作成されます。AdaptInputPortfalse の場合、係数は出力サンプルごとに更新されます。既定値は false です。このプロパティは調整不可能です。

CoefficientOutputPort

補償器係数の出力端子を作成

この論理プロパティが true の場合、I/Q 不均衡の補償器係数は、関数 step の出力引数で使用可能になります。既定値は false です。このプロパティは調整不可能です。

メソッド

すべての System object に共通
release

System object のプロパティ値の変更の許可

reset

System object の内部状態をリセットします。

reset を使用するとき、このメソッドは、前に処理されたフレーム内の最後のシンボルのウィンドウ処理されたサフィックスをリセットします。

すべて折りたたむ

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 基準コンスタレーションが送信信号と一致するため、オブジェクトの基準コンスタレーションを更新する必要はありません。

constDiagram = comm.ConstellationDiagram( ...
    NumInputPorts=2, ...
    ShowLegend=true, ...
    ChannelNames={'Impaired signal','IQ imbalance compensated'});

I/Q 不均衡補償器を作成します。

iqImbComp = comm.IQImbalanceCompensator;

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

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;

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

compSig = iqImbComp(rxSig);

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

constDiagram(rxSig(spf - 1000:end),compSig(spf - 1000:end))

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

8-PSK 変調器 System object とコンスタレーション ダイアグラム System object を作成します。名前と値のペアを使用して、コンスタレーション ダイアグラムに最後の 100 データ シンボルのみが表示されるようにし、基準コンスタレーションを提供します。

hMod = comm.PSKModulator(8);
refC = constellation(hMod);
hScope = comm.ConstellationDiagram(...
    'SymbolsToDisplaySource','Property', ...
    'SymbolsToDisplay',100, ...
    'ReferenceConstellation',refC);

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

hIQComp = comm.IQImbalanceCompensator('CoefficientSource','Input port');

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

data = randi([0 7],1000,1);
txSig = step(hMod,data);

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

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;

受信信号のコンスタレーション ダイアグラムをプロットします。受信信号で振幅および位相のシフトが起きていることを確認します。

step(hScope,rxSig);

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

compCoef = iqimbal2coef(ampImb,phImb);

comm.IQImbalanceCompensator オブジェクトの関数 step を使用して、受信信号に補償係数を適用し、結果のコンスタレーションを表示します。補正されたコンスタレーションが、今度は基準コンスタレーションにほぼ一致していることがわかります。

compSig = step(hIQComp,rxSig,compCoef);
step(hScope,compSig)

アルゴリズムのステップ サイズを入力端子から設定して I/Q 不均衡を 64-QAM 信号から除去し、推定された係数を外的に使用可能にします。

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

M = 64;
refC = qammod(0:M-1,M);
constDiagram = comm.ConstellationDiagram(...
    'SymbolsToDisplaySource','Property', ...
    'SymbolsToDisplay',256, ...
    'XLimits',[-10 10], ...
    'YLimits',[-10 10], ...
    'ReferenceConstellation',refC);

ステップ サイズが入力引数として指定され、推定された係数が出力端子から使用可能になる I/Q 不均衡補償器 System object を作成します。

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

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

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

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

ampImb = 2; % dB
phImb = 10; % 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;

受信信号のコンスタレーション ダイアグラムをプロットします。

constDiagram(rxSig);

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

stepSize = 1e-5;

入力引数からステップ サイズを設定しながら、I/Q 不均衡を補正します。補正されたコンスタレーションが、今度は基準コンスタレーションにほぼ一致していることがわかります。

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

推定された係数の実数値と虚数値をプロットします。定常状態の解に達することがわかります。

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

Figure contains an axes object. The axes object contains 2 objects of type line. These objects represent Real, Imag.

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

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

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

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

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 contains 2 objects of type line. These objects represent Real, Imaginary.

補償器が無効になっている間は係数が適応しないことを確認します。

アルゴリズム

直接変換の受信機に影響する主な障害の 1 つは、受信信号の同相成分と直交成分との間の不均衡です。フロントエンドのアナログ ハードウェアを改良するより、特定レベルの I/Q 不均衡を許容した上で補正手法を実装する方が高い費用対効果が得られます。I/Q 不均衡補償器の基礎として、循環性ベースのブラインド補償アルゴリズムが使用されます。

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

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

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

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

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) と表現されます。

次の形式のシンプルなアルゴリズム

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

が重みの決定に使用されますが、これが、出力が "適正"、すなわち E[y2(n)]=0 [1] であることを保証するからです。w の初期値は InitialCoefficient プロパティで決定され、既定値は 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 で導入