バンドパスフィルタの設計とPython実装

バンドパスフィルタの設計理論とPython実装を scipy.signal.butter / sosfiltfilt / firwin で解説。通過帯域・阻止帯域・中心周波数・帯域幅の決め方、Butterworth IIRとFIRの比較、ゼロ位相フィルタリングと周波数応答の可視化、振動・音声・心電図への応用までまとめます。

バンドパスフィルタとは

バンドパスフィルタ(帯域通過フィルタ)は、特定の周波数帯域(通過帯域)の信号を通過させ、それ以外の周波数(阻止帯域)を減衰させるフィルタです。

ラジオの選局、音声処理の特定周波数強調、生体信号(心拍・脳波)のノイズ除去など、幅広い分野で活用されています。

主要パラメータ

パラメータ説明
\(f_l\)下側遮断周波数(-3dB点)
\(f_h\)上側遮断周波数(-3dB点)
\(f_0 = \sqrt{f_l f_h}\)中心周波数(幾何平均)
\(BW = f_h - f_l\)帯域幅(Bandwidth)
\(Q = f_0 / BW\)Q値(鋭さの指標)

Q値が大きいほど通過帯域が狭く(鋭い選択性)、小さいほど広帯域になります。

周波数応答の導出

ローパス→バンドパス変換

バンドパスフィルタは、ローパスフィルタ(LPF)のプロトタイプから周波数変換によって設計できます。

アナログ領域でのローパス→バンドパス変換は、複素変数 \(s\) を以下のように置き換えます。

\[ s \rightarrow \frac{s^2 + \omega_l \omega_h}{s(\omega_h - \omega_l)} \tag{1}\]

ここで \(\omega_l = 2\pi f_l\) 、\(\omega_h = 2\pi f_h\) です。

1次のバターワースLPFの伝達関数 \(H_{LP}(s) = \frac{\omega_c}{s + \omega_c}\) に変換 \((1)\) を適用すると、2次のバンドパスフィルタが得られます。

\[ H_{BP}(s) = \frac{BW \cdot s}{s^2 + BW \cdot s + \omega_0^2} \tag{2} \]

ここで \(BW = \omega_h - \omega_l\) 、\(\omega_0 = \sqrt{\omega_l \omega_h}\) です。

なぜこの変換で通過帯域が実現されるのか

式 \((1)\) の置き換えは一見天下り的ですが、実際にアナログ周波数軸上でどう作用するかを見ると、なぜバンドパス特性が得られるのかが明確になります。

正規化ローパスプロトタイプの複素変数を \(p\) とし、プロトタイプの通過域を \(s=j\Omega\) 上の \(|\Omega| \le 1\) とします。変換式 \((1)\) の \(s\) に実周波数 \(s=j\omega\) (\(\omega>0\) )を代入すると、

\[ p = \frac{(j\omega)^2 + \omega_l \omega_h}{j\omega(\omega_h - \omega_l)} \]

\(\omega_0^2 = \omega_l \omega_h\) 、\(B = \omega_h - \omega_l\) とおくと分子は \(\omega_0^2 - \omega^2\) 、分母は \(jB\omega\) になるので、

\[ p = \frac{\omega_0^2 - \omega^2}{jB\omega} = j\,\frac{\omega^2 - \omega_0^2}{B\omega} \]

これは \(p = j\Omega\) の形なので、実周波数 \(\omega\) に対応するプロトタイプ側の正規化周波数は

\[ \Omega(\omega) = \frac{\omega^2 - \omega_0^2}{B\omega} = \frac{1}{B}\left(\omega - \frac{\omega_0^2}{\omega}\right) \]

と表せます。この写像の境界値を確認すると、\(\omega=\omega_0\) では \(\Omega(\omega_0)=0\) 、\(\omega=\omega_h\) では \(\omega_h^2-\omega_0^2=\omega_h^2-\omega_l\omega_h=\omega_h(\omega_h-\omega_l)=\omega_h B\) より \(\Omega(\omega_h)=1\) 、\(\omega=\omega_l\) では同様に \(\omega_l^2-\omega_0^2=-\omega_l B\) より \(\Omega(\omega_l)=-1\) となります。さらに導関数は

