デジタルフィルター設計 戻る
Signal Processing

デジタルフィルター設計 — 周波数応答シミュレーター

バターワース(IIR)またはウィンドウFIRを選び、フィルタータイプ・次数・カットオフ周波数をスライダーで調整。振幅(dB)・位相応答を対数スケールでリアルタイム確認できます。

フィルター設定
フィルタータイプ
設計手法
サンプリング周波数 fs 1000 Hz
カットオフ fc₁ 200 Hz
フィルター次数 N 4
統計サマリー
-3dB 周波数
遮断減衰量
群遅延 (ms)

理論メモ

fc₁ (Hz)
Nyquist (Hz)
次数 N
振幅応答 [dB] — 対数周波数軸
位相応答 [度]
ブロック図

デジタルフィルター設計とは

🧑‍🎓
デジタルフィルターって何ですか?アナログのフィルターと何が違うんですか?
🎓
ざっくり言うと、コンピュータで信号を加工するソフトウェア的なフィルターだね。アナログは抵抗やコンデンサで作るけど、デジタルは数値計算で実現する。例えば、エンジンの振動データから特定の回転数(周波数)のノイズだけを消したい時、このシミュレーターで設計したフィルターをプログラムに組み込むんだ。まずは上の「フィルタータイプ」を「ローパス」に、「設計手法」を「バターワース」にしてみて。スライダーでカットオフ周波数を動かすと、どの周波数から減衰するかがリアルタイムで見えるよ。
🧑‍🎓
え、そうなんですか!「バターワース」と「ウィンドウFIR」って、どっちを使えばいいんですか?
🎓
実務では目的で使い分けることが多いね。バターワース(IIR)は少ない「次数N」で急激に減衰するのが特徴で、計算が軽い。逆にFIRは「窓関数」を選べて、位相が歪まない(線形位相)のが強み。音声処理では位相歪みが気になるからFIRが多いかな。シミュレーターで「次数N」を同じ値にして、両方の振幅応答を比べてみ。バターワースの方が減衰が急なのがわかるはずだよ。
🧑‍🎓
「窓関数」にハミングやハニングがあるけど、これは何を変えてるんですか?
🎓
FIRフィルターの設計で、いかに「理想」に近づけるかを決めるんだ。ハミング窓はサイドローブ(不要なこぼれ)を小さく抑えるから、ノイズをしっかり除去したい通信分野でよく使う。ハニング窓はメインローブが広い代わりに、周波数分解能を上げたい分析向きだ。シミュレーターでFIRを選び、「窓関数」を切り替えながらグラフを見てごらん。減衰の仕方(サイドローブの大きさ)が変わるのがわかるよ。

物理モデルと主要な数式

デジタルフィルターは、入力信号 $x[n]$ と出力信号 $y[n]$ の差分方程式で表されます。IIRフィルター(バターワース)は、過去の出力も利用する帰還型です。

$$ y[n] = \sum_{k=0}^{M}b_k x[n-k] - \sum_{k=1}^{N}a_k y[n-k] $$

$a_k, b_k$: フィルター係数(極と零点を決定), $N$: フィルター次数(帰還項の数), $M$: 非帰還項の数。$a_k$ が全て0ならFIRフィルターになります。

周波数応答 $H(e^{j\omega})$ は、システムの特性を周波数領域で評価するための重要な関数です。振幅応答(ゲイン)と位相応答からなります。

$$ H(e^{j\omega}) = \frac{Y(e^{j\omega})}{X(e^{j\omega})}= \frac{\sum_{k=0}^{M}b_k e^{-j\omega k}}{1 + \sum_{k=1}^{N}a_k e^{-j\omega k}}$$

$\omega = 2\pi f / f_s$: 正規化角周波数, $f_s$: サンプリング周波数。この絶対値 $|H(e^{j\omega})|$ をデシベル($20 \log_{10}|H|$)でプロットしたのが振幅特性グラフです。カットオフ周波数 $f_c$ は通常、$|H| = 1/\sqrt{2}$ (約-3dB)となる点と定義されます。

実世界での応用

振動・騒音(NVH)解析:自動車や航空機の開発では、エンジン振動や走行風切音から特定周波数成分を抽出・除去します。回転数に同期した次数成分を追跡するため、カットオフ周波数を可変とするフィルター設計が重要です。

生体信号処理:心電図(ECG)や脳波(EEG)の計測データには、筋電ノイズや商用電源ノイズ(50/60Hz)が混入します。ノッチフィルター(狭帯域除去フィルター)やローパスフィルターを用いて、診断に有用な信号成分だけを取り出します。

