最新のリリースでは、このページがまだ翻訳されていません。 このページの最新版は英語でご覧になれます。

dsp.DCBlocker

入力信号の DC 成分 (オフセット) のブロック

説明

dsp.DCBlocker System object™ は、入力信号の各チャネル (列) から DC オフセットを削除します。時間の経過に沿って操作が実行され、DC オフセットが継続的に推定および削除されます。

入力信号の DC 成分をブロックするには、次の手順に従います。

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

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

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

作成

説明

dcblker = dsp.DCBlocker は、入力信号の各チャネル (列) の DC 成分をブロックする DC ブロッカー System object、dcblker を作成します。

dcblker = dsp.DCBlocker(Name,Value) は、指定の各プロパティが指定の値に設定された DC ブロッカー System object の dcblker を作成します。各プロパティを、一重引用符で囲みます。

例: dcblker = dsp.DCBlocker('Algorithm','FIR')

プロパティ

すべて展開する

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

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

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

DC オフセットを推定するためのアルゴリズム。次のいずれかを指定します。

  • 'IIR' –– オブジェクトは狭いローパス楕円フィルターに基づいて再帰推定を使用します。Orderプロパティはフィルターの次数を設定し、NormalizedBandwidthプロパティはその帯域幅を設定します。通常、このアルゴリズムは使用するメモリが FIR アルゴリズムよりも少ないため、より効率的です。

  • 'FIR' –– オブジェクトは、過去の有限個の入力サンプルに基づいて非再帰の移動平均推定を使用します。Lengthプロパティはサンプル数を設定します。FIR フィルターには線形の位相応答があり、信号に対する位相の歪みは生じません。IIR フィルターの方がメモリ消費量が少なく、効率的に実装されます。

  • 'CIC' –– オブジェクトは、遅延差が NormalizedBandwidth プロパティを使用して計算される、間引き係数 1 の CIC 間引きを使用します。このオブジェクトは 2 つのセクションを使って、最初のサイドローブの減衰がフィルターのメイン ローブより少なくとも 25 dB 小さくなるようにします。このアルゴリズムは固定小数点入力を必要とし、HDL コード生成に使用できます。詳細は、HDL コード生成を参照してください。

  • 'Subtract mean' –– オブジェクトは入力行列の列の平均を計算し、入力から平均を減算します。この手法は入力間の状態を保持しません。

関数fvtoolを使用して、IIR、FIR および CIC の各応答を可視化できます。

IIR フィルターまたは CIC フィルターの正規化された帯域幅。0 より大きく 1 より小さい実数のスカラーで指定します。正規化された帯域幅は、入力信号の DC 成分の推定に使用されます。

依存関係

このプロパティは、Algorithmプロパティを 'IIR' または 'CIC' に設定した場合にのみ適用されます。

DC レベルの推定に使用されるローパス IIR 楕円フィルターの次数。3 より大きい整数で指定します。

依存関係

このプロパティは、Algorithmプロパティを 'IIR' に設定した場合にのみ適用されます。

移動平均を推定するために FIR アルゴリズムで使用される過去の入力サンプルの数。正の整数で指定します。

依存関係

このプロパティは、Algorithmプロパティを 'FIR' に設定した場合にのみ適用されます。

使用法

R2016b より前のバージョンでは、関数 step を使用して System object アルゴリズムを実行します。step に対する引数は作成したオブジェクトであり、この節で示す引数が次に続きます。

たとえば、y = step(obj,x)y = obj(x) は同等の演算を実行します。

説明

dcblkerOut = dcblker(input) は、入力の各チャネル (列) から DC 成分を削除し、出力を返します。

入力引数

すべて展開する

DC ブロッカー オブジェクトに対するデータ入力。ベクトル、行列または N 次元配列で指定します。

例: t = (0:0.001:100)'; x = sin(30*pi*t) + 1;

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

出力引数

すべて展開する

DC 成分が削除された信号。ベクトル、行列、または N 次元配列として返されます。出力次元は入力次元と一致します。

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

オブジェクト関数

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

release(obj)