\[ \frac{d\Omega}{d\omega} = \frac{1}{B}\left(1 + \frac{\omega_0^2}{\omega^2}\right) > 0 \quad (\omega>0) \]

であり、\(\Omega(\omega)\) は \(\omega>0\) で狭義単調増加です。したがって \(\omega\) が \(\omega_l\) から \(\omega_h\) まで動くとき \(\Omega\) はちょうど \(-1\) から \(1\) まで単調に動き、プロトタイプの通過域 \(|\Omega|\le 1\) を過不足なく埋め尽くします。逆に \(\omega<\omega_l\) または \(\omega>\omega_h\) では、単調性からただちに \(|\Omega|>1\) (プロトタイプの阻止域)となります。

つまりこの変換は、実周波数軸の正の部分 \((0,\infty)\) をプロトタイプの周波数軸全体 \((-\infty,\infty)\) に単調・全単射で写像し、中心周波数 \(\omega_0\) 付近の帯域 \((\omega_l,\omega_h)\) をちょうどプロトタイプの通過域に、その両側(低域側 \(\omega<\omega_l\) と高域側 \(\omega>\omega_h\) )を共にプロトタイプの単一の阻止域 \(|\Omega|>1\) に対応させます。片側にしか阻止域を持たないローパスプロトタイプから、両側に阻止域を持つバンドパス特性が得られるのは、この写像の構造によるものです。

次数が2倍になる理由: 上の計算は \(s\) から \(p\) を求める向きでしたが、逆にプロトタイプ側の1つの極(または零点)\(p\) に対応する \(s\) を求めるには、式 \((1)\) を \(s\) について解く必要があります。整理すると

\[ Bps = s^2 + \omega_0^2 \quad\Longrightarrow\quad s^2 - Bp\,s + \omega_0^2 = 0 \]

という \(s\) の2次方程式になります。これは1つの \(p\) に対して

\[ s_{1,2} = \frac{Bp \pm \sqrt{(Bp)^2 - 4\omega_0^2}}{2} \]

という2つの根 \(s_1, s_2\) が対応することを意味します。したがって \(N\) 次のローパスプロトタイプ(\(N\) 個の極)は、この変換によって \(2N\) 個の極を持つ \(2N\) 次のバンドパスフィルタになります。式 \((2)\) で1次のバターワースLPF(極1個)から2次のバンドパスフィルタ(極2個)が得られたのは、この一般則の \(N=1\) の場合にあたります。

離散時間バンドパスフィルタ(双一次変換)

式 \((2)\) を双一次変換(Bilinear Transform)でデジタル領域に変換します。

\[s = \frac{2}{T} \cdot \frac{1 - z^{-1}}{1 + z^{-1}} \tag{3}\]

これを式 \((2)\) に代入すると、デジタルバンドパスフィルタの伝達関数 \(H(z)\) が得られます。

\[ H(z) = \frac{b_0 + b_1 z^{-1} + b_2 z^{-2}}{1 + a_1 z^{-1} + a_2 z^{-2}} \tag{4}\]

実用上は scipy.signal がこの計算を自動的に行ってくれます。

Qファクタと選択性のトレードオフ

Q値は \(Q=f_0/BW=\omega_0/B\) と定義されますが、これは単なる「鋭さの指標」ではなく、フィルタの過渡応答(定常状態に達するまでの時間)と直接結びついた物理量です。この関係を、式 \((2)\) の2次バンドパスプロトタイプから導出します。

\[ H_{BP}(s) = \frac{Bs}{s^2+Bs+\omega_0^2} \]

の極は

\[ s = -\frac{B}{2} \pm j\sqrt{\omega_0^2 - \left(\frac{B}{2}\right)^2} \]

