IIR 필터 (특히 Butterworth 필터)가 원인입니까?

Aug 19 2020

신호 처리가 처음입니다. 이제 필터링에 대해 배우고 있으며 HPF (고역 통과 필터)와 이후의 대역 통과 필터 (BPF)를 구현하려고합니다. 나는에 필터를 구현하기 Python 3.8NumPy하고 SciPy.

오프라인의 경우 (사전 기록 된 시간 필터링) Butterworth 고역 통과 필터를 설계하고 signal.filtfilt기능을 사용하여 시간 영역의 신호에 적용했습니다 . 그러나 문서에서 알 수 있듯이이 접근 방식은 필터가 신호를 앞뒤로 스캔하기 때문에 실시간이 아닌 오프라인 경우에만 유용합니다. signal.freqz기능을 사용하여 필터에서 주파수 응답을 복구 할 수 있습니다 .

이제이 필터가 실시간으로도 작동하기를 원하므로 인과 관계가 있어야하며이 유형의 필터에 대해 이것이 가능한지 묻습니다. 제 질문은 다음과 같습니다.

  1. 내가 올바르게 이해한다면 버터 워스 필터는 IIR (무한 임펄스 응답) 필터입니다. 사실인가요?
  2. IIR 필터가 원인입니까? 모든 IIR 필터가 인과 관계가 아닐 수 있으며 일부는 그렇지 않을 수도 있습니다. IIR 필터가 원인 인 경우는 무엇입니까?
  3. 버터 워스 필터는 인과 관계가 있습니까? 항상 그렇지 않다면 어떤 경우에 인과 관계가 있습니까?
  4. 3에 대한 답이 참인 경우 시간 도메인과 주파수 도메인 모두에서 인과 적 버터 워스 필터를 구현하는 방법은 무엇입니까? (I을 사용하여 SciPy같은 기능 signal.butter, signal.freqz등)

관련 링크 :

  • 버터 워스 필터 설계 지원
  • filtfilt : https://docs.scipy.org/doc/scipy/reference/generated/scipy.signal.filtfilt.html

감사합니다.

답변

7 endolith Aug 19 2020 at 13:49
  1. 예, 버터 워스는 IIR입니다. 충동으로 인한 붕괴는 기술적으로 영원히 지속됩니다.
  2. 예, 모든 [구현 가능한] IIR은 인과 관계입니다.
  3. 네, # 1과 # 2 때문에.
  4. 사용하지 마십시오 signal.filtfilt. 사용 signal.lfilter. 인과 필터를 제로 위상 필터로 변경하는 반대 방향으로 두 번을 제외하고는 filtfilt과 동일한 작업을 수행합니다 lfilter.

그러나 두 함수에 대한 문서에서 알 수 있듯이 대부분의 실제 사용을 위해서는 실제로 SOS 변형을 대신 사용해야합니다.

함수 sosfilt(및를 사용하는 필터 설계 output='sos')는 lfilter2 차 섹션의 수치 문제가 적기 때문에 대부분의 필터링 작업 보다 선호되어야합니다 .

기능을 요약하려면 :

  • lfilter: 인과 적 단일 단계 필터링 (낮은 순서 만 해당)
  • filtfilt: 영 위상 단일 단계 필터링 (낮은 차수 만 해당)
  • sosfilt: 인과적인 2 차 섹션 필터링
  • sosfiltfilt: 영 위상 2 차 섹션 필터링

실제로 사용하는 유일한 이유 는 계수가 이미 형식에 lfilter있거나 교과서에서 무언가를 구현하는 경우 등입니다.filtfiltb, a

필터를 직접 설계하는 경우 SOS 형식을 사용하면 수치 오류가 줄어 듭니다.

참고는 것을 filtfilt기능을 두 번 필터를 적용, 그래서 원래 필터의 두 배 순서를해야합니다.

1 TimWescott Aug 19 2020 at 16:17

IIR 필터가 원인입니까? 모든 IIR 필터가 인과 관계가 아닐 수 있으며 일부는 그렇지 않을 수도 있습니다. IIR 필터가 원인 인 경우는 무엇입니까?

모든 실제 IIR 필터는 인과 관계입니다. 우주가 보이는 것보다 훨씬 이상하지 않는 한 모든 실제 시스템은 인과 적입니다.

향후 정보에 적용되는 필터를 정의 할 수 있습니다 . 즉 당신은 말할 수 있습니다$y_n = 0.9 y_{n+1} + x_n$. 그것은 (독자의 회의론을 극복하기 위해 많은 단어로) 충동 반응이 다음과 같은 필터를 설명합니다.$$h_\kappa = \begin{cases} 0 & \kappa > 0 \\ 0.9^{-\kappa} & \kappa \le 0 \end{cases}$$

그러나 실제로 이러한 필터를 실제로 구현할 수는 없습니다.