Main Content

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

dsp.FIRFilter

静的または時変 FIR フィルター

説明

dsp.FIRFilter System object™ は、静的または時変 FIR フィルターの実装を使用して入力の各チャネルをフィルター処理します。

入力の各チャネルをフィルターするには、次を実行します。

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

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

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

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

作成

説明

fir = dsp.FIRFilter は、指定された FIR フィルターの実装を使用して時間の経過に伴って入力の各チャネルを個別にフィルター処理する有限インパルス応答 (FIR) フィルター オブジェクト fir を作成します。

fir = dsp.FIRFilter(num) は、Numerator プロパティが num に設定された FIR フィルター System object fir を返します。

fir = dsp.FIRFilter(Name,Value) は、各プロパティが指定の値に設定された FIR フィルター System object fir を返します。

プロパティ

すべて展開する

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

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

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

フィルター構造を指定します。フィルター構造を Direct formDirect form symmetricDirect form antisymmetricDirect form transposedLattice MA のいずれかとして指定することができます。

フィルター係数のソースに Property または Input port を指定します。Input port を指定すると、フィルター オブジェクトはフレームごとに 1 回時変フィルターを更新します。

依存関係

これは、StructureDirect formDirect form symmetricDirect form antisymmetricDirect form transposed に設定した場合に適用されます。

ラティス フィルター係数のソースに Property または Input port を指定します。Input port を指定すると、フィルター オブジェクトはフレームごとに 1 回時変フィルターを更新します。

依存関係

これは、StructureLattice MA に設定した場合に適用されます。

フィルター係数に、実数または複素数の数値行ベクトルを指定します。

調整可能: Yes

依存関係

このプロパティは、NumeratorSource プロパティを Property に、Structureプロパティを Direct formDirect form symmetricDirect form antisymmetric または Direct form transposed に設定した場合に適用されます。

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

ラティス フィルターの反射係数に、実数または複素数の数値行ベクトルを指定します。

調整可能: Yes

依存関係

このプロパティは、Structureプロパティを Lattice MA に、ReflectionCoefficientsSource プロパティを Property に設定した場合に適用されます。

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

フィルター状態の初期条件を指定します。状態または遅延要素の数は、反射係数の数 (ラティス構造の場合) またはフィルター係数の数から 1 を引いた数 (ラティス構造以外の直接型構造の場合) に等しくなります。

初期条件はスカラー、ベクトルまたは行列として指定できます。スカラー値を指定すると、FIR フィルター オブジェクトはフィルターのすべての遅延要素をその値に初期化します。フィルターの遅延要素数に等しい長さのベクトルを指定すると、各ベクトル要素は対応する遅延要素に一意の初期条件を指定します。オブジェクトは初期条件の同じベクトルを入力信号の各チャネルに適用します。

フィルターの入力チャネル数と遅延要素数の積に等しい長さのベクトルを指定すると、各要素は対応するチャネルの対応する遅延要素に一意の初期条件を指定します。

フィルターの遅延要素数と同数の行と入力信号の各チャネルに対応する列をもつ行列を指定すると、各要素は対応するチャネルの対応する遅延要素に一意の初期条件を指定します。

調整可能: Yes

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

固定小数点プロパティ

完全精度規則を使用するかどうかを指定します。FullPrecisionOverride を既定の true に設定すると、オブジェクトは、完全精度規則を使用してすべての内部演算と出力データ型を計算します。これらの規則は、最も正確な固定長数値を提供します。また、他の固定長プロパティは個別には適用されないため、それらの表示はオフにされます。これらの規則は、オブジェクト内で量子化が発生しないことを保証します。必要に応じてビットが追加されて、丸めやオーバーフローが発生しないことを確実にします。FullPrecisionOverridefalse に設定した場合、固定長データ型は個別の固定長プロパティ設定によって制御されます。詳細については、Full Precision for Fixed-Point System Objectsを参照してください。

丸め方法を指定します。

依存関係

このプロパティは、オブジェクトが完全精度モードでない場合にのみ適用されます。

