Main Content

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

dsp.DCBlocker

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

説明

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

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

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

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

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

オブジェクトは、特定の条件下で C/C++ コード生成と SIMD コード生成をサポートします。詳細については、コード生成を参照してください。

作成

説明

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 でのシステム設計を参照してください。

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

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

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

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

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

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

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

依存関係

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

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

依存関係

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

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

依存関係

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

使用法

説明

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)

すべて展開する

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

すべて折りたたむ

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)));

Figure contains an axes object. The axes object with xlabel Time (sec), ylabel Amplitude contains 4 objects of type line. These objects represent Input DC:1.000, IIR DC:0.011, FIR DC:-0.000, Subtract mean DC:-0.000.

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 = spectrumAnalyzer('SampleRate',fs, ...
    'Method','welch',...
    'AveragingMethod','exponential',...
    'SpectrumUnits','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)

アルゴリズム

すべて展開する

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.

拡張機能

バージョン履歴

R2014a で導入

参考

関数

オブジェクト

ブロック