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

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 フィルターを使用して信号を間引くには、以下を行います。

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

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

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

作成

構文

cicDecim = dsp.CICDecimator
cicDecim = dsp.CICDecimator(R,M,N)
cicDecim = dsp.CICDecimator(Name,Value)

説明

cicDecim = dsp.CICDecimator は、CIC 間引きフィルターを入力信号に適用する CIC 間引き System object を作成します。

cicDecim = dsp.CICDecimator(R,M,N) は、DecimationFactor プロパティを RDifferentialDelay プロパティを MNumSections プロパティを N に設定して、CIC 間引きオブジェクトを作成します。

cicDecim = dsp.CICDecimator(Name,Value) は、指定の各プロパティが指定の値に設定された CIC 間引きオブジェクトを作成します。各プロパティを、一重引用符で囲みます。前の任意の入力引数を組み合わせてこの構文を使用できます。

プロパティ

すべて展開する

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

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

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

入力信号の間引きに使用する係数。正の整数として指定します。

データ型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

フィルターの各櫛形セクションで使用されている遅延差の値。正の整数として指定します。詳細は、アルゴリズムを参照してください。遅延差が組み込み整数データ型である場合、間引き係数は同じ整数データ型または double でなければなりません。たとえば、遅延差が int8 である場合、間引き係数は int8 または double でなければなりません。

データ型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

CIC フィルターの積分器セクションと櫛形セクションの数。正の整数として指定します。この数は、フィルターの櫛形部分または積分器部分のいずれかのセクション数を示しています。CIC フィルター内のセクションの合計数は、このプロパティで与えられたセクション数の 2 倍です。

データ型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

固定小数点のプロパティ指定。次のいずれかを指定します。

  • Full precision – CIC フィルター セクションおよびオブジェクト出力の語長と小数部の長さは完全精度で動作します。

  • Minimum section word lengthsOutputWordLength プロパティを使用して出力語長を指定します。このオブジェクトにより、可能な範囲内での最高精度を提供するフィルター セクションのデータ型と出力の小数部の長さが決定されます。詳細については、getFixedPointInfocicDecimOut 引数を参照してください。

  • Specify word lengthsSectionWordLengths および OutputWordLength プロパティを使用して、CIC フィルター セクションとオブジェクト出力の語長を指定します。このオブジェクトにより、可能な範囲内での最高精度を提供する、対応する小数部の長さが決定されます。詳細については、getFixedPointInfocicDecimOut 引数を参照してください。

  • Specify word and fraction lengthsSectionWordLengthsSectionFractionLengthsOutputWordLength、および OutputFractionLength の各プロパティを使用して、CIC フィルター セクションとオブジェクト出力の語長と小数部の長さを指定します。

各フィルター セクションに使用する固定小数点語長。スカラーまたは整数の行ベクトルとして指定します。語長は 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

各フィルター セクションに使用する固定小数点の小数部の長さ。スカラーまたは整数の行ベクトルとして指定します。小数部の長さは負、0、または正です。スカラーを指定した場合、値はフィルターのすべてのセクションに適用されます。ベクトルを指定した場合、そのベクトルの長さは NumSections の 2 倍でなければなりません。

例: -2

例: [-2 0 5 8]

依存関係

このプロパティは、FixedPointDataType プロパティを 'Specify word and fraction lengths' に設定した場合に適用されます。

データ型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

フィルター出力に使用する固定小数点語長。2 以上のスカラー整数として指定します。

依存関係

このプロパティは、FixedPointDataType プロパティが 'Minimum section word lengths''Specify word lengths'、または 'Specify word and fraction lengths' に設定されている場合に適用されます。

データ型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

フィルター出力に使用する固定小数点の小数部の長さ。スカラー整数として指定します。

依存関係

このプロパティは、FixedPointDataType プロパティを 'Specify word and fraction lengths' に設定した場合に適用されます。

データ型: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

使用法

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

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