オーバーフロー アクションを Wrap または Saturate として指定します。

依存関係

このプロパティは、オブジェクトが完全精度モードでない場合にのみ適用されます。

係数の固定小数点データ型を Same word length as input または Custom として指定します。

依存関係

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

係数の固定小数点型を符号付きまたは符号なしの numerictype (Fixed-Point Designer) オブジェクトとして指定します。

依存関係

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

反射係数の固定小数点データ型を Same word length as input または Custom として指定します。

依存関係

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

反射係数の固定小数点型を符号付きまたは符号なしの numerictype (Fixed-Point Designer) オブジェクトとして指定します。

依存関係

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

乗算の固定小数点データ型を Full precisionSame as input または Custom として指定します。

乗算の固定小数点型を符号付きまたは符号なしでスケーリングされた numerictype (Fixed-Point Designer) オブジェクトとして指定します。

依存関係

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

アキュムレータの固定小数点データ型を Full precisionSame as inputSame as product または Custom に指定します。

アキュムレータの固定小数点型を符号付きまたは符号なしでスケーリングされた numerictype (Fixed-Point Designer) オブジェクトとして指定します。

依存関係

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

状態の固定小数点データ型を Same as inputSame as accumulator または Custom のいずれかとして指定します。

依存関係

このプロパティは、直接型フィルター構造と直接型 I フィルター構造のいずれにも適用されません。

状態の固定小数点型を符号付きまたは符号なしでスケーリングされた numerictype (Fixed-Point Designer) オブジェクトとして指定します。

依存関係

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

出力の固定小数点データ型を Same as inputSame as accumulator または Custom のいずれかとして指定します。

出力の固定小数点型を符号付きまたは符号なしでスケーリングされた numerictype (Fixed-Point Designer) オブジェクトとして指定します。

依存関係

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

使用法

説明

y = fir(x) は、実数または複素数の入力信号 x に FIR フィルターを適用して出力 y を作成します。

y = fir(x,coeff) は時変係数 coeff を使用して入力信号 x をフィルター処理し、出力 y を作成します。このオプションは、NumeratorSource または ReflectionCoefficientsSource プロパティを Input port に設定した場合に使用できます。

入力引数

すべて展開する

データ入力。ベクトルまたは行列として指定します。入力データが固定小数点型の場合、構造が Direct form symmetric または Direct form antisymmetric に設定されている場合には符号付きでなければなりません。FIR フィルター オブジェクトは、オブジェクトへの連続する呼び出しで入力信号の各チャネルを個別に処理します。

この System object は可変サイズの入力をサポートします。

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

時変フィルター係数。行ベクトルとして指定します。データ入力と係数入力は同じデータ型でなければなりません。

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

出力引数

すべて展開する

フィルター処理された出力。ベクトルまたは行列として返されます。出力は入力と同じサイズになります。singledouble の入力の場合、出力データ型は入力データ型と一致します。整数および固定小数点の入力の場合、出力データ型は FullPrecisionOverride プロパティと OutputDataType プロパティの設定によって異なります。

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

オブジェクト関数

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

release(obj)

すべて展開する

freqz離散時間フィルター System object の周波数応答
fvtoolDSP フィルターの周波数応答の可視化
impz離散時間フィルター System object のインパルス応答
infoInformation about filter System object
coeffsフィルター System object 係数を構造に返します。
costEstimate cost of implementing filter System object
grpdelay離散時間フィルター System object の群遅延応答
generatehdlGenerate HDL code for quantized DSP filter (requires Filter Design HDL Coder)
outputDelayDetermine output delay of single-rate or multirate filter
stepSystem object のアルゴリズムの実行
releaseリソースを解放し、System object のプロパティ値と入力特性の変更を可能にします。
resetSystem object の内部状態のリセット

すべて折りたたむ

