アナログフィルタ

概略

各フィルタは2つ前までの入力信号と2つ前までの出力信号を使って計算します(双2次フィルタ)
30Hzの波形に200Hzのノイズが乗った波形をサンプルに各フィルタをかけたときの波形を見てみます


● ローパスフィルタ(LPF)
カットオフ周波数以下の周波数のみ通すフィルタです
カットオフ周波数=100Hz

● ハイパスフィルタ(HPF)
カットオフ周波数以上の周波数のみ通すフィルタです
カットオフ周波数=100Hz

● バンドパスフィルタ(BPF)
カットオフ周波数を中心に帯域幅分の周波数のみ通すフィルタです
カットオフ周波数=30Hz, 帯域幅=1 (1オクターブ)
1オクターブとは30Hzの場合 30/2 ~ 30×2の周波数なので、15Hz~60Hzになります

● ノッチフィルタ
カットオフ周波数を中心に帯域幅分の周波数以外を通すフィルタです
カットオフ周波数=30Hz, 帯域幅=1 (1オクターブ)

● ローシェルフフィルタ
カットオフ周波数以下の周波数を増幅するフィルタです
カットオフ周波数=100Hz, 増幅量=15dB

● ハイシェルフフィルタ
カットオフ周波数以上の周波数を増幅するフィルタです
カットオフ周波数=100Hz, 増幅量=15dB

● ピーキングフフィルタ
カットオフ周波数を中心に帯域幅分の周波数を増幅するフィルタです
カットオフ周波数=30Hz, 帯域幅=1オクターブ, 増幅量=15dB

● オールパスフィルタ
カットオフ周波数周辺の位相を変えるフィルタです
カットオフ周波数=30Hz

シンボル

各ファンクション共通の入出力変数
入出力
buf = 2つ前の入力と出力の記憶(変数を必ず割付けてFB外で使用しないでください)
入力
In = 入力値
SampFreq = サンプリング周波数
Freq = カットオフ周波数
BandWidth = 帯域幅
gain = 増幅量
出力
計算結果

サンプリング周波数はデフォルトは実行するタスクのタスク周期で1スキャンで複数のアナログ値を取得する高速アナログユニットでは設定値に合わせてサンプリング周波数(Hz)を入力してください

LPF
ローパスフィルタを計算します
Symbol

HPF
ハイパスフィルタを計算します
Symbol

BPF
バンドパスフィルタを計算します
Symbol

NotchF
ノッチフィルタを計算します
Symbol

LowShelfF
ローシェルフフィルタを計算します
Symbol

BPF
ハイシェルフフィルタを計算します
Symbol

PeekingF
ピーキングフィルタを計算します
Symbol

AllPathF
オールパスフィルタを計算します
Symbol

使用例

ラダー

使用例

AnalogInのデータを100Hz以下の周波数のみ通すフィルタをかけてFilterAnalogに出力します

ソース

ローパスフィルタ(LPF)
一例としてローパスフィルタは以下のように計算しています

Q値はカットオフ周波数でのゲインの減少を抑える数値ですが、大きくしすぎるとカットオフ周波数付近が強調されます
1/√2あたりで調整します



ダウンロード

SampleAnalogFilter.zip

ダウンロードされたときは利用規約に同意したものとみなします

参考サイト様

簡単なデジタルフィルタの実装
https://vstcpp.wpblog.jp/?page_id=523