すべて展開する

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

すべて展開する

メモ: R2016a 以前を使用している場合、それぞれのオブジェクトの呼び出しを等価な step 構文で置き換えてください。たとえば、obj(x) は step(obj,x) になります。

IIR、FIR、および Subtract mean の各推定アルゴリズムを使用して入力信号の DC 成分を削除します。

15 Hz のトーン、25 Hz のトーンおよび DC オフセットからなる信号を作成します。

t = (0:0.001:100)';
x = sin(30*pi*t) + 0.33*cos(50*pi*t) + 1;

3 つの推定アルゴリズムに対応する 3 つの DC ブロッカー オブジェクトを作成します。

dc1 = dsp.DCBlocker('Algorithm','IIR','Order', 6);
dc2 = dsp.DCBlocker('Algorithm','FIR','Length', 100);
dc3 = dsp.DCBlocker('Algorithm','Subtract mean');

1 秒ごとに入力信号が DC Blocker を通過するようにします。DC ブロッカーを 1 秒のインクリメントで実装することにより、収束時間の差を観察できます。

for idx = 1 : 100
    range = (1:1000) + 1000*(idx-1);
    y1 = dc1(x(range));          % IIR estimate
    y2 = dc2(x(range));          % FIR estimate
    y3 = dc3(x(range));          % Subtract mean
end

3 つの DC ブロッカーの最初の 1 秒の入出力データをプロットし、各信号の平均値を表示します。3 つのアルゴリズム タイプの平均値は、FIR アルゴリズムと Subtract mean アルゴリズムがよりすばやく収束していることを示しています。

plot(t(1:1000),x(1:1000), ...
    t(1:1000),y1, ...
    t(1:1000),y2, ...
    t(1:1000),y3);
xlabel('Time (sec)')
ylabel('Amplitude')
legend(sprintf('Input DC:%.3f',mean(x)), ...
    sprintf('IIR DC:%.3f',mean(y1)), ...
    sprintf('FIR DC:%.3f',mean(y2)), ...
    sprintf('Subtract mean DC:%.3f',mean(y3)));

メモ: R2016a 以前を使用している場合、それぞれのオブジェクトの呼び出しを等価な step 構文で置き換えてください。たとえば、obj(x) は step(obj,x) になります。

DC オフセットをもつ入力信号のスペクトルと、DC ブロッカーを適用した後の同じ信号のスペクトルを比較します。DC ブロッカーで FIR 推定アルゴリズムを使用できるようにします。

3 つのトーンから成る、1 の DC オフセットをもつ入力信号を作成します。サンプリング周波数を 1 kHz に設定し、信号持続時間を 100 秒に設定します。

fs = 1000;
t = (0:1/fs:100)';
x = sin(30*pi*t) + 0.67*sin(40*pi*t) + 0.33*sin(50*pi*t) + 1;

FIR アルゴリズムを使用して DC オフセットを推定する DC ブロッカー オブジェクトを作成します。

dcblker = dsp.DCBlocker('Algorithm','FIR','Length',100);

パワー単位を dBW、周波数範囲を [-30 30] に設定してスペクトル アナライザーを作成し、入力信号の周波数応答を表示します。関数 clone を使用して 2 番目のスペクトル アナライザーを作成し、出力応答を表示します。次に、スペクトル アナライザーの Title プロパティを使用してスペクトル アナライザーにラベルを付けます。

hsa = dsp.SpectrumAnalyzer('SampleRate',fs, ...
    'PowerUnits','dBW','FrequencySpan','Start and stop frequencies',...
    'StartFrequency',-30,'StopFrequency',30,'YLimits',[-200 20],...
    'Title','Signal Spectrum');

hsb = clone(hsa);
hsb.Title = 'Signal Spectrum After DC Blocker';

入力信号 x を DC Blocker の中を通過させて出力信号 y を生成します。

y = dcblker(x);

最初のスペクトル アナライザーを使用して、入力信号の周波数特性を表示します。15 Hz、20 Hz および 25 Hz の各トーンと DC 成分がはっきりと観測できます。

