dsp.CICDecimator
カスケード接続積分器櫛形 (CIC) フィルターを使用して信号を間引く
説明
dsp.CICDecimator
System object™ は、カスケード接続積分器櫛形 (CIC) 間引きフィルターを使用して入力信号を間引きます。CIC 間引きフィルター構造は、カスケード接続積分器の N セクションで構成され、その後に R の係数によるレート変換、カスケード接続櫛形フィルターの N セクションが続きます。詳細については、アルゴリズムを参照してください。NumSections プロパティは、CIC フィルター内のセクション数である N を指定します。DecimationFactor プロパティは、間引き係数である R を指定します。関数 getFixedPointInfo
は、固定小数点セクションおよび dsp.CICDecimator
System object の出力の語長と小数部の長さを返します。関数 generatehdl
を使用して、この System object の HDL コードを生成することもできます。
メモ
このオブジェクトには Fixed-Point Designer™ のライセンスが必要です。
CIC フィルターを使用して信号を間引くには、以下を行います。
dsp.CICDecimator
オブジェクトを作成し、そのプロパティを設定します。関数と同様に、引数を指定してオブジェクトを呼び出します。
System object の機能の詳細については、System object とはを参照してください。
作成
構文
説明
は、CIC 間引きフィルターを入力信号に適用する CIC 間引き System object を作成します。cicDecim
= dsp.CICDecimator
は、cicDecim
= dsp.CICDecimator(R
,M
,N
)DecimationFactor
プロパティを R
、DifferentialDelay
プロパティを M
、NumSections
プロパティを N
に設定して、CIC 間引きオブジェクトを作成します。
は、指定の各プロパティが指定の値に設定された CIC 間引きオブジェクトを作成します。各プロパティ名を一重引用符で囲みます。前の任意の入力引数を組み合わせてこの構文を使用できます。cicDecim
= dsp.CICDecimator(Name,Value
)
プロパティ
特に指定がない限り、プロパティは "調整不可能" です。つまり、オブジェクトの呼び出し後に値を変更することはできません。オブジェクトは呼び出すとロックされ、ロックを解除するには関数 release
を使用します。
プロパティが "調整可能" の場合、その値をいつでも変更できます。
プロパティ値の変更の詳細については、System object を使用した MATLAB でのシステム設計を参照してください。
DecimationFactor
— 間引き係数
2
(既定値) | 正の整数
入力信号の間引きに使用する係数。正の整数として指定します。
データ型: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
DifferentialDelay
— フィルターの櫛形セクションの遅延差
1
(既定値) | 正の整数
フィルターの各櫛形セクションで使用されている遅延差の値。正の整数として指定します。詳細については、アルゴリズムを参照してください。遅延差が組み込み整数データ型である場合、間引き係数は同じ整数データ型または double
でなければなりません。たとえば、遅延差が int8
である場合、間引き係数は int8
または double
でなければなりません。
データ型: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
NumSections
— 積分器セクションと櫛形セクションの数
2
(既定値) | 正の整数
CIC フィルターの積分器セクションと櫛形セクションの数。正の整数として指定します。この数は、フィルターの櫛形部分または積分器部分のいずれかのセクション数を示しています。CIC フィルター内のセクションの合計数は、このプロパティで与えられたセクション数の 2 倍です。
データ型: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
FixedPointDataType
— 固定小数点のプロパティ指定
Full precision
(既定値) | Minimum section word lengths
| Specify word lengths
| Specify word and fraction lengths
固定小数点のプロパティ指定。次のいずれかを指定します。
Full precision
– CIC フィルター セクションおよびオブジェクト出力の語長と小数部の長さは完全精度で動作します。Minimum section word lengths
– OutputWordLength プロパティを使用して出力語長を指定します。このオブジェクトにより、可能な範囲内での最高精度を提供するフィルター セクションのデータ型と出力の小数部の長さが決定されます。詳細については、getFixedPointInfo
とcicDecimOut
引数を参照してください。Specify word lengths
– SectionWordLengths および OutputWordLength プロパティを使用して、CIC フィルター セクションとオブジェクト出力の語長を指定します。このオブジェクトにより、可能な範囲内での最高精度を提供する、対応する小数部の長さが決定されます。詳細については、getFixedPointInfo
とcicDecimOut
引数を参照してください。Specify word and fraction lengths
– SectionWordLengths、SectionFractionLengths、OutputWordLength、および OutputFractionLength の各プロパティを使用して、CIC フィルター セクションとオブジェクト出力の語長と小数部の長さを指定します。
SectionWordLengths
— 各フィルター セクションの固定小数点語長
[16 16 16 16]
(既定値) | スカラー | ベクトル
各フィルター セクションに使用する固定小数点語長。スカラーまたは整数の行ベクトルとして指定します。語長は 2 以上でなければなりません。スカラーを指定した場合、値はフィルターのすべてのセクションに適用されます。ベクトルを指定した場合、そのベクトルの長さは NumSections
の 2 倍でなければなりません。
例: 32
例: [32 32 32 32]
依存関係
このプロパティは、FixedPointDataType
プロパティを 'Specify word lengths'
または 'Specify word and fraction lengths'
に設定した場合に適用されます。
データ型: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
SectionFractionLengths
— 各フィルター セクションの固定小数点の小数部の長さ
0
(既定値) | スカラー | ベクトル
各フィルター セクションに使用する固定小数点の小数部の長さ。スカラーまたは整数の行ベクトルとして指定します。小数部の長さは負、0、または正です。スカラーを指定した場合、値はフィルターのすべてのセクションに適用されます。ベクトルを指定した場合、そのベクトルの長さは NumSections
の 2 倍でなければなりません。
例: -2
例: [-2 0 5 8]
依存関係
このプロパティは、FixedPointDataType
プロパティを 'Specify word and fraction lengths'
に設定した場合に適用されます。
データ型: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
OutputWordLength
— フィルター出力の固定小数点語長
32
(既定値) | スカラー整数
フィルター出力に使用する固定小数点語長。2 以上のスカラー整数として指定します。
依存関係
このプロパティは、FixedPointDataType
プロパティが 'Minimum section word lengths'
、'Specify word lengths'
、または 'Specify word and fraction lengths'
に設定されている場合に適用されます。
データ型: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
OutputFractionLength
— フィルター出力の固定小数点の小数部の長さ
0
(既定値) | スカラー整数
フィルター出力に使用する固定小数点の小数部の長さ。スカラー整数として指定します。
依存関係
このプロパティは、FixedPointDataType
プロパティを 'Specify word and fraction lengths'
に設定した場合に適用されます。
データ型: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
使用法
説明
は、CIC 間引きを使用して入力を間引きます。cicDecimOut
= cicDecim(input
)
入力引数
input
— データ入力
ベクトル | 行列
データ入力。ベクトルまたは行列として指定します。入力の行数はDecimationFactorの倍数でなければなりません。入力のデータ型が single
または double
の場合、固定小数点データ型に関連するプロパティ設定は無視されます。
データ型: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
| fi
複素数のサポート: あり
出力引数
cicDecimOut
— CIC 間引き出力
ベクトル | 行列
間引きされた出力。ベクトルまたは行列として返されます。出力のフレーム サイズは、(1 ∕ DecimationFactor
) と入力フレーム サイズを乗算したものと等しくなります。出力データの実数/複素数は、入力データの実数/複素数と一致します。入力が single
または double
の場合、出力データ型は入力データ型と一致します。
入力のデータ型が組み込み整数データ型または固定小数点データ型の場合、出力の語長と小数部の長さは、FixedPointDataTypeプロパティを通じて選択する固定小数点データ型の設定によって異なります。
完全精度
FixedPointDataType
が 'Full precision'
に設定されている場合、次の関係が適用されます。
ここで、
WLoutput –– 出力データの語長。
FLoutput –– 出力データの小数部の長さ。
WLinput –– 入力データの語長。
FLinput –– 入力データの小数部の長さ。
NumSect –– NumSectionsプロパティで指定される CIC フィルターのセクション数。
WLinput と FLinput は、オブジェクト アルゴリズムに渡すデータ入力から継承されます。組み込み整数入力の場合、小数部の長さは 0 です。
最小語長
FixedPointDataType
プロパティが 'Minimum section word lengths'
に設定されている場合、出力の語長はOutputWordLengthプロパティに指定する値になります。出力の小数部の長さ FLoutput は、次の式で与えられます。
語長と小数部の長さの指定
FixedPointDataType
プロパティが 'Specify word and fraction lengths'
に設定されている場合、出力語長と小数部の長さは、OutputWordLengthプロパティとOutputFractionLengthプロパティで指定する値になります。
語長の指定
FixedPointDataType
プロパティが 'Specify word lengths'
に設定されている場合、出力語長は OutputWordLength
プロパティで指定する値になります。出力の小数部の長さ FLoutput は、次の式で与えられます。
データ型: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
| fi
複素数のサポート: あり
オブジェクト関数
オブジェクト関数を使用するには、System object を最初の入力引数として指定します。たとえば、obj
という名前の System object のシステム リソースを解放するには、次の構文を使用します。
release(obj)
dsp.CICDecimator に固有
generatehdl | Generate HDL code for quantized DSP filter (requires Filter Design HDL Coder) |
impz | 離散時間フィルター System object のインパルス応答 |
freqz | 離散時間フィルター System object の周波数応答 |
freqzmr | Compute DTFT approximation of the impulse response of a multirate or a single-rate filter |
phasez | 離散時間フィルター System object の位相応答 (アンラップされた位相応答) |
fvtool | DSP フィルターの周波数応答の可視化 |
gain | Gain of CIC filter System object |
getFixedPointInfo | Get fixed-point word and fraction lengths |
info | Information about filter System object |
outputDelay | Determine output delay of single-rate or multirate filter |
このオブジェクトがサポートしているフィルター解析法のリストについては、MATLAB® コマンド プロンプトに「dsp.CICDecimator.helpFilterAnalysis
」と入力します。対応する関数リファレンス ページについては、Analysis Functions for Filter System Objectsを参照してください。
例
CICDecimator オブジェクトを使用した信号の間引き
DecimationFactor
を 4 に設定した dsp.CICDecimator
System object™ を作成します。信号を 44.1 kHz から 11.025 kHz に間引きます。
cicdec = dsp.CICDecimator(4);
cicdec.FixedPointDataType = 'Minimum section word lengths';
cicdec.OutputWordLength = 16;
44.1e3 Hz のサンプリング周波数を含む 1,024 個のサンプルの固定小数点正弦波入力信号を作成します。
Fs = 44.1e3;
% 0.0232 sec signal
n = (0:1023)';
x = fi(sin(2*pi*1e3/Fs*n),true,16,15);
dsp.SignalSource
オブジェクトを作成します。
src = dsp.SignalSource(x,64);
フレームごとに 16 個のサンプルを使用して出力を間引きます。
y = zeros(16,16); for ii = 1:16 y(ii,:) = cicdec(src()); end
元の信号と間引き後の信号の最初のフレームをプロットします。出力レイテンシは 2 サンプルです。
D = cicdec.DecimationFactor; diffDelay = cicdec.DifferentialDelay; NumSect = cicdec.NumSections; gainCIC = ... (D*diffDelay)^NumSect; stem(n(1:56)/Fs,double(x(4:59))) hold on; stem(n(1:14)/(Fs/D),double(y(1,3:end))/gainCIC,... 'r','filled') xlabel('Time (sec)') ylabel('Signal Amplitude') legend('Original signal',... 'Decimated signal',... 'Location','north') hold off;
info
メソッドを 'long'
形式で使用して、固定小数点フィルター セクションとフィルター出力の語長と小数部の長さを取得します。
info(cicdec,'long')
ans = 'Discrete-Time FIR Multirate Filter (real) ----------------------------------------- Filter Structure : Cascaded Integrator-Comb Decimator Decimation Factor : 4 Differential Delay : 1 Number of Sections : 2 Stable : Yes Linear Phase : Yes (Type 1) Implementation Cost Number of Multipliers : 0 Number of Adders : 4 Number of States : 4 Multiplications per Input Sample : 0 Additions per Input Sample : 2.5 Fixed-Point Info Section word lengths : 20 19 19 18 Section fraction lengths : 15 14 14 13 Output word length : 16 Output fraction length : 11 '
セクションと出力の語長と小数部の長さの決定
関数 getFixedPointInfo
を使用して、固定小数点セクションと dsp.CICDecimator
および dsp.CICInterpolator
System object の出力の語長と小数部の長さを決定することができます。フィルター セクションと出力のデータ型は、フィルター System object™ の FixedPointDataType
プロパティによって異なります。
完全精度
dsp.CICDecimator
オブジェクトを作成します。NumSections
プロパティの既定値は 2 です。この値は、2 つの積分器セクションと櫛形セクションがあることを示しています。関数 getFixedPointInfo
によって返される WL ベクトルと FL ベクトルにはそれぞれ 5 個の要素が含まれます。最初の 2 つの要素は 2 つの積分器セクションを表します。3 番目と 4 番目の要素は 2 つの櫛形セクションを表します。最後の要素はフィルター出力を表します。
cicD = dsp.CICDecimator
cicD = dsp.CICDecimator with properties: DecimationFactor: 2 DifferentialDelay: 1 NumSections: 2 FixedPointDataType: 'Full precision'
既定では、オブジェクトの FixedPointDataType
プロパティは 'Full precision'
に設定されます。入力数値型 nt
を使用してこのオブジェクトで関数 getFixedPointInfo
を呼び出すと、次の語長と小数部の長さを持つベクトルが生成されます。
nt = numerictype(1,16,15)
nt = DataTypeMode: Fixed-point: binary point scaling Signedness: Signed WordLength: 16 FractionLength: 15
[WLs,FLs] = getFixedPointInfo(cicD,nt) %#ok
WLs = 1×5
18 18 18 18 18
FLs = 1×5
15 15 15 15 15
語長と小数部の長さの計算方法の詳細については、"出力引数" の説明を参照してください。
入力をアルゴリズムに渡すことで cicD
オブジェクトをロックする場合、nt
引数を関数 getFixedPointInfo
に渡す必要はありません。
input = int64(randn(8,1))
input = 8x1 int64 column vector
1
2
-2
1
0
-1
0
0
output = cicD(input)
output = 0 1 3 0 DataTypeMode: Fixed-point: binary point scaling Signedness: Signed WordLength: 66 FractionLength: 0
[WLs,FLs] = getFixedPointInfo(cicD) %#ok
WLs = 1×5
66 66 66 66 66
FLs = 1×5
0 0 0 0 0
出力とセクションの語長は、入力の語長 (この場合は 64) とセクション数 (この場合は 2) の合計です。入力が組み込み整数であるため、出力およびセクションの小数部の長さは 0 です。
最小語長
オブジェクトを解放し、FixedPointDataType
プロパティを 'Minimum section word lengths'
に変更します。入力が固定小数点データ fi(randn(8,2),1,24,15)
の場合、セクションと出力の固定小数点情報を決定します。
release(cicD);
cicD.FixedPointDataType = 'Minimum section word lengths'
cicD = dsp.CICDecimator with properties: DecimationFactor: 2 DifferentialDelay: 1 NumSections: 2 FixedPointDataType: 'Minimum section word lengths' OutputWordLength: 32
inputF = fi(randn(8,2),1,24,15)
inputF = 3.5784 -0.1241 2.7694 1.4897 -1.3499 1.4090 3.0349 1.4172 0.7254 0.6715 -0.0630 -1.2075 0.7148 0.7172 -0.2050 1.6302 DataTypeMode: Fixed-point: binary point scaling Signedness: Signed WordLength: 24 FractionLength: 15
[WLs, FLs] = getFixedPointInfo(cicD,numerictype(inputF)) %#ok
WLs = 1×5
26 26 26 26 32
FLs = 1×5
15 15 15 15 21
語長と小数部の長さの指定
FixedPointDataType
プロパティを 'Specify word and fraction lengths'
に変更します。関数 getFixedPointInfo
を使用して、固定小数点情報を決定します。
cicD.FixedPointDataType = 'Specify word and fraction lengths'
cicD = dsp.CICDecimator with properties: DecimationFactor: 2 DifferentialDelay: 1 NumSections: 2 FixedPointDataType: 'Specify word and fraction lengths' SectionWordLengths: [16 16 16 16] SectionFractionLengths: 0 OutputWordLength: 32 OutputFractionLength: 0
[WLs, FLs] = getFixedPointInfo(cicD,numerictype(inputF)) %#ok
WLs = 1×5
16 16 16 16 32
FLs = 1×5
0 0 0 0 0
セクションと出力の語長と小数部の長さは、cicD
オブジェクトのそれぞれの固定小数点プロパティのとおりに割り当てられます。これらの値は入力数値型によって決まりません。確認するには、numerictype
入力引数を渡さずに関数 getFixedPointInfo
を呼び出します。
[WLs, FLs] = getFixedPointInfo(cicD) %#ok
WLs = 1×5
16 16 16 16 32
FLs = 1×5
0 0 0 0 0
語長の指定
フィルター セクションと出力の語長を指定するには、FixedPointDataType
プロパティを 'Specify word lengths'
に設定します。
cicD.FixedPointDataType = 'Specify word lengths'
cicD = dsp.CICDecimator with properties: DecimationFactor: 2 DifferentialDelay: 1 NumSections: 2 FixedPointDataType: 'Specify word lengths' SectionWordLengths: [16 16 16 16] OutputWordLength: 32
関数 getFixedPointInfo
には入力数値型が必要です。この情報がセクションとワードの小数部の長さの計算に使用されるためです。
[WLs, FLs] = getFixedPointInfo(cicD,numerictype(inputF))
WLs = 1×5
16 16 16 16 32
FLs = 1×5
5 5 5 5 21
関数による語長や小数部の長さの計算方法の詳細については、"出力引数" の説明を参照してください。
詳細
CIC フィルター
CIC フィルターは、櫛形部分と積分器部分で構成された、線形位相 FIR フィルターの最適化されたクラスです。
CIC 間引きフィルターは、概念的に、ローパス アンチイメージング フィルターであるシングル レート CIC フィルター H(z) およびそれに続くダウンサンプラーによって与えられます。CIC 間引きフィルターは、カスケード接続積分器櫛形 (CIC) フィルターを使用して、入力信号のサンプル レートを整数係数によって低減します。
より効率的な実装では、シングル レート CIC フィルター H(z) は次のように因子分解されます。
ここで、
HI は、積分器の N 段階を含むフィルターの積分器部分の伝達関数です。
HC は、カスケード接続された櫛形フィルターの N 個のセクションの伝達関数で、それぞれの幅は RM です。
N はセクション数です。CIC フィルターのセクション数は、フィルターの櫛形部分 "または" 積分器部分のいずれかのセクション数として定義されます。この値は、フィルター全体のセクションの合計数を表していません。
R は間引き係数です。
M は遅延差です。
マルチレート実現全体では、アルゴリズムは間引きのノーブル恒等式を適用し、カスケード接続積分器の N 個のセクションの後に続くようにレート変換係数 R を移動させます。結果として得られるフィルターの伝達関数は、次の式で求められます。
マルチレート実装を示すブロック線図については、アルゴリズムを参照してください。
固定小数点
固定小数点信号のブロック線図は、dsp.CICDecimator
オブジェクトが固定小数点信号に対して使用するデータ型を示しています。
ここで、
secNT = numerictype(1,secWL,secFL)
outNT = numertictype(1,outWL,outFL)
secWL は、SectionWordLengthsプロパティで指定するセクションの語長です。
secFL は、SectionFractionLengthsプロパティで指定するセクションの小数部の長さです。
outWL は、OutputWordLengthプロパティで指定する出力語長です。
outFL は、OutputFractionLengthプロパティで指定する出力の小数部の長さです。
このブロック線図の NumSections
の値は 2 です。
アルゴリズム
CIC 間引きフィルター
詳細の CIC 間引きフィルターは、積分器の N 個のセクションのカスケード、続けて R のレート変換係数、その後に櫛形フィルターの N 個のセクションとして実現されます。
このブロック線図は、カスケード接続積分器の 2 つのセクションと、カスケード接続櫛形フィルターの 2 つのセクションを示しています。CIC フィルターの積分器部分における単位遅延は、フィードフォワード パスまたはフィードバック パスのいずれかに配置できます。これら 2 つの構成によって、同一のフィルター周波数応答が生成されます。ただし、これら 2 つの構成からの数値出力はレイテンシが原因で異なります。このブロックは、HDL 実装に適した構成であるため、積分器のフィードフォワード パスに単位遅延を置きます。
参照
[1] Hogenauer, E.B. "An Economical Class of Digital Filters for Decimation and Interpolation." IEEE Transactions on Acoustics, Speech and Signal Processing. Volume 29, Number 2, 1981, 155–162.
[2] Meyer-Baese, U. Digital Signal Processing with Field Programmable Gate Arrays. New York: Springer, 2001.
[3] Harris, Fredric J. Multirate Signal Processing for Communication Systems. Indianapolis, IN: Prentice Hall PTR, 2004.
拡張機能
C/C++ コード生成
MATLAB® Coder™ を使用して C および C++ コードを生成します。
使用上の注意および制限:
MATLAB コード生成における System object (MATLAB Coder)を参照してください。
HDL コード生成
HDL Coder™ を使用して FPGA 設計および ASIC 設計のための VHDL、Verilog および SystemVerilog のコードを生成します。
このオブジェクトは、Filter Design HDL Coder™ 製品による HDL コード生成をサポートします。ワークフローと制限については、Generate HDL Code for Filter System Objects (Filter Design HDL Coder)を参照してください。
バージョン履歴
R2012a で導入
参考
関数
generatehdl
|impz
|freqz
|freqzmr
|phasez
|fvtool
|gain
|getFixedPointInfo
|info
|outputDelay
オブジェクト
ブロック
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)