このページの内容は最新ではありません。最新版の英語を参照するには、ここをクリックします。
dsp.FIRFilter
静的または時変 FIR フィルター
説明
dsp.FIRFilter
System object™ は、静的または時変 FIR フィルターの実装を使用して入力の各チャネルをフィルター処理します。
入力の各チャネルをフィルターするには、次を実行します。
dsp.FIRFilter
オブジェクトを作成し、そのプロパティを設定します。関数と同様に、引数を指定してオブジェクトを呼び出します。
System object の機能の詳細については、System object とはを参照してください。
このオブジェクトは、特定の条件下で C/C++ コード生成と SIMD コード生成をサポートします。詳細については、コード生成を参照してください。
作成
説明
は、指定された FIR フィルターの実装を使用して時間の経過に伴って入力の各チャネルを個別にフィルター処理する有限インパルス応答 (FIR) フィルター オブジェクト fir
= dsp.FIRFilterfir
を作成します。
は、fir
= dsp.FIRFilter(num
)Numerator
プロパティが num
に設定された FIR フィルター System object fir
を返します。
は、各プロパティが指定の値に設定された FIR フィルター System object fir
= dsp.FIRFilter(Name,Value
)fir
を返します。
プロパティ
特に指定がない限り、プロパティは "調整不可能" です。つまり、オブジェクトの呼び出し後に値を変更することはできません。オブジェクトは呼び出すとロックされ、ロックを解除するには関数 release
を使用します。
プロパティが "調整可能" の場合、その値をいつでも変更できます。
プロパティ値の変更の詳細については、System object を使用した MATLAB でのシステム設計を参照してください。
Structure
— フィルター構造
Direct form
(既定値) | Direct form symmetric
| Direct form antisymmetric
| Direct form transposed
| Lattice MA
フィルター構造を指定します。フィルター構造を Direct form
、Direct form symmetric
、Direct form antisymmetric
、Direct form transposed
、Lattice MA
のいずれかとして指定することができます。
NumeratorSource
— フィルター係数のソース
Property
(既定値) | Input port
フィルター係数のソースに Property
または Input port
を指定します。Input port
を指定すると、フィルター オブジェクトはフレームごとに 1 回時変フィルターを更新します。
依存関係
これは、Structure
を Direct form
、Direct form symmetric
、Direct form antisymmetric
、Direct form transposed
に設定した場合に適用されます。
ReflectionCoefficientsSource
— フィルター係数のソース
Property
(既定値) | Input port
ラティス フィルター係数のソースに Property
または Input port
を指定します。Input port
を指定すると、フィルター オブジェクトはフレームごとに 1 回時変フィルターを更新します。
依存関係
これは、Structure
を Lattice MA
に設定した場合に適用されます。
Numerator
— 分子係数
[0.5 0.5]
(既定値) | 行ベクトル
フィルター係数に、実数または複素数の数値行ベクトルを指定します。
調整可能: Yes
依存関係
このプロパティは、NumeratorSource
プロパティを Property
に、Structureプロパティを Direct form
、Direct form symmetric
、Direct form antisymmetric
または Direct form transposed
に設定した場合に適用されます。
データ型: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
複素数のサポート: あり
ReflectionCoefficients
— ラティス フィルター構造の反射係数
[0.5 0.5]
(既定値) | 行ベクトル
ラティス フィルターの反射係数に、実数または複素数の数値行ベクトルを指定します。
調整可能: Yes
依存関係
このプロパティは、Structureプロパティを Lattice MA
に、ReflectionCoefficientsSource
プロパティを Property
に設定した場合に適用されます。
データ型: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
複素数のサポート: あり
InitialConditions
— FIR フィルターの初期条件
0
(既定値) | スカラー | ベクトル | 行列
フィルター状態の初期条件を指定します。状態または遅延要素の数は、反射係数の数 (ラティス構造の場合) またはフィルター係数の数から 1 を引いた数 (ラティス構造以外の直接型構造の場合) に等しくなります。
初期条件はスカラー、ベクトルまたは行列として指定できます。スカラー値を指定すると、FIR フィルター オブジェクトはフィルターのすべての遅延要素をその値に初期化します。フィルターの遅延要素数に等しい長さのベクトルを指定すると、各ベクトル要素は対応する遅延要素に一意の初期条件を指定します。オブジェクトは初期条件の同じベクトルを入力信号の各チャネルに適用します。
フィルターの入力チャネル数と遅延要素数の積に等しい長さのベクトルを指定すると、各要素は対応するチャネルの対応する遅延要素に一意の初期条件を指定します。
フィルターの遅延要素数と同数の行と入力信号の各チャネルに対応する列をもつ行列を指定すると、各要素は対応するチャネルの対応する遅延要素に一意の初期条件を指定します。
調整可能: Yes
データ型: single
| double
| int8
| int16
| int32
| int64
| uint8
| uint16
| uint32
| uint64
固定小数点プロパティ
FullPrecisionOverride
— 固定小数点演算に対する完全精度オーバーライド
true
(既定値) | false
完全精度規則を使用するかどうかを指定します。FullPrecisionOverride
を既定の true
に設定すると、オブジェクトは、完全精度規則を使用してすべての内部演算と出力データ型を計算します。これらの規則は、最も正確な固定長数値を提供します。また、他の固定長プロパティは個別には適用されないため、それらの表示はオフにされます。これらの規則は、オブジェクト内で量子化が発生しないことを保証します。必要に応じてビットが追加されて、丸めやオーバーフローが発生しないことを確実にします。FullPrecisionOverride
を false
に設定した場合、固定長データ型は個別の固定長プロパティ設定によって制御されます。詳細については、Full Precision for Fixed-Point System Objectsを参照してください。
RoundingMethod
— 固定小数点演算の丸め手法
Floor
(既定値) | Ceiling
| Convergent
| Nearest
| Round
| Simplest
| Zero
丸め方法を指定します。
依存関係
このプロパティは、オブジェクトが完全精度モードでない場合にのみ適用されます。
OverflowAction
— 固定小数点演算のオーバーフロー アクション
Wrap
(既定値) | Saturate
オーバーフロー アクションを Wrap
または Saturate
として指定します。
依存関係
このプロパティは、オブジェクトが完全精度モードでない場合にのみ適用されます。
CoefficientsDataType
— 係数の語長と小数部の長さ
Same word length as input
(既定値) | Custom
係数の固定小数点データ型を Same word length as input
または Custom
として指定します。
依存関係
このプロパティは、NumeratorSource
プロパティを Property
に設定した場合に適用されます。
CustomCoefficientsDataType
— カスタム係数の語長と小数部の長さ
numerictype(true,16,15)
(既定値) | numerictype
係数の固定小数点型を符号付きまたは符号なしの numerictype
(Fixed-Point Designer) オブジェクトとして指定します。
依存関係
このプロパティは、CoefficientsDataType
プロパティを Custom
に設定した場合に適用されます。
ReflectionCoefficientsDataType
— 反射係数の語長と小数部の長さ
Same word length as input
(既定値) | Custom
反射係数の固定小数点データ型を Same word length as input
または Custom
として指定します。
依存関係
このプロパティは、ReflectionCoefficientsSource
プロパティを Property
に設定した場合に適用されます。
CustomReflectionCoefficientsDataType
— カスタム反射係数の語長と小数部の長さ
numerictype(true,16,15)
(既定値) | numerictype
反射係数の固定小数点型を符号付きまたは符号なしの numerictype
(Fixed-Point Designer) オブジェクトとして指定します。
依存関係
このプロパティは、ReflectionCoefficientsDataType
プロパティを Custom
に設定した場合に適用されます。
ProductDataType
— 乗算の語長と小数部の長さ
Full precision
(既定値) | Same as input
| Custom
乗算の固定小数点データ型を Full precision
、Same as input
または Custom
として指定します。
CustomProductDataType
— カスタムの乗算の語長と小数部の長さ
numerictype(true,32,30)
(既定値) | numerictype
乗算の固定小数点型を符号付きまたは符号なしでスケーリングされた numerictype
(Fixed-Point Designer) オブジェクトとして指定します。
依存関係
このプロパティは、ProductDataType
プロパティを Custom
に設定した場合に適用されます。
AccumulatorDataType
— アキュムレータの語長と小数部の長さ
Full precision
(既定値) | Same as input
| Same as product
| Custom
アキュムレータの固定小数点データ型を Full precision
、Same as input
、Same as product
または Custom
に指定します。
CustomAccumulatorDataType
— カスタム アキュムレータの語長と小数部の長さ
numerictype(true,32,30)
(既定値) | numerictype
アキュムレータの固定小数点型を符号付きまたは符号なしでスケーリングされた numerictype
(Fixed-Point Designer) オブジェクトとして指定します。
依存関係
このプロパティは、AccumulatorDataType
プロパティを Custom
に設定した場合に適用されます。
StateDataType
— 状態の語長と小数部の長さ
Same as accumulator
(既定値) | Same as input
| Custom
状態の固定小数点データ型を Same as input
、Same as accumulator
または Custom
のいずれかとして指定します。
依存関係
このプロパティは、直接型フィルター構造と直接型 I フィルター構造のいずれにも適用されません。
CustomStateDataType
— カスタムの状態の語長と小数部の長さ
numerictype(true,16,15)
(既定値) | numerictype
状態の固定小数点型を符号付きまたは符号なしでスケーリングされた numerictype
(Fixed-Point Designer) オブジェクトとして指定します。
依存関係
このプロパティは、StateDataType
プロパティを Custom
に設定した場合に適用されます。
OutputDataType
— 出力の語長と小数部の長さ
Same as accumulator
(既定値) | Same as input
| Custom
出力の固定小数点データ型を Same as input
、Same as accumulator
または Custom
のいずれかとして指定します。
CustomOutputDataType
— カスタムの出力の語長と小数部の長さ
numerictype(true,16,15)
(既定値) | numerictype
出力の固定小数点型を符号付きまたは符号なしでスケーリングされた numerictype
(Fixed-Point Designer) オブジェクトとして指定します。
依存関係
このプロパティは、OutputDataTypeプロパティを Custom
に設定した場合に適用されます。
使用法
説明
入力引数
x
— データ入力
ベクトル | 行列
データ入力。ベクトルまたは行列として指定します。入力データが固定小数点型の場合、構造が Direct form symmetric
または Direct form antisymmetric
に設定されている場合には符号付きでなければなりません。FIR フィルター オブジェクトは、オブジェクトへの連続する呼び出しで入力信号の各チャネルを個別に処理します。
この System object は可変サイズの入力をサポートします。
データ型: single
| double
| int8
| int16
| int32
| uint8
| uint16
| uint32
| fi
複素数のサポート: あり
coeff
— フィルター係数
行ベクトル
時変フィルター係数。行ベクトルとして指定します。データ入力と係数入力は同じデータ型でなければなりません。
データ型: single
| double
| int8
| int16
| int32
| uint8
| uint16
| uint32
| fi
複素数のサポート: あり
出力引数
y
— フィルター処理された出力
ベクトル | 行列
フィルター処理された出力。ベクトルまたは行列として返されます。出力は入力と同じサイズになります。single
と double
の入力の場合、出力データ型は入力データ型と一致します。整数および固定小数点の入力の場合、出力データ型は FullPrecisionOverride
プロパティと OutputDataType
プロパティの設定によって異なります。
データ型: single
| double
| int8
| int16
| int32
| uint8
| uint16
| uint32
| fi
複素数のサポート: あり
オブジェクト関数
オブジェクト関数を使用するには、System object を最初の入力引数として指定します。たとえば、obj
という名前の System object のシステム リソースを解放するには、次の構文を使用します。
release(obj)
dsp.FIRFilter
に固有
freqz | 離散時間フィルター System object の周波数応答 |
fvtool | DSP フィルターの周波数応答の可視化 |
impz | 離散時間フィルター System object のインパルス応答 |
info | Information about filter System object |
coeffs | フィルター System object 係数を構造に返します。 |
cost | Estimate cost of implementing filter System object |
grpdelay | 離散時間フィルター System object の群遅延応答 |
generatehdl | Generate HDL code for quantized DSP filter (requires Filter Design HDL Coder) |
outputDelay | Determine output delay of single-rate or multirate filter |
例
FIRFilter オブジェクトを使用した正弦波信号のローパス フィルター処理
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)
調整可能なカットオフ周波数を使用したローパス FIR フィルターの設計と実装
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
ローパス FIR フィルター オブジェクトの設計と実装
関数 designLowpassFIR
を使用してローパス FIR フィルター オブジェクトの設計と実装を行います。引数 SystemObject
を true
に設定した場合、関数は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
等リップル FIR ハーフバンド フィルターの設計と実装
関数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
designfilt
の使用によるローパス FIR フィルターの設計
R2023b 以降
関数 designfilt
を使用してローパス FIR フィルターを設計します。
フィルターは、正規化された周波数単位の通過帯域周波数が 0.45 で阻止帯域周波数が 0.55 である最小次数フィルターです。通過帯域リップルは 1 dB、阻止帯域の減衰量は 60 dB です。Kaiser window
設計法を使用し、引数 SystemObject
を true
に設定します。
これらの仕様を使用すると、関数 designfilt
がdsp.FIRFilter
System 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) ブロックのリファレンス ページで説明されているアルゴリズム、入力、および出力を実装しています。オブジェクト プロパティはブロック パラメーターに対応します。
拡張機能
C/C++ コード生成
MATLAB® Coder™ を使用して C および C++ コードを生成します。
使用上の注意および制限:
コード生成では、
Numerator
プロパティのみが調整可能です。MATLAB コード生成における System object (MATLAB Coder)を参照してください。
dsp.FIRFilter
System object は、次の条件を満たす場合、Intel® AVX2 コード置換ライブラリを使用した SIMD コード生成もサポートします。
フィルター構造が
'Direct form'
または'Direct form transposed'
に設定されている。入力信号が実数のフィルター係数をもつ実数値である。
フィルター構造が
'Direct form'
に設定されている場合、入力信号が実数または複素数のフィルター係数をもつ複素数値を取り得る。入力信号のデータ型が
single
またはdouble
である。
SIMD テクノロジーにより、生成コードのパフォーマンスが大幅に向上します。詳細については、SIMD コード生成を参照してください。このオブジェクトから SIMD コードを生成するには、Use Intel AVX2 Code Replacement Library to Generate SIMD Code from MATLAB Algorithmsを参照してください。
HDL コード生成
HDL Coder™ を使用して FPGA 設計および ASIC 設計のための VHDL、Verilog および SystemVerilog のコードを生成します。
このオブジェクトは、HDL Coder™ 製品または Filter Design HDL Coder™ 製品による HDL コード生成をサポートします。HDL Coder ワークフローと制限については、System Objects の HDL コード生成 (HDL Coder)を参照してください。Filter Design HDL Coder ワークフローと制限については、Generate HDL Code for Filter System Objects (Filter Design HDL Coder)を参照してください。
バージョン履歴
R2012a で導入R2023b: 関数 designfilt
と [フィルター設計] ライブ エディター タスクによる dsp.FIRFilter
オブジェクトのサポート
'lowpassfir'
フィルター応答および 'highpassfir'
フィルター応答を指定し、'SystemObject'
フラグを 'true'
に設定した場合、関数 designfilt
は dsp.FIRFilter
オブジェクトを生成します。
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 … ] (1×74 double) InitialConditions: 0
タスクの UI で [System object を使用してフィルターを実装] チェック ボックスをオンにし、タスクによって生成された designfilt
コードを実行した場合、[フィルター設計] ライブ エディター タスクはローパス FIR フィルター応答およびハイパス FIR フィルター応答の dsp.FIRFilter
オブジェクトを生成します。
参考
関数
freqz
|fvtool
|impz
|info
|coeffs
|cost
|grpdelay
|generatehdl
|outputDelay
|designLowpassFIR
|designBandpassFIR
|designBandstopFIR
|designHighpassFIR
|designFracDelayFIR
|designHalfbandFIR
オブジェクト
ブロック
- Discrete FIR Filter (Simulink)
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)