IIR 필터 (특히 Butterworth 필터)가 원인입니까?
신호 처리가 처음입니다. 이제 필터링에 대해 배우고 있으며 HPF (고역 통과 필터)와 이후의 대역 통과 필터 (BPF)를 구현하려고합니다. 나는에 필터를 구현하기 Python 3.8
로 NumPy
하고 SciPy
.
오프라인의 경우 (사전 기록 된 시간 필터링) Butterworth 고역 통과 필터를 설계하고 signal.filtfilt
기능을 사용하여 시간 영역의 신호에 적용했습니다 . 그러나 문서에서 알 수 있듯이이 접근 방식은 필터가 신호를 앞뒤로 스캔하기 때문에 실시간이 아닌 오프라인 경우에만 유용합니다. signal.freqz
기능을 사용하여 필터에서 주파수 응답을 복구 할 수 있습니다 .
이제이 필터가 실시간으로도 작동하기를 원하므로 인과 관계가 있어야하며이 유형의 필터에 대해 이것이 가능한지 묻습니다. 제 질문은 다음과 같습니다.
- 내가 올바르게 이해한다면 버터 워스 필터는 IIR (무한 임펄스 응답) 필터입니다. 사실인가요?
- IIR 필터가 원인입니까? 모든 IIR 필터가 인과 관계가 아닐 수 있으며 일부는 그렇지 않을 수도 있습니다. IIR 필터가 원인 인 경우는 무엇입니까?
- 버터 워스 필터는 인과 관계가 있습니까? 항상 그렇지 않다면 어떤 경우에 인과 관계가 있습니까?
- 3에 대한 답이 참인 경우 시간 도메인과 주파수 도메인 모두에서 인과 적 버터 워스 필터를 구현하는 방법은 무엇입니까? (I을 사용하여
SciPy
같은 기능signal.butter
,signal.freqz
등)
관련 링크 :
- 버터 워스 필터 설계 지원
- filtfilt : https://docs.scipy.org/doc/scipy/reference/generated/scipy.signal.filtfilt.html
감사합니다.
답변
- 예, 버터 워스는 IIR입니다. 충동으로 인한 붕괴는 기술적으로 영원히 지속됩니다.
- 예, 모든 [구현 가능한] IIR은 인과 관계입니다.
- 네, # 1과 # 2 때문에.
- 사용하지 마십시오 signal.filtfilt. 사용 signal.lfilter. 인과 필터를 제로 위상 필터로 변경하는 반대 방향으로 두 번을 제외하고는
filtfilt
과 동일한 작업을 수행합니다lfilter
.
그러나 두 함수에 대한 문서에서 알 수 있듯이 대부분의 실제 사용을 위해서는 실제로 SOS 변형을 대신 사용해야합니다.
함수
sosfilt
(및를 사용하는 필터 설계output='sos'
)는lfilter
2 차 섹션의 수치 문제가 적기 때문에 대부분의 필터링 작업 보다 선호되어야합니다 .
기능을 요약하려면 :
- lfilter: 인과 적 단일 단계 필터링 (낮은 순서 만 해당)
- filtfilt: 영 위상 단일 단계 필터링 (낮은 차수 만 해당)
- sosfilt: 인과적인 2 차 섹션 필터링
- sosfiltfilt: 영 위상 2 차 섹션 필터링
실제로 사용하는 유일한 이유 는 계수가 이미 형식에 lfilter
있거나 교과서에서 무언가를 구현하는 경우 등입니다.filtfilt
b, a
필터를 직접 설계하는 경우 SOS 형식을 사용하면 수치 오류가 줄어 듭니다.
참고는 것을 filtfilt
기능을 두 번 필터를 적용, 그래서 원래 필터의 두 배 순서를해야합니다.
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}$$
그러나 실제로 이러한 필터를 실제로 구현할 수는 없습니다.