です。\(B \ll \omega_0\) (高Q)のとき極の虚部はほぼ \(\pm\omega_0\) 、実部は \(-B/2\) になります。この実部の大きさが、共振に対する自由応答の振幅包絡線が指数的に減衰する速さを決めます。

\[ |y(t)| \propto e^{-(B/2)t} \]

したがって包絡線が \(1/e\) に減衰するまでの時間定数は、\(B=2\pi \cdot BW\) を代入すると

\[ \tau = \frac{2}{B} = \frac{1}{\pi \cdot BW} \]

となり、この時間内に生じる中心周波数の振動サイクル数は

\[ \tau f_0 = \frac{f_0}{\pi \cdot BW} = \frac{Q}{\pi} \approx 0.318\,Q \]

です。すなわち、Q値が高い(狭帯域・高選択性)ほど、過渡応答が収まるまでに必要な振動サイクル数はQに比例して増加します。狭い周波数帯域だけを識別するには、それだけ長い時間(多くの振動周期)の観測が必要という、時間-周波数の不確定性関係の一種です。

実行検証:Qと過渡応答・選択性精度のトレードオフ

上記の関係を、実際に scipy.signal.butter(4次バターワース、output='sos')で設計したバンドパスフィルタに \(f_0=100\) Hzの正弦波を印加し、包絡線(ヒルベルト変換の絶対値)が定常値の10%以内に収まるまでの時間を測定して検証しました(\(f_s=2000\) Hz、中心周波数固定・帯域幅のみ変化)。

Q設計BW [Hz]実測-3dB BW [Hz]実測/設計比90%到達時間 [ms]10%整定時間 [ms]整定に要したサイクル数
1100.00099.9400.999413.5013.501.4
250.00049.9650.999326.0039.003.9
520.00019.9800.999064.0096.009.6
1010.0009.9900.9990127.00191.5019.1
205.0004.9900.9980253.50382.5038.2
502.0001.9900.9950633.50957.0095.7

整定時間はQにほぼ比例して増加しており(Q=1→50でサイクル数は1.4→95.7と約68倍)、上で導出した「サイクル数 \(\propto Q\) 」という関係と定性的に一致します。4次バターワースは2次共振器4段のカスケードにあたるため、比例定数は2次理想系の理論値 \(1/\pi\approx0.318\) (1/eまでの目安)より、10%整定の基準でも大きくなっています。

さらに注目すべきは、Qを上げるほど実測の-3dB帯域幅が設計値からわずかにずれていく点です(比が0.9994→0.9950へ徐々に低下)。これは双一次変換による周波数プリワーピングの非線形性と、有限の周波数分解能でピークを探索する数値誤差が、狭帯域になるほど相対的に大きく効いてくるためです。Q=50(BW/f_0=2%)でもずれは0.5%程度に収まりますが、さらに狭帯域にするとこの誤差は次節で見るように無視できなくなります。

狭帯域設計時の数値的困難

Q値を上げる(帯域を狭くする)と、デジタルフィルタの極は単位円周上のある偏角付近に密集していきます。極が単位円に近づくほど、伝達関数係数のわずかな丸め誤差が周波数特性に大きな影響を与えるようになります。

実行検証:極配置と係数摂動に対する感度

4次バターワース(前節の変換により実現後は8次・8個の極)バンドパスフィルタについて、\(f_0=100\) Hz固定でQを変えながら、極の単位円からの最小距離 \(\min(1-|z_k|)\) と、伝達関数係数に相対値 \(10^{-6}\) の摂動を与えたときの周波数応答の変化量(摂動の何倍に増幅されるか、20回の乱数試行の平均)を測定しました。

QB/f_0\(\min(1-\|z_k\|)\)TF形式(b,a)の増幅率SOS形式(2次セクション)の増幅率
11.00006.30×10⁻²22,68843.0
50.20002.18×10⁻²2,609,95381.8
200.05005.87×10⁻³1,001,461358.2
1000.01001.20×10⁻³1,000,0011,515.2
5000.00202.33×10⁻⁴1,000,0005,004.5

