곱셈 또는 컨볼 루션으로 필터링을 구현하는 것이 수치 적으로 더 안정적입니까?


12

오프라인에서 5 차 Butterworth 필터로 20,000 샘플 신호를 필터링하는 프로그램을 작성 중입니다. FFT 구현에 액세스 할 수 있습니다. 필터링을 구현하기위한 두 가지 대안이있는 것 같습니다.

  • 시간 영역에서 임펄스 응답으로 신호를 전개하거나
  • 주파수 영역에서 신호에 임펄스 응답을 곱하고 결과를 역변환

이러한 방법은 이론적 인 FT 사례에서 동일합니다. 그러나 DFT를 사용하여 실제로 수행하는 것은 상황이 다르다고 생각합니다. 방법 중 하나가 수치 적으로 더 안정적입니까? 내가 알아야 할 다른 문제가 있습니까? 계산 횟수는 중요하지 않습니다.


FFT 방법은 대부분의 신호 길이에 대해 훨씬 빠르게 계산할 수 있습니다. 시간 영역 컨볼 루션에서는 짧은 길이 만 더 빠릅니다.
endolith

답변:


5

컨볼 루션에서는 재귀 필터링이 없기 때문에 안정성 문제가 발생하지 않으므로 오류가 누적되지 않습니다. 다시 말해, 시스템은 모두 0이 아니라 극점이 아닙니다. FFT 기반 컨볼 루션은 단순히 O (n ^ 2) 대신 O (n log n) 산술 연산을 수행하기 때문에 시간 영역 컨볼 루션보다 오류 가 낮다 는 사실을 일화 적으로 들었지만 직접 확인하지는 못했습니다 .

일반적으로 알고있는 한 버터 워스 필터는 재귀 (IIR) 필터로 구현되므로 다른 주제입니다. IIR 필터는 극점과 영점을 가지므로 실제로 안정성 문제가있을 수 있습니다. 또한 IIR 필터의 경우 FFT 기반 방법은 옵션이 아니지만 IIR 필터는 순서가 매우 낮은 경향이 있습니다.

IIR 필터의 안정성 문제는 더 높은 차수에서 문제가 발생하는 경향이 있습니다. 저는 단지 숫자를 버리고 대략 6 차 차수를 밀고 있다고 말합니다. 대신, 일반적으로 계단식 바이 쿼드 (2 차 필터 섹션)로 구현됩니다. 5 차 필터의 경우이를 z- 도메인 전송 함수 (5도 합리적 함수)로 쓴 다음 5 극과 5 점으로 계수합니다. 복잡한 켤레를 수집하면 두 개의 biquad와 하나의 1 차 필터가 있습니다. 일반적으로 극이 단위 원에 가까워 질수록 안정성 문제가 발생하는 경향이 있습니다.

IIR 필터에는 노이즈 및 제한주기에 문제가있을 수 있으므로 숫자 속성이 다른 필터 토폴로지 (예 : 직접 형식 I, 직접 형식 II)가 있지만이 점을 다시 생각하지는 않습니다. 정확성은 거의 충분할 것입니다.


FIR 필터에서만 작동한다는 것은 무엇을 의미합니까? 어쨌든 IIR 필터를 샘플링해야한다고 가정했습니다. 이것을 피하기 위해 IIR 필터는 일반적으로 시간 영역에서 구현됩니까?
Andreas

1
내가 아는 한, IIR 필터는 항상 시간 영역에서 구현됩니다. IIR 필터 (여기서는 2 차 필터 또는 "바이 쿼드")는와 같은 차이 방정식으로 정의됩니다 y(n) = b0 * x(n) + b1 * x(n-1) + b2 * x(n-2) - a1 * y(n-1) - a2 * y(n-2). 이것은 이전 입력 샘플 (x 값)과 이전 출력 샘플 (y 값)의 조합입니다. FIR 필터는 과거 입력에만 의존하므로 효율적인 주파수 도메인 구현을 허용합니다. IIR 필터는 그렇지 않지만 IIR 필터는 차수가 훨씬 낮은 경향이 있기 때문에 매우 효율적입니다.
schnarf December

1
IIR 필터가 훨씬 낮은 차수를 갖는 이유는 극 (이전 출력 샘플의 피드백)으로 인해 FIR 필터와 비교하여 계수가 거의없이 필터가 훨씬 더 가파르게되기 때문입니다. 훨씬 낮은 차수를 말할 때 일반적인 IIR 필터는 2 차 (5 계수) 일 수 있지만 같은 작업에 대한 일반적인 FIR 필터는 수천 개의 계수를 가질 수 있습니다.
schnarf

4

거의 모든 경우에 최선의 선택은 컨볼 루션이나 FFT가 아니라 단순히 IIR 필터를 직접 적용하는 것입니다 (예 : sosfilt () 함수 사용). 이것은 CPU 및 메모리 소비 측면에서 훨씬 더 효율적입니다.