hsa(x)

2 番目のスペクトル アナライザーを使用して出力信号の周波数特性を表示します。DC 成分が削除されています。

hsb(y)

メモ: R2016a 以前を使用している場合、それぞれのオブジェクトの呼び出しを等価な step 構文で置き換えてください。たとえば、obj(x) は step(obj,x) になります。

DC ブロッカーを使用して固定小数点信号から DC オフセットを削除します。DC ブロッカーは CIC ローパス フィルター処理法を使用して DC オフセットを推定します。

ランダムなバイナリ データを生成します。

data = randi([0 1],1.2e5,1);

64-QAM 変調器 System object を作成し、そのアルゴリズムを実行してデータを変調します。

mod = comm.RectangularQAMModulator('ModulationOrder',64, ...
                                    'BitInput',true);
modOut = mod(data);

変調器のコンスタレーション基準点を決定します。

cRefPts = constellation(mod);

適切な System object を使用し、そのアルゴリズムを実行して、変調された信号に AWGN を追加します。

noise = comm.AWGNChannel('EbNo', 14.75, ...
                          'BitsPerSymbol', 6, ...
                          'SignalPower', 42, ...
                          'SamplesPerSymbol', 1);
noisyOut = noise(modOut);

コンスタレーション ダイアグラム オブジェクトを使用してノイズを含む信号の散布図を表示します。赤いプラス マーカーは理想的なシンボルの位置を示します。

constDiag = comm.ConstellationDiagram('Name','Noisy Constellation',...
    'ReferenceConstellation',cRefPts, ...
    'XLimits',[-8 8],'YLimits',[-8 8]);
constDiag(noisyOut)

1 の DC オフセットを変調された信号に追加します。

noisyOut = noisyOut + 1;

信号のスペクトルを表示します。0 kHz のスパイクは導入されたオフセットによるものです。

specAna = dsp.SpectrumAnalyzer(...
  'YLimits',[-40,40], ...
  'Title','Noisy Spectrum with DC Offset');
specAna(noisyOut);

コンスタレーション上で DC オフセットの効果を表示します。コンスタレーションが 1 単位分右へシフトしています。

constDiag(noisyOut)
constDiag.Name = 'Noisy Constellation with DC Offset';

ノイズを含んだ信号を 16 ビットの語長と 11 ビットの小数部の長さをもつ符号付き固定小数点オブジェクトに変換します。

noisyOut = fi(noisyOut,1,16,11);

DC ブロッカー オブジェクトを作成してオフセットを削除します。オブジェクトは CIC アルゴリズムを使用して DC オフセットを推定します。

dcblker = dsp.DCBlocker('Algorithm','CIC');

CIC 推定フィルターの周波数応答を可視化します。

fvtool(dcblker)

オフセットされた、ノイズを含んだ信号を DC ブロッカーの中を通過させ、その出力を double に変換します。

dcBlockerOutFxP = dcblker(noisyOut);
dcBlockerOut = double(dcBlockerOutFxP);

信号スペクトルをプロットして DC オフセットの削除による影響を表示します。0 kHz のスパイクが削除されています。

specAna(dcBlockerOut);
specAna.Title = 'Noisy Spectrum with DC Removed';

コンスタレーションをプロットし、信号が左にシフト バックしたことを確認します。

constDiag(dcBlockerOut)
constDiag.Name = 'Noisy Constellation with DC Removed';

DC オフセットの削除による影響を確認するには、DC ブロッカー オブジェクトの NormalizedBandwidth プロパティの値を変更します。

アルゴリズム

すべて展開する

DC ブロッカーは入力信号から DC 成分を差し引きます。IIR、FIR、CIC、または Subtract mean アルゴリズムを使用して DC 成分を推定できます。

参照

[1] Nezami, M. “Performance Assessment of Baseband Algorithms for Direct Conversion Tactical Software Defined Receivers: I/Q Imbalance Correction, Image Rejection, DC Removal, and Channelization.” MILCOM, 2002.

拡張機能

参考

関数

System object

ブロック

R2014a で導入