極の単位円からの最小距離はQに反比例して縮小しています(Q=1で約0.063、Q=500で約2.3×10⁻⁴)。極が単位円に近いほど、対応する分母多項式の根が敏感になり、係数のわずかな誤差(浮動小数点丸め誤差を含む)が拡大されて出力に現れます。

実際、多項式形式(b, a の直接表現)では係数を10⁻⁶相対摂動しただけで、周波数応答が最大で摂動の100万倍近く変化しており、深刻な数値不安定性が確認できます。一方、2次セクション(SOS)形式に分解した場合、同じ摂動に対する増幅率は最大でも約5,000倍に抑えられており、TF形式より2〜3桁頑健です(それでもQが上がるにつれ増幅率自体は増加し続けます)。

摂動を加える前の段階でも、TF形式とSOS形式が計算する周波数応答には無視できない食い違いが生じます。

QTF形式とSOS形式の周波数応答の相対誤差(摂動なし)
15.8×10⁻¹²
53.4×10⁻¹⁰
208.6×10⁻⁸
1002.6×10⁻⁵
5004.8×10⁻³

Q=500(帯域幅が中心周波数の0.2%)では、摂動を一切加えなくても、TF形式のみで計算した周波数応答がSOS形式(より高精度な基準)と0.48%も食い違うという結果になりました。これは浮動小数点演算の丸め誤差だけで生じた誤差であり、scipy.signal.butter のデフォルト出力(output='ba'、すなわちTF形式)を高Qのバンドパス設計にそのまま使うと、意図しない特性のフィルタが実装されてしまう危険性を示しています。

Q値と狭帯域設計の数値的トレードオフ

上図の左は本節の係数摂動に対する感度(TF形式とSOS形式の比較)、右は前節で測定したQと整定時間の関係を示しています。いずれも両対数軸でほぼ直線的な関係にあり、Qの増加に伴う数値的困難と過渡応答の遅さがべき乗則的に悪化することが視覚的に確認できます。

実務上の対策: scipy.signal.butter(..., output='sos') などでSOS形式を使う、次数をむやみに上げない、可能であれば帯域幅を中心周波数に対して極端に狭くしすぎない(目安としてQ≲100程度に留める)、状態空間表現やラティス構造など別の数値的に頑健な実現法を検討する、といった対策が有効です。

Pythonによる実装

scipy.signalを用いたIIRバンドパスフィルタ

import numpy as np
import matplotlib.pyplot as plt
from scipy import signal

# --- パラメータ設定 ---
fs = 1000.0          # サンプリング周波数 [Hz]
f_low = 50.0         # 下側遮断周波数 [Hz]
f_high = 150.0       # 上側遮断周波数 [Hz]
order = 4            # フィルタ次数

# --- バターワース バンドパスフィルタの設計 ---
nyq = fs / 2.0       # ナイキスト周波数
low = f_low / nyq
high = f_high / nyq

b, a = signal.butter(order, [low, high], btype='bandpass')

# --- 周波数応答の計算 ---
w, h = signal.freqz(b, a, worN=8000, fs=fs)

# --- プロット ---
fig, (ax1, ax2) = plt.subplots(2, 1, figsize=(10, 8))

# ゲイン特性 (dB)
ax1.semilogx(w, 20 * np.log10(np.abs(h) + 1e-10))
ax1.axvline(f_low, color='r', linestyle='--', label=f'$f_l$ = {f_low} Hz')
ax1.axvline(f_high, color='g', linestyle='--', label=f'$f_h$ = {f_high} Hz')
ax1.axhline(-3, color='gray', linestyle=':', label='-3 dB')
ax1.set_xlabel('Frequency [Hz]')
ax1.set_ylabel('Gain [dB]')
ax1.set_title(f'Butterworth Bandpass Filter (order={order})')
ax1.legend()
ax1.grid(True, which='both', alpha=0.3)
ax1.set_xlim([1, nyq])
ax1.set_ylim([-80, 5])