수치 차이를 만드는지 여부는 특정 필터에 따라 다릅니다. 극점이 단위 원에 매우 가까운 경우 약간의 차이가 발생할 수 있습니다. 도움이 될만한 몇 가지 트릭도 있습니다. 전달 함수 표현과 filter ()를 사용하지 말고 sosfilt ()와 함께 극점과 0을 사용하십시오. 차이점에 대한 예는 다음과 같습니다.

n = 2^16;  % filter length
fs = 44100; % sample rate
x = zeros(n,1); x(1) = 1;
f0 = 15; % cutoff frequency in Hz
% design with poles and zeroes
[z,p,k] = butter(5,f0*2/fs);
clf
plot(sosfilt(zp2sos(z,p,k),x));
% design with transfer function
[b,a] = butter(5,f0*2/fs);
hold on
plot(filter(b,a,x),'k');

filter ()는 44.1kHz에서 약 15Hz의 컷오프에서 나빠집니다. sosfilt ()의 경우 컷오프는 아무 문제없이 Hz @ 44.1kHz의 1/100보다 훨씬 낮을 수 있습니다.

안정성 문제가있는 경우 FFT는 그다지 도움이되지 않습니다. 필터는 IIR 필터이므로 임펄스 응답은 무한하므로 먼저 잘 려야합니다. 이러한 매우 낮은 주파수에서 임펄스 응답은 너무 길어 FFT도 비실용적이됩니다.

예를 들어 44.1 kHz에서 1/100 Hz의 컷오프를 원하고 100 dB의 임펄스 응답에서 다이나믹 레인지를 원한다면 약 2,500 만 개의 샘플이 필요합니다 !!! 44.1 kHz에서 거의 10 분이 걸리고 원래 신호보다 몇 배나 더 길다


이것은 실제로 숫자 문제에 대한 질문에 대답하지는 않지만 filter감사합니다! 내 고역 통과 차단은 250Hz에서 0.5Hz입니다. 문제의 원인은 무엇입니까 filter? 구현을 직접 작성하고 있습니다.
Andreas

2

왜 상황이 다를 것이라고 생각합니까? 이론적 인 개념은 실제 응용으로 변환되어야하며, 부동 소수점 문제와의 유일한 차이점은 우리가 벗어날 수 없습니다. MATLAB에서 간단한 예를 통해 쉽게 확인할 수 있습니다.

x=randn(5,1);
y=randn(5,1);
X=fft(x,length(x)+length(y)-1);
Y=fft(y,length(x)+length(y)-1);

z1=conv(x,y);z2=ifft(X.*Y);
z1-z2

ans =

   1.0e-15 *

   -0.4441
   -0.6661
         0
   -0.2220
    0.8882
   -0.2220
         0
   -0.4441
    0.8882

보시다시피, 오류는 기계 정밀도의 순서입니다. FFT 방법을 사용하지 않을 이유가 없습니다. Endolith가 언급했듯이 FFT 접근 방식을 사용하여 필터링 / 회전 / 교차 상관 등을하는 것이 훨씬 일반적이며 매우 작은 샘플 (이 예와 같이)을 제외하고 훨씬 빠릅니다. 그 시간 영역 처리는 결코 수행되지 않습니다 ... 그것은 모두 응용 프로그램, 요구 및 제약으로 귀결됩니다.


1
원래의 질문은 FFT 기반 필터링에 내재 된 부동 소수점 문제와 시간 영역에서 직접 필터 구현에 대한 시추였습니다. 예를 들어 필터가 실제로 길거나 FFT 구현이 잘못된 경우 고정 소수점 신호 처리에 실제로 문제가 될 수 있습니다. 배정도 부동 소수점에서 길이 5의 시퀀스에 대한 효과는 분명히 보이지 않습니다.
Jason R

@JasonR 위의 예에서 시퀀스 길이를 1e6으로 확장하면 오류는 여전히 기계 정밀도입니다. 언급 한 오류는 주로 필터 설계가 불량하거나 FFT 구현이 잘못되어 발생합니다. 이것들이 괜찮다면, 시간 영역에서의 회선이 주파수 영역에서의 회선과 다른 대답을 해야하는 이유를 알 수 없습니다.
Lorem Ipsum,

1
계산을 수행하는 도메인에 따라 다른 대답을해서는 안됩니다. 내 유일한 요점은 실제 수학적 연산이 두 가지 접근 방식 사이에서 크게 다르다는 것입니다. 따라서 사용 가능한 각 구현에 따라 실질적인 차이를 볼 수있었습니다. 배정 밀도의 경우 구현이 우수하다고 가정하면 극단적 인 경우를 제외하고는 차이가 없을 것입니다.
Jason R
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.