dsp.DCBlocker
入力信号の DC 成分 (オフセット) のブロック
説明
dsp.DCBlocker
System object™ は、入力信号の各チャネル (列) から DC オフセットを削除します。時間の経過に沿って操作が実行され、DC オフセットが継続的に推定および削除されます。
入力信号の DC 成分をブロックするには、次の手順に従います。
dsp.DCBlocker
オブジェクトを作成し、そのプロパティを設定します。関数と同様に、引数を指定してオブジェクトを呼び出します。
System object の機能の詳細については、System object とはを参照してください。
オブジェクトは、特定の条件下で C/C++ コード生成と SIMD コード生成をサポートします。詳細については、コード生成を参照してください。
作成
プロパティ
特に指定がない限り、プロパティは "調整不可能" です。つまり、オブジェクトの呼び出し後に値を変更することはできません。オブジェクトは呼び出すとロックされ、ロックを解除するには関数 release
を使用します。
プロパティが "調整可能" の場合、その値をいつでも変更できます。
プロパティ値の変更の詳細については、System object を使用した MATLAB でのシステム設計を参照してください。
Algorithm
— DC オフセットを推定するアルゴリズム
'IIR'
(既定値) | 'FIR'
| 'CIC'
| 'Subtract mean'
DC オフセットを推定するためのアルゴリズム。次のいずれかを指定します。
'IIR'
–– オブジェクトは狭いローパス楕円フィルターに基づいて再帰推定を使用します。Orderプロパティはフィルターの次数を設定し、NormalizedBandwidthプロパティはその帯域幅を設定します。通常、このアルゴリズムは使用するメモリが FIR アルゴリズムよりも少ないため、より効率的です。'FIR'
–– オブジェクトは、過去の有限個の入力サンプルに基づいて非再帰の移動平均推定を使用します。Lengthプロパティはサンプル数を設定します。FIR フィルターには線形の位相応答があり、信号に対する位相の歪みは生じません。IIR フィルターの方がメモリ消費量が少なく、効率的に実装されます。'CIC'
–– オブジェクトは、遅延差が NormalizedBandwidth プロパティを使用して計算される、間引き係数 1 の CIC 間引きを使用します。このオブジェクトは 2 つのセクションを使って、最初のサイドローブの減衰がフィルターのメイン ローブより少なくとも 25 dB 小さくなるようにします。このアルゴリズムは固定小数点入力を必要とし、HDL コード生成に使用できます。'Subtract mean'
–– オブジェクトは入力行列の列の平均を計算し、入力から平均を減算します。この手法は入力間の状態を保持しません。
関数fvtool
を使用して、IIR、FIR および CIC の各応答を可視化できます。
NormalizedBandwidth
— ローパス IIR または CIC フィルターの正規化帯域幅
0.001
(既定値) | 0 より大きく 1 より小さい実数スカラー
IIR フィルターまたは CIC フィルターの正規化された帯域幅。0 より大きく 1 より小さい実数のスカラーとして指定します。正規化された帯域幅は、入力信号の DC 成分の推定に使用されます。
依存関係
このプロパティは、Algorithmプロパティを 'IIR'
または 'CIC'
に設定した場合にのみ適用されます。
Order
— ローパス IIR 楕円フィルターの次数
6
(既定値) | 3 より大きい整数
DC レベルの推定に使用されるローパス IIR 楕円フィルターの次数。3 より大きい整数で指定します。
依存関係
このプロパティは、Algorithmプロパティを 'IIR'
に設定した場合にのみ適用されます。
Length
— FIR アルゴリズムで使用される過去の入力サンプル数
50
(既定値) | 正の整数
ランニング平均を推定するために FIR アルゴリズムで使用される過去の入力サンプルの数。正の整数で指定します。
依存関係
このプロパティは、Algorithmプロパティを 'FIR'
に設定した場合にのみ適用されます。
使用法
説明
は、入力の各チャネル (列) から DC 成分を削除し、出力を返します。dcblkerOut
= dcblker(input
)
入力引数
input
— 入力信号
ベクトル | 行列 | N 次元配列
DC ブロッカー オブジェクトに対するデータ入力。ベクトル、行列または N 次元配列で指定します。
例: t = (0:0.001:100)'; x = sin(30*pi*t) + 1;
データ型: single
| double
| int8
| int16
| int32
| fi
複素数のサポート: あり
出力引数
dcblkerOut
— DC 成分が削除された信号
ベクトル | 行列 | N 次元配列
DC 成分が削除された信号。ベクトル、行列、または N 次元配列として返されます。出力次元は入力次元と一致します。
データ型: single
| double
| int8
| int16
| int32
| fi
複素数のサポート: あり
オブジェクト関数
オブジェクト関数を使用するには、System object を最初の入力引数として指定します。たとえば、obj
という名前の System object のシステム リソースを解放するには、次の構文を使用します。
release(obj)
例
DC 成分の削除と結果の表示
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)));
DC Blocker 前後の周波数応答
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 成分を推定できます。
IIR
入力信号を IIR ローパス楕円フィルター内を通過させます。
楕円 IIR フィルターは 0.1 dB の通過帯域リップルと 60 dB の阻止帯域の減衰量をもっています。正規化された帯域幅とフィルター次数を指定します。
FIR
入力信号を、過去の入力サンプルの有限数から非再帰の移動平均を使用する FIR フィルター内を通過させます。
FIR フィルター係数は ones(1,Length)/Length
で指定されます。Length
は FIR アルゴリズムの過去の入力サンプル数です。FIR フィルター構造は直接型 I 転置構成です。
CIC
入力信号を CIC フィルター内を通過させます。CIC フィルターは信号を増幅するので、フィルター ゲインが推定されて DC 推定から減算されます。
カスケード接続積分器櫛形 (CIC) フィルターは 2 組の積分器櫛形のペアから構成されています。これらのペアにより、フィルター応答の 1 番目のサイドローブのピークが、メイン ローブのピークに対して少なくとも 25 dB 必ず減衰するようになります。正規化された 3 dB 帯域幅を使用して遅延差を計算します。遅延を使用して CIC フィルターのゲインを決定します。フィルター ゲインの逆数は乗算器として使用されます。この乗算器は、CIC フィルターの出力に適用されます。これにより、DC 推定の集約ゲインが必ず 0 dB になります。
以下の式は、フィルターの集約振幅応答と乗算器を特徴付けています。
Bnorm は 0 < Bnorm < 1 となる正規化された帯域幅。
M はサンプル数で示される遅延差。
N は 2 と等しいセクション数。
遅延差 M を |H(ejω)| < 1/√2 となるように最小の整数に設定します。M が得られたら、CIC フィルターのゲインを MN として計算します。したがって、フィルター ゲインを正確に補正するために、乗算器を (1/M)N に設定します。
平均の減算
入力信号の各列の平均値を計算し、入力から平均を減算します。たとえば、入力が [1 2 3 4; 3 4 5 6] の場合、このモードに設定された DC ブロッカーは [-1 -1 -1 -1; 1 1 1 1] を出力します。
参照
[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.
拡張機能
C/C++ コード生成
MATLAB® Coder™ を使用して C および C++ コードを生成します。
使用上の注意および制限:
MATLAB コード生成における System object (MATLAB Coder)を参照してください。
このオブジェクトは、入力信号のデータ型が single
または double
である場合、Intel® AVX2 コード置換ライブラリを使用した SIMD コード生成もサポートします。
SIMD テクノロジーにより、生成コードのパフォーマンスが大幅に向上します。詳細については、SIMD コード生成を参照してください。このオブジェクトから SIMD コードを生成するには、Use Intel AVX2 Code Replacement Library to Generate SIMD Code from MATLAB Algorithmsを参照してください。
HDL コード生成
HDL Coder™ を使用して FPGA 設計および ASIC 設計のための VHDL、Verilog および SystemVerilog のコードを生成します。
このソフトウェアは、double
および single
データ型をシミュレーションではサポートしますが、HDL コード生成ではサポートしません。
事前定義された System object からの HDL コードを生成するには、ビタビ復号化器 System object からの HDL コード生成 (HDL Coder)を参照してください。
バージョン履歴
R2014a で導入
MATLAB コマンド
次の MATLAB コマンドに対応するリンクがクリックされました。
コマンドを MATLAB コマンド ウィンドウに入力して実行してください。Web ブラウザーは MATLAB コマンドをサポートしていません。
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)