# 位相特性
ax2.semilogx(w, np.angle(h, deg=True))
ax2.axvline(f_low, color='r', linestyle='--')
ax2.axvline(f_high, color='g', linestyle='--')
ax2.set_xlabel('Frequency [Hz]')
ax2.set_ylabel('Phase [degrees]')
ax2.set_title('Phase Response')
ax2.grid(True, which='both', alpha=0.3)
ax2.set_xlim([1, nyq])

plt.tight_layout()
plt.savefig('bandpass_response.png', dpi=150, bbox_inches='tight')
plt.show()

FIRバンドパスフィルタの設計

IIRフィルタは位相が非線形ですが、FIRフィルタは線形位相を実現できます。音声処理など位相の保存が重要な場面で有用です。

from scipy.signal import firwin, freqz

# --- FIR バンドパスフィルタ ---
numtaps = 101        # フィルタ係数の数(奇数推奨)
fir_bpf = firwin(
    numtaps,
    [f_low, f_high],
    pass_zero=False,  # バンドパス指定
    fs=fs,
    window='hamming'
)

w_fir, h_fir = freqz(fir_bpf, worN=8000, fs=fs)

# IIRとFIRの比較プロット
plt.figure(figsize=(10, 5))
plt.semilogx(w, 20 * np.log10(np.abs(h) + 1e-10), label='IIR Butterworth (order=4)', linewidth=2)
plt.semilogx(w_fir, 20 * np.log10(np.abs(h_fir) + 1e-10), label=f'FIR Hamming (taps={numtaps})', linewidth=2, linestyle='--')
plt.axvline(f_low, color='r', linestyle=':', alpha=0.7, label=f'$f_l$ = {f_low} Hz')
plt.axvline(f_high, color='g', linestyle=':', alpha=0.7, label=f'$f_h$ = {f_high} Hz')
plt.axhline(-3, color='gray', linestyle=':', alpha=0.7)
plt.xlabel('Frequency [Hz]')
plt.ylabel('Gain [dB]')
plt.title('Bandpass Filter Comparison: IIR vs FIR')
plt.legend()
plt.grid(True, which='both', alpha=0.3)
plt.xlim([1, nyq])
plt.ylim([-80, 5])
plt.tight_layout()
plt.show()

信号への適用例

実際のノイズ混じり信号にバンドパスフィルタを適用します。

# --- テスト信号の生成 ---
t = np.linspace(0, 1.0, int(fs), endpoint=False)  # 1秒分

# 目的信号: 100 Hz のサイン波
signal_pure = np.sin(2 * np.pi * 100 * t)

# ノイズ: 10 Hz の低周波 + 300 Hz の高周波 + ホワイトノイズ
noise = (
    0.5 * np.sin(2 * np.pi * 10 * t) +
    0.5 * np.sin(2 * np.pi * 300 * t) +
    0.3 * np.random.randn(len(t))
)

x_noisy = signal_pure + noise

# --- フィルタ適用 ---
# lfilter: 因果的フィルタ(リアルタイム処理向け、位相遅れあり)
y_lfilter = signal.lfilter(b, a, x_noisy)

# filtfilt: ゼロ位相フィルタ(オフライン処理向け、位相遅れなし)
y_filtfilt = signal.filtfilt(b, a, x_noisy)

# --- 比較プロット ---
fig, axes = plt.subplots(3, 1, figsize=(12, 8), sharex=True)

axes[0].plot(t[:200], x_noisy[:200], alpha=0.8, label='Noisy signal')
axes[0].set_ylabel('Amplitude')
axes[0].set_title('Input Signal (noisy)')
axes[0].legend()
axes[0].grid(True, alpha=0.3)

axes[1].plot(t[:200], y_lfilter[:200], color='orange', label='lfilter (causal)')
axes[1].plot(t[:200], signal_pure[:200], color='gray', linestyle='--', alpha=0.6, label='True signal')
axes[1].set_ylabel('Amplitude')
axes[1].set_title('After lfilter (with phase delay)')
axes[1].legend()
axes[1].grid(True, alpha=0.3)