構文

cicDecimOut = cicDecim(input)

説明

cicDecimOut = cicDecim(input) は、CIC 間引きを使用して入力を間引きます。

入力引数

すべて展開する

データ入力。ベクトルまたは行列として指定します。入力の行数はDecimationFactorの倍数でなければなりません。入力のデータ型が single または double の場合、固定小数点データ型に関連するプロパティ設定は無視されます。

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

出力引数

すべて展開する

間引きされた出力。ベクトルまたは行列として返されます。出力のフレーム サイズは、(1 ∕ DecimationFactor) と入力フレーム サイズを乗算したものと等しくなります。出力データの実数/複素数は、入力データの実数/複素数と一致します。入力が single または double の場合、出力データ型は入力データ型と一致します。

入力のデータ型が組み込み整数データ型または固定小数点データ型の場合、出力の語長と小数部の長さは、FixedPointDataTypeプロパティを通じて選択する固定小数点データ型の設定によって異なります。

完全精度

FixedPointDataType'Full precision' に設定されている場合、次の関係が適用されます。

WLoutput=WLinput+NumSectFLoutput=FLinput

ここで、

  • WLoutput –– 出力データの語長。

  • FLoutput –– 出力データの小数部の長さ。

  • WLinput –– 入力データの語長。

  • FLinput –– 入力データの小数部の長さ。

  • NumSect –– NumSectionsプロパティで指定される CIC フィルターのセクション数。

WLinput と FLinput は、オブジェクト アルゴリズムに渡すデータ入力から継承されます。組み込み整数入力の場合、小数部の長さは 0 です。

最小語長

FixedPointDataType プロパティが 'Minimum section word lengths' に設定されている場合、出力の語長はOutputWordLengthプロパティに指定する値になります。出力の小数部の長さ FLoutput は、次の式で与えられます。

FLoutput=WLoutput(WLinputFLinput+NumSect)

語長と小数部の長さの指定

FixedPointDataType プロパティが 'Specify word and fraction lengths' に設定されている場合、出力語長と小数部の長さは、OutputWordLengthプロパティとOutputFractionLengthプロパティで指定する値になります。

語長の指定

FixedPointDataType プロパティが 'Specify word lengths' に設定されている場合、出力語長は OutputWordLength プロパティで指定する値になります。出力の小数部の長さ FLoutput は、次の式で与えられます。

FLoutput=WLoutput(WLinputFLinput+NumSect)

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

オブジェクト関数

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

release(obj)

すべて展開する

generatehdlGenerate HDL code for quantized DSP filter (requires Filter Design HDL Coder)
impzImpulse response of discrete-time filter System object
freqzFrequency response of filter
phasezUnwrapped phase response for filter
fvtoolVisualize frequency response of DSP filters
gainCIC filter gain
getFixedPointInfoGet fixed-point word and fraction lengths
infoInformation about filter System object
stepSystem object のアルゴリズムの実行
releaseリソースを解放し、System object のプロパティ値と入力特性の変更を可能にします。
resetSystem object の内部状態のリセット

このオブジェクトがサポートしているフィルター解析法のリストについては、MATLAB® コマンド プロンプトに「dsp.CICDecimator.helpFilterAnalysis」と入力します。対応する関数リファレンス ページについては、Analysis Methods for Filter System Objects を参照してください。

すべて展開する

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

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;             
n = (0:1023)';            % 0.0232 sec signal
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 サンプルです。

gainCIC = ...
   (cicdec.DecimationFactor*cicdec.DifferentialDelay)^cicdec.NumSections;
stem(n(1:56)/Fs,double(x(4:59))) 
hold on;     
stem(n(1:14)/(Fs/cicdec.DecimationFactor),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

関数による語長や小数部の長さの計算方法の詳細については、"出力引数" の説明を参照してください。

詳細

すべて展開する

アルゴリズム

すべて展開する

参照

[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.

拡張機能

R2012a で導入