Main Content

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

iqimbal

入力信号への I/Q 不均衡の適用

説明

y = iqimbal(x,A) は、I/Q 振幅の不均衡 A を入力信号 x に適用します。

y = iqimbal(x,A,P) は、I/Q 振幅の不均衡 A と位相の不均衡 P を入力信号 x に適用します。

すべて折りたたむ

16-QAM 信号を生成します。散布図を表示します。

x = qammod(randi([0 15],1000,1),16);
h = scatterplot(x);
hold on

10 dB の振幅の不均衡を適用します。振幅の不均衡が正の場合、コンスタレーションが水平方向に広がります。

y = iqimbal(x,10);
scatterplot(y,1,0,'ro',h)

-10 dB の振幅の不均衡を適用します。振幅の不均衡が負の場合、コンスタレーションが垂直方向に広がります。

z = iqimbal(x,-10);
scatterplot(z,1,0,'k*',h)
hold off

2 つのチャネルをもつ 16-QAM 信号を生成します。

x = qammod(randi([0 15],1000,2),16);

3 dB の振幅の不均衡および 10 度の位相の不均衡を最初のチャネルに適用します。–5 dB の振幅の不均衡および –15 度の位相の不均衡を 2 番目のチャネルに適用します。

y = iqimbal(x,[3 -5],[10 -15]);

劣化した信号の両方のチャネルのコンスタレーション ダイアグラムをプロットします。

h = scatterplot(y(:,1),1,0,'b*');
hold on
scatterplot(y(:,2),1,0,'ro',h)
hold off

最初のチャネルは水平方向に広がり、2 番目のチャネルは垂直方向に広がっています。

1 dB、5 度の I/Q 不均衡を QPSK 信号に適用します。次に、DC オフセットを適用します。スペクトル アナライザーを使用して、オフセットを可視化します。

QPSK シーケンスを生成します。

x = pskmod(randi([0 3],1e4,1),4,pi/4);

1 dB の振幅の不均衡および 5 度の位相の不均衡を QPSK 信号に適用します。0.5 + 0.3i の DC オフセットを適用します。

y = iqimbal(x,1,5);
z = y + complex(0.5,0.3);

劣化した信号のスペクトルをプロットします。

sa = dsp.SpectrumAnalyzer('SampleRate',1000,'YLimits',[-50 30]);
sa(z)

対応する散布図を確認します。

scatterplot(z)
grid

I/Q 不均衡と DC オフセットの影響を観察できます。

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

data = randi([0 7],2000,1);
txSig = pskmod(data,8,pi/8);

AWGN チャネルを通して送信された信号を渡します。I/Q 不均衡を適用します。

noisySig = awgn(txSig,20);
rxSig = iqimbal(noisySig,2,20);

最後の 1000 個のシンボルのみを表示するコンスタレーション ダイアグラム オブジェクトを作成します。劣化した信号のコンスタレーション ダイアグラムをプロットします。

cd = comm.ConstellationDiagram('ReferenceConstellation',pskmod(0:7,8,pi/8), ...
    'SymbolsToDisplaySource','Property','SymbolsToDisplay',1000);
cd(rxSig)

comm.IQImbalanceCompensator オブジェクトを使用して、I/Q 不均衡を補正します。補正後に、信号のコンスタレーション ダイアグラムをプロットします。

iqComp = comm.IQImbalanceCompensator('StepSize',1e-3);
compSig = iqComp(rxSig);

cd(compSig)

補償器により I/Q 不均衡が除去されます。

入力引数

すべて折りたたむ

入力信号。列ベクトルまたは行列として指定します。この関数はマルチチャネル演算をサポートします。ここで、列数はチャネル数に対応します。

例: pskmod(randi([0 3],100,1),4,pi/4)

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

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

  • A がスカラーの場合、関数は同じ振幅の不均衡を各チャネルに適用します。

  • A がベクトルの場合、各要素は、入力信号の対応する列 (チャネル) に適用された振幅の不均衡を指定します。A の要素数は x の列数と等しくなければなりません。

例: 3

例: [0 5]

データ型: single | double

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

  • P を省略した場合、ゼロ度の位相の不均衡が使用されます。

  • P がスカラーの場合、関数は同じ位相の不均衡を各チャネルに適用します。

  • P がベクトルの場合、各要素は、入力信号の対応する列 (チャネル) に適用された位相の不均衡を指定します。P の要素数は x の列数と等しくなければなりません。

例: 10

例: [2.5 7]

データ型: single | double

出力引数

すべて折りたたむ

出力信号。x と同じ次元をもつベクトルまたは行列として返されます。y の列数はチャネル数に対応します。

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

アルゴリズム

関数 iqimbal は、入力信号に I/Q 振幅および位相の不均衡を適用します。

振幅の不均衡 Ia を dB で指定すると、不均衡によって生じるゲイン g が次のように定義されます。

ggr+igi=[100.5Ia20]+i[100.5Ia20].

入力信号 x に I/Q 不均衡を適用すると、出力信号 y は次のようになります。

y=Re(x)grei0.5Ip(π/180)+iIm(x)giei0.5Ip(π/180),

ここで、g は不均衡によるゲイン、Ip は位相の不均衡 (度) です。

拡張機能

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

R2016b で導入