axes[2].plot(t[:200], y_filtfilt[:200], color='green', label='filtfilt (zero-phase)')
axes[2].plot(t[:200], signal_pure[:200], color='gray', linestyle='--', alpha=0.6, label='True signal')
axes[2].set_ylabel('Amplitude')
axes[2].set_xlabel('Time [s]')
axes[2].set_title('After filtfilt (zero-phase)')
axes[2].legend()
axes[2].grid(True, alpha=0.3)

plt.tight_layout()
plt.savefig('bandpass_filtering_result.png', dpi=150, bbox_inches='tight')
plt.show()

IIR vs FIR 設計の比較

特性IIR(バターワース等)FIR
位相特性非線形(位相歪みあり)線形位相が実現可能
フィルタ係数数少ない(\(2N+1\) 程度)多い(数十〜数百)
計算コスト低い高い(タップ数依存)
安定性設計によっては不安定常に安定
遮断特性低次でも急峻タップ数増加で改善
遅延非定数定数遅延(\((N-1)/2\) サンプル)
適した用途リアルタイム処理音声・画像処理、位相重視

設計指針:

  • リアルタイムで計算コストを抑えたい → IIR(バターワース/チェビシェフ)
  • 位相の線形性が重要(音声・医療信号) → FIR(Hamming/Kaiser窓)
  • オフライン処理で位相遅れを完全除去 → filtfilt(IIR/FIR共通)

IIRとFIRの次数比較:同一仕様での設計

前節の比較表は定性的な特徴の整理ですが、実際に同一の仕様を満たすために必要な次数・タップ数を定量的に比較すると、設計手法選択の判断材料がより明確になります。

以下の仕様でIIR(バターワース/チェビシェフI型・II型/楕円)とFIR(窓関数法・Parks-McClellan法)の最小次数・タップ数を求めました(\(f_s=1000\) Hz)。

  • 通過域: 50–150 Hz、通過域リップル 1 dB以下
  • 阻止域: 30 Hz以下・170 Hz以上、阻止域減衰量 40 dB以上
  • 遷移帯域幅: 両側20 Hz

scipy.signal.buttord / cheb1ord / cheb2ord / ellipord でこの仕様を満たす最小次数を求めた結果は次のとおりです。

設計法最小次数(プロトタイプ)実現後の極数(バンドパス、次数×2)
バターワース2142
チェビシェフI型816
チェビシェフII型816
楕円(Cauer)510

同じ仕様でも、通過域の最大平坦性にこだわるバターワースは21次(実現後42極)と非常に高次になる一方、通過域または阻止域にリップルを許すチェビシェフはわずか8次、両方にリップルを許す楕円フィルタはさらに少ない5次で足ります。遷移帯域の急峻さが要求される場面では、最大平坦特性を捨ててリップルを許容する設計の方が圧倒的に効率的であることが分かります( チェビシェフフィルタの設計原理とPython実装 で解説している等リップル特性とロールオフの関係と整合する結果です)。

FIR側は scipy.signal.kaiserord(Kaiser窓)で必要タップ数を見積もると113タップ(\(\beta=3.395\) )でした。ただし実際に周波数応答を検証すると、達成された通過域リップルは6.08 dBとなり、目標の1 dB以下を大きく超過していました(阻止域減衰は低域側47.8 dB・高域側45.8 dBと目標は満たしています)。これはKaiser窓の設計式が主に阻止域減衰と遷移帯域幅から近似的にタップ数を見積もるものであり、通過域リップルを直接保証しないためです。

一方、等リップル最適化を行うParks-McClellan法(scipy.signal.remez)で同じ仕様を満たす最小タップ数を探索すると107タップで達成でき、通過域リップルは0.17 dB、阻止域減衰は低域側40.0 dB・高域側40.1 dBと、仕様ギリギリを狙って無駄なく満たしていました。

