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
を返します。
は、1 つ以上の名前と値の引数を使用して、プロパティを設定します。たとえば、FIR フィルターの初期条件を 3 として指定するには、fir
= dsp.FIRFilter(Name=Value
)InitialConditions
を 3 に設定します。
プロパティ
特に指定がない限り、プロパティは "調整不可能" です。つまり、オブジェクトの呼び出し後に値を変更することはできません。オブジェクトは呼び出すとロックされ、ロックを解除するには関数 release
を使用します。
プロパティが "調整可能" の場合、その値をいつでも変更できます。
プロパティ値の変更の詳細については、System object を使用した MATLAB でのシステム設計を参照してください。
フィルター構造を指定します。フィルター構造を "Direct form"
、"Direct form symmetric"
、"Direct form antisymmetric"
、"Direct form transposed"
、"Lattice MA"
のいずれかとして指定することができます。
フィルター係数のソースを "Property"
または "Input port"
として指定します。"Input port"
を指定すると、フィルター オブジェクトはフレームごとに 1 回時変フィルターを更新します。
依存関係
これは、Structure
を "Direct form"
、"Direct form symmetric"
、"Direct form antisymmetric"
、または "Direct form transposed"
に設定した場合に適用されます。
ラティス フィルター係数のソースを "Property"
または "Input port"
として指定します。"Input port"
を指定すると、フィルター オブジェクトはフレームごとに 1 回時変フィルターを更新します。
依存関係
これは、Structure
を "Lattice MA"
に設定した場合に適用されます。
フィルター係数に、実数または複素数の数値行ベクトルを指定します。
調整可能: 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
複素数のサポート: あり
ラティス フィルターの反射係数に、実数または複素数の数値行ベクトルを指定します。
調整可能: 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
に設定すると、オブジェクトは、完全精度規則を使用してすべての内部演算と出力データ型を計算します。これらの規則は、最も正確な固定長数値を提供します。また、他の固定長プロパティは個別には適用されないため、それらの表示はオフにされます。これらの規則は、オブジェクト内で量子化が発生しないことを保証します。必要に応じてビットが追加されて、丸めやオーバーフローが発生しないことを確実にします。FullPrecisionOverride
を false
に設定した場合、固定小数点データ型は個別の固定小数点プロパティ設定によって制御されます。詳細については、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 precision"
、"Same as input"
または "Custom"
として指定します。
乗算の固定小数点型を符号付きまたは符号なしでスケーリングされた numerictype
(Fixed-Point Designer) オブジェクトとして指定します。
依存関係
このプロパティは、ProductDataType
プロパティを "Custom"
に設定した場合に適用されます。
アキュムレータの固定小数点データ型を "Full precision"
、"Same as input"
、"Same as product"
または "Custom"
に指定します。
アキュムレータの固定小数点型を符号付きまたは符号なしでスケーリングされた numerictype
(Fixed-Point Designer) オブジェクトとして指定します。
依存関係
このプロパティは、AccumulatorDataType
プロパティを "Custom"
に設定した場合に適用されます。
状態の固定小数点データ型を "Same as input"
、"Same as accumulator"
、"Custom"
のいずれかとして指定します。
依存関係
このプロパティは、直接型フィルター構造と直接型 I フィルター構造のいずれにも適用されません。
状態の固定小数点型を符号付きまたは符号なしでスケーリングされた numerictype
(Fixed-Point Designer) オブジェクトとして指定します。
依存関係
このプロパティは、StateDataType
プロパティを "Custom"
に設定した場合に適用されます。
出力の固定小数点データ型を "Same as input"
、"Same as accumulator"
、"Custom"
のいずれかとして指定します。
出力の固定小数点型を符号付きまたは符号なしでスケーリングされた numerictype
(Fixed-Point Designer) オブジェクトとして指定します。
依存関係
このプロパティは、OutputDataTypeプロパティを Custom
に設定した場合に適用されます。
使用法
説明
入力引数
データ入力。ベクトルまたは行列として指定します。入力データが固定小数点型の場合、構造が "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
複素数のサポート: あり
出力引数
フィルター処理された出力。ベクトルまたは行列として返されます。出力は入力と同じサイズになります。single
と double
の入力の場合、出力データ型は入力データ型と一致します。整数および固定小数点の入力の場合、出力データ型は FullPrecisionOverride
プロパティと OutputDataType
プロパティの設定によって異なります。
データ型: single
| double
| int8
| int16
| int32
| uint8
| uint16
| uint32
| fi
複素数のサポート: あり
オブジェクト関数
オブジェクト関数を使用するには、System object を最初の入力引数として指定します。たとえば、obj
という名前の System object のシステム リソースを解放するには、次の構文を使用します。
release(obj)
freqz | 離散時間フィルター System object の周波数応答 |
filterAnalyzer | Analyze filters with Filter Analyzer app |
impz | 離散時間フィルター System object のインパルス応答 |
info | Information about filter System object |
coeffs | フィルター System object 係数を構造に返します。 |
cost | フィルター System object の実装コストの推定 |
grpdelay | 離散時間フィルター System object の群遅延応答 |
outputDelay | Determine output delay of single-rate or multirate filter |
例
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 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 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,1); Fcut = Fcut + 0.0005; end
関数 designLowpassFIR
を使用してローパス FIR フィルター オブジェクトの設計と実装を行います。引数 SystemObject
を true
に設定した場合、関数はdsp.FIRFilter
オブジェクトを返します。フィルターを単精度で設計するには、Datatype
引数または like
引数を使用します。あるいは、数値引数のいずれかを単精度で指定することもできます。
firFilt = designLowpassFIR(FilterOrder=30,CutoffFrequency=0.5,Window="hann",... Datatype="single",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 … ] (1×31 single) InitialConditions: 0 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
設計法を使用し、引数 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 … ] (1×74 double) InitialConditions: 0 Show all properties
freqz
を使用して、このフィルターの振幅応答と位相応答を可視化します。
freqz(lpFIRFilter.Numerator)
アルゴリズム
このオブジェクトは、Discrete FIR Filter (Simulink) ブロックのリファレンス ページで説明されているアルゴリズム、入力、および出力を実装しています。オブジェクト プロパティはブロック パラメーターに対応します。
拡張機能
使用上の注意および制限:
コード生成では、
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を参照してください。
ワークフローと制限については、System Objects の HDL コード生成 (HDL Coder)を参照してください。
メモ
HDL コード生成をサポートするハードウェア最適化された FIR フィルター アルゴリズムには、dsphdl.FIRFilter
(DSP HDL Toolbox) System object を使用します。このオブジェクトは、ハードウェアと親和性の高い valid 制御信号とリセット制御信号を備えており、ハードウェアのレイテンシ動作を正確にモデル化します。このオブジェクトは、HDL Coder™ ツールによる HDL コード生成をサポートします。
バージョン履歴
R2012a で導入R2025a 以降、Filter Design HDL Coder™ 製品の提供を終了します。そのため、このオブジェクトは、generatehdl
関数を使用した HDL コード生成をサポートしなくなります。このオブジェクトは、HDL Coder ツールを使用したコード生成を引き続きサポートします。
"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
|filterAnalyzer
|impz
|info
|coeffs
|cost
|grpdelay
|outputDelay
|designLowpassFIR
|designBandpassFIR
|designBandstopFIR
|designHighpassFIR
|designFracDelayFIR
|designHalfbandFIR
オブジェクト
ブロック
- Discrete FIR Filter (Simulink)
MATLAB Command
You clicked a link that corresponds to this MATLAB command:
Run the command by entering it in the MATLAB Command Window. Web browsers do not support MATLAB commands.
Web サイトの選択
Web サイトを選択すると、翻訳されたコンテンツにアクセスし、地域のイベントやサービスを確認できます。現在の位置情報に基づき、次のサイトの選択を推奨します:
また、以下のリストから Web サイトを選択することもできます。
最適なサイトパフォーマンスの取得方法
中国のサイト (中国語または英語) を選択することで、最適なサイトパフォーマンスが得られます。その他の国の MathWorks のサイトは、お客様の地域からのアクセスが最適化されていません。
南北アメリカ
- América Latina (Español)
- Canada (English)
- United States (English)
ヨーロッパ
- 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)