オーディオ・音響処理:音楽制作や音声通信では、特定の周波数帯域をブーストまたはカットするイコライザー、高音域のノイズを除去するデエッサーなどがフィルターの応用例です。FIRフィルターの線形位相特性は、音の歪みを防ぐために不可欠です。

通信システム:無線通信では、所望のチャネル(周波数帯)のみを通し、隣接チャネルを強く遮断する帯域通過フィルターが必須です。高い選択性(急峻な遮断特性)が要求されるため、最適なフィルタータイプと次数の選択が設計課題となります。

よくある誤解と注意点

まず、「次数Nが高いほど良いフィルター」という誤解があります。確かに次数を上げると遮断特性は急峻になりますが、計算量が増え、リアルタイム処理では遅延が問題になります。例えば、マイコンで処理する場合、バターワースIIRでN=8を超えると、係数の量子化誤差の影響で発散するリスクも。実務では「必要十分な性能」を見極め、ローパスならN=4〜6で設計することが多いです。

次に、カットオフ周波数$f_c$の設定ミスです。シミュレーター上では$f_c$を自由に動かせますが、実際の信号処理ではサンプリング定理を忘れてはいけません。サンプリング周波数$f_s$が10kHzの場合、理論上扱える最高周波数は5kHz(ナイキスト周波数)です。ここで$f_c$を4.8kHzに設定すると、折り返し歪み(エイリアシング)の危険地帯に突入します。安全マージンをとり、$f_c$は$f_s$の1/4以下(この例なら2.5kHz以下)に抑えるのが定石です。

最後に、フィルター適用による信号の「頭出し」問題です。フィルターは過去のデータに依存するため、適用開始直後の出力は不安定です。例えば、振動データの最初の0.1秒はフィルターが定常状態に達しておらず、信頼できません。実務では、この過渡応答期間を除外するか、双方向フィルタリング(filtfilt処理)で位相歪みを消す工夫が必要です。

関連する工学分野

このシミュレーターで学ぶ「周波数応答」の概念は、制御工学と深く結びついています。フィルターの振幅/位相特性は、制御系の安定性を評価するボード線図そのものです。例えば、サーボモーターの位置制御では、高周波ノイズを抑えるローパスフィルター(制御器で言えばロー�ーバスフィルタ)を設計し、システム全体の位相余裕を確保します。

また、音響・音声処理では、FIRフィルターの線形位相特性が不可欠です。音楽EQ(イコライザー)や音声コーデック(AAC, Opus)の内部では、複数のバンドパスフィルターが使われています。特に「聴覚心理モデル」に基づくマスキング効果を利用した圧縮では、人間が聞こえない周波数成分をフィルターで積極的に除去します。

さらに高度な応用として、通信工学の変復調技術があります。無線通信では、特定のチャネル(周波数帯)だけを通し、他を遮断する帯域通過フィルターが鍵です。5GやWi-Fiの基地局では、隣接チャネル干渉を防ぐため、シミュレーターで試したようなサイドローブ抑制が優れた窓関数(カイザー窓など)がFIR設計に用いられています。

発展的な学習のために

まず次のステップは、「実際の信号に適用して影響を観察する」ことです。シミュレーターで設計したフィルター係数($a_k$, $b_k$)を、Python(SciPyのsignalライブラリ)やMATLABで実際の時系列データ(例えばオーディオファイル)に適用してみましょう。フィルター前後の波形とスペクトルを比較すれば、「位相歪みが聴覚にどう影響するか」が体感できます。

数学的背景を深めたいなら、「z変換」の理解が必須です。差分方程式をz領域で表すと、フィルターの特性は「極」と「零点」の配置で幾何学的に解釈できます。例えば、バターワースフィルターの極が単位円上に等間隔で配置されること、その配置が次数Nで決まることを学べば、シミュレーターの挙動がより深く理解できるでしょう。伝達関数は、 $$H(z) = \frac{\sum_{k=0}^{M}b_k z^{-k}}{1 + \sum_{k=1}^{N}a_k z^{-k}}$$ と表されます。

最後に、このツールを出発点として、適応フィルターウェーブレット変換といった発展トピックに進むことをお勧めします。適応フィルター(LMSアルゴリズムなど)は、ノイズの周波数が時間変化する場合(走行中の車内騒音など)に係数を自動調整する技術です。ウェーブレットは、周波数だけでなく時間局所性も同時に分析できるため、衝撃波形の検出など、非定常信号解析の強力なツールとなります。