この実験から得られる実務的な示唆は次の3点です。

  1. IIRは同じ仕様でも設計法(最大平坦 vs 等リップル)で必要次数が大きく変わる。急峻な遷移帯域が必要ならチェビシェフ・楕円を検討する価値がある。
  2. FIRはタップ数(ここでは100前後)がIIRの次数(この例では5〜21)よりずっと多く、同じサンプルあたりの計算コストではIIRが有利。ただしFIRは線形位相を厳密に実現できる。
  3. 窓関数法は簡便だが、リップルなど一部の仕様を正確に満たさないことがある。仕様への適合を厳密に検証したい場合はParks-McClellan法(等リップル設計)の方が信頼できる。

次数と帯域幅の影響

# 次数の違いによる周波数応答の比較
fig, ax = plt.subplots(figsize=(10, 6))

for ord_n in [2, 4, 6, 8]:
    b_n, a_n = signal.butter(ord_n, [low, high], btype='bandpass')
    w_n, h_n = signal.freqz(b_n, a_n, worN=8000, fs=fs)
    ax.semilogx(w_n, 20 * np.log10(np.abs(h_n) + 1e-10), label=f'order={ord_n}')

ax.axhline(-3, color='gray', linestyle=':', label='-3 dB')
ax.axvline(f_low, color='r', linestyle='--', alpha=0.5)
ax.axvline(f_high, color='g', linestyle='--', alpha=0.5)
ax.set_xlabel('Frequency [Hz]')
ax.set_ylabel('Gain [dB]')
ax.set_title('Effect of Filter Order on Bandpass Response')
ax.legend()
ax.grid(True, which='both', alpha=0.3)
ax.set_xlim([1, nyq])
ax.set_ylim([-80, 5])
plt.tight_layout()
plt.show()

次数を上げると遮断特性が急峻になりますが、IIRフィルタでは次数が高くなるほど位相遅れと数値的不安定性のリスクが増すため、次数8以下が実用的な目安です。

近年の研究動向(2023年以降)

バンドパスフィルタは古典的な信号処理要素ですが、無線通信・RFフロントエンドの分野では近年も活発に研究が続いています。

  • オンチップ可変RFバンドパスフィルタ: IEEE Microwave Magazine誌(2024年1月号)はオンチップで周波数可変なRFバンドパスフィルタに関するレビューを掲載しており、マルチバンド無線機やソフトウェア無線(SDR)向けに、単一の回路で中心周波数を電気的に切り替えられる設計手法が整理されています。
  • 広帯域可変マイクロストリップバンドパスフィルタ: 2024年のMDPI Electronics誌の論文では、単一のバイアス電圧のみで中心周波数を1.1〜3.1 GHzの範囲で連続的に可変できるコンパクトなマイクロストリップバンドパスフィルタが報告されており、5G/6Gのような広帯域・マルチバンド運用が求められる通信規格に向けた再構成可能なRFフロントエンドのニーズを反映しています。
  • 機械学習によるフィルタ設計最適化: 2025年のPhysica Scripta誌の論文はバンドパスフィルタの設計・最適化に機械学習を用いる手法を報告しており、同年のMDPI Electronics誌ではXGBoostなどの機械学習モデルでマイクロ波フィルタの結合行列や物理パラメータを予測し、設計の反復回数を削減するアプローチがまとめられています。デジタルIIR/FIRフィルタの領域でも、差分進化やグレイウルフ最適化などのメタヒューリスティック手法でフィルタ係数を最適化する研究(2024年のScientific Reports誌など)が報告されています。

これらの動向に共通するのは、古典的な解析的設計(本記事で扱ったバターワース変換や窓関数法など)を出発点としつつ、可変性(tunability)と機械学習による設計自動化・高速化を組み合わせる方向性です。ただし、これらの手法の多くはマイクロ波・RF回路(アナログハードウェア)を対象としたものであり、本記事で扱ったデジタル信号処理としてのバンドパスフィルタ設計に機械学習最適化を直接適用する事例は、執筆時点ではまだ発展途上の分野である点には注意してください。

関連記事

参考文献


関連ツール