FIR フィルターを使用し、2 つの正弦波成分をもつ波形にローパス フィルターを適用します。

 t = (0:1000)'/8e3;
 xin = sin(2*pi*0.3e3*t)+sin(2*pi*3e3*t);
 
 sr = dsp.SignalSource;
 sr.Signal = xin;
 sink = dsp.SignalSink;

 fir = dsp.FIRFilter(designLowpassFIR(FilterOrder=10,CutoffFrequency=0.5));

sa = spectrumAnalyzer(...
     SampleRate=8e3,...
     Method='welch',...
     PlotAsTwoSidedSpectrum=false,...
     OverlapPercent=80,...
     SpectrumUnits='dBW',...
     YLimits=[-150 -10]);

 while ~isDone(sr)
      input = sr();
      filteredOutput = fir(input);
      sink(filteredOutput);
      sa(filteredOutput)
 end

 filteredResult = sink.Buffer;
 filterAnalyzer(fir,SampleRates=8000)

System object として FIR フィルターを設計します。

N = 10;  
Fc = 0.4;
firFiltObj = designLowpassFIR(FilterOrder=N,CutoffFrequency=Fc,SystemObject=true)
firFiltObj = 
  dsp.FIRFilter with properties:

            Structure: 'Direct form'
      NumeratorSource: 'Property'
            Numerator: [-1.2414e-18 -0.0126 -0.0247 0.0635 0.2748 0.3981 0.2748 0.0635 -0.0247 -0.0126 -1.2414e-18]
    InitialConditions: 0

  Use get to show all properties

filterAnalyzer(firFiltObj)

dsp.FIRFilterオブジェクトを作成し、シミュレーション中に入力ポートから FIR フィルターの係数を変更できるように NumeratorSource プロパティを 'Input port' に設定します。

firFilt = dsp.FIRFilter(NumeratorSource="Input port")
firFilt = 
  dsp.FIRFilter with properties:

            Structure: 'Direct form'
      NumeratorSource: 'Input port'
    InitialConditions: 0

  Use get to show all properties

spectrumAnalyzerオブジェクトを作成して、入力信号と出力信号のスペクトルを可視化します。

spectrumScope = spectrumAnalyzer(SampleRate=44100,PlotAsTwoSidedSpectrum=false,...
    ChannelNames=["Input Signal","Filtered Signal"]);

dsp.DynamicFilterVisualizerオブジェクトを作成し、可変フィルターの振幅応答を可視化します。

filterViz = dsp.DynamicFilterVisualizer(NormalizedFrequency=true);

ランダム データをストリーミングし、dsp.FIRFilter オブジェクトを使用して信号をフィルター処理します。関数designLowpassFIRを使用して、フィルターの係数を設計します。既定では、この関数は FIR フィルター係数のベクトルを返します。これらの係数を dsp.FIRFilter オブジェクトに割り当てます。

シミュレーション中に、フィルターのカットオフ周波数を変化させます。関数 designLowpassFIR は、更新されたフィルター仕様に基づき係数を再設計します。これらの更新された係数を FIR フィルターに渡します。スペクトル アナライザーを使用して、入力信号とフィルター処理された信号のスペクトルを可視化します。

Fcut = 0.5;
for idx = 1:500
    num = designLowpassFIR(FilterOrder=30,CutoffFrequency=Fcut,Window="hann");
    x = randn(1024,1);
    y = firFilt(x,num);
    spectrumScope(x,y);
    filterViz(num);
    Fcut = Fcut + 0.0005;
end

関数 designLowpassFIR を使用してローパス FIR フィルター オブジェクトの設計と実装を行います。引数 SystemObjecttrue に設定した場合、関数はdsp.FIRFilterオブジェクトを返します。

firFilt = designLowpassFIR(FilterOrder=30,CutoffFrequency=0.5,Window="hann",...
        SystemObject=true)
firFilt = 
  dsp.FIRFilter with properties:

            Structure: 'Direct form'
      NumeratorSource: 'Property'
            Numerator: [0 2.1297e-19 0.0011 -1.8613e-18 -0.0048 4.8729e-18 0.0122 -8.7270e-18 -0.0251 1.2757e-17 0.0477 -1.6267e-17 -0.0960 1.8649e-17 0.3148 0.5000 0.3148 1.8649e-17 -0.0960 -1.6267e-17 0.0477 1.2757e-17 -0.0251 ... ] (1x31 double)
    InitialConditions: 0

  Use get to show all properties

dsp.DynamicFilterVisualizerオブジェクトを作成し、フィルターの振幅応答を可視化します。

filterViz = dsp.DynamicFilterVisualizer(NormalizedFrequency=true);
filterViz(firFilt)

spectrumAnalyzerオブジェクトを作成して、入力信号と出力信号のスペクトルを可視化します。

spectrumScope = spectrumAnalyzer(SampleRate=44100,PlotAsTwoSidedSpectrum=false,...
    ChannelNames=["Input Signal","Filtered Signal"]);

ランダム データをストリーミングし、dsp.FIRFilter オブジェクトを使用して信号をフィルター処理します。スペクトル アナライザーを使用して、入力信号とフィルター処理された信号のスペクトルを可視化します。

for idx = 1:500
    x = randn(1024,1);
    y = firFilt(x);
    spectrumScope(x,y);
end

関数designHalfbandFIRを使用して、次数 24 と遷移幅 0.1 で等リップル FIR ハーフバンド フィルターを設計します。フィルター係数を dsp.FIRFilter System object に割り当てます。

b = designHalfbandFIR(FilterOrder=24,DesignMethod='equiripple');
hbFIR = dsp.FIRFilter(b);

dsp.DynamicFilterVisualizerオブジェクトを作成し、フィルターの振幅応答を可視化します。

dfv = dsp.DynamicFilterVisualizer(NormalizedFrequency=true);
dfv(hbFIR);

spectrumAnalyzerオブジェクトを作成して、入力信号と出力信号のスペクトルを可視化します。

scope = spectrumAnalyzer(SampleRate=2, PlotAsTwoSidedSpectrum=false,...
    ChannelNames=["Input Signal","Filtered Signal"]);   

ランダム データをストリーミングし、FIR ハーフバンド フィルターを使用して信号をフィルター処理します。

for i = 1:1000
    x = randn(1024, 1);
    y = hbFIR(x);
    scope(x,y);
end

R2023b 以降

関数 designfilt を使用してローパス FIR フィルターを設計します。

フィルターは、正規化された周波数単位の通過帯域周波数が 0.45 で阻止帯域周波数が 0.55 である最小次数フィルターです。通過帯域リップルは 1 dB、阻止帯域の減衰量は 60 dB です。Kaiser window 設計法を使用し、引数 SystemObjecttrue に設定します。

これらの仕様を使用すると、関数 designfiltdsp.FIRFilterSystem object™ を作成します。

lpFIRFilter = designfilt('lowpassfir', ...
    'PassbandFrequency',0.45,'StopbandFrequency',0.55, ...
    'PassbandRipple',1,'StopbandAttenuation',60, ...
    'DesignMethod','kaiserwin','SystemObject',true)
lpFIRFilter = 
  dsp.FIRFilter with properties:

            Structure: 'Direct form'
      NumeratorSource: 'Property'
            Numerator: [1.2573e-04 -1.9141e-04 -2.7282e-04 3.7207e-04 4.9141e-04 -6.3325e-04 -8.0016e-04 9.9490e-04 0.0012 -0.0015 -0.0018 0.0021 0.0025 -0.0029 -0.0034 0.0040 0.0046 -0.0053 -0.0060 0.0069 0.0079 -0.0090 -0.0102 0.0116 ... ] (1x74 double)
    InitialConditions: 0

  Use get to show all properties

freqz を使用して、このフィルターの振幅応答と位相応答を可視化します。

freqz(lpFIRFilter.Numerator)

アルゴリズム

このオブジェクトは、Discrete FIR Filter (Simulink) ブロックのリファレンス ページで説明されているアルゴリズム、入力、および出力を実装しています。オブジェクト プロパティはブロック パラメーターに対応します。

拡張機能

バージョン履歴

R2012a で導入

すべて展開する