고차 필터를위한 계단식 바이 쿼드 섹션은 어떻게 작동합니까?


20

8 차 IIR 필터를 구현하려고하는데 내가 읽은 모든 응용 노트와 교과서는 2 차 이상의 차수 필터를 2 차 섹션으로 구현하는 것이 가장 좋다고 말합니다. tf2sosMATLAB에서 2 차 섹션에 대한 계수를 얻기 위해 사용 했는데, 예상대로 4 차 섹션에 대해 6x4 계수를 얻었습니다. SOS로 구현하기 전에 8 차 필터는 7 개의 이전 샘플 값 (및 출력 값)을 저장해야했습니다. 이제 2 차 섹션으로 구현할 때 흐름이 입력에서 출력으로 어떻게 작동합니까? 이전 샘플 값을 2 개만 저장하면됩니까? 아니면 첫 번째 필터의 출력이 x_in두 번째 필터와 같이 공급 됩니까?


이 단계에서 필터의 순서에 따라 모든 단계에 대해 이전 상태를 저장해야하므로 언급 한 것처럼 2가되지 않습니다.

답변:


13

마지막으로 말한 것입니다 ( "또는 첫 번째 필터의 출력이 두 번째 필터에 x_in로 공급됩니까?"). 아이디어는 간단합니다. biquad를 계단식으로 된 별도의 2 차 필터로 취급합니다. 제 1 필터로부터의 출력은 제 2 필터로의 입력 등이고, 따라서 지연 라인은 필터들 사이에 퍼져있다. 메모리가 제한된 환경에서 구조를 최적화해야하는 경우 인접한 바이 쿼드에 중복 지연 메모리가 있음을 알 수 있습니다 (즉, 1 단계의 마지막 몇 개의 출력 샘플이 2 단계의 마지막 몇 가지 입력 샘플과 동일하므로 필터를 단독으로 구현하는 경우와 같이 별도로 저장하지 않아도됩니다.


감사! MATLAB에서 신속하게 처리했습니다. 초기 혼란의 원인은 내가 이득을 곱하는 것을 잊었 기 때문에 (
웃음

tf2sos의 출력 인수 (게시 된 예제 코드에서와 같이)로 게인을 요구하지 않으면 다시 곱할 필요가 없습니다.
learnvst

9

실제로 2 차 섹션을 구현하는 방법에는 병렬 및 직렬의 두 가지 방법이 있습니다. 시리얼 버전에서 섹션 N의 출력은 섹션 N + 1의 입력입니다. 병렬 버전에서 모든 섹션은 동일한 입력을 가지며 (공액 복소 쌍 0 대신 하나의 실수 0 만) 각 섹션 출력은 간단히 요약됩니다. 두 가지 방법은 Z- 도메인 전달 함수의 부분 분수 확장을 통해 관련됩니다. 경고 : 이것은 수치 적으로 까다로운 문제이며 표준 Matlab 구현 "residuez"는 단위 원에 극이있는 전형적인 오디오 필터에 대해 매우 큰 수치 오류를 가질 수 있습니다.


6

다음은 계단식 2 차 섹션보다 나은 이유를 보여주는 약간의 데모 코드입니다.

clc

sr = 44100;
order = 13;

[b,a] = butter(order,1000/(sr/2),'low');
[sos] = tf2sos(b,a);

x = [1; zeros(299,1)]; %impulse


% all in one
Y = filter(b,a,x);

% cascaded biquads
Z = x;
for nn = 1:size(sos,1);
    Z = filter(sos(nn,1:3),sos(nn,4:6), Z );
end


cla; plot(Y, 'k'); hold on; plot(Z,':r'); hold off

상기 예에서 주어진 저역 통과 필터에 대해, 약 12 ​​내지 13의 차수로, 계단식 바이 쿼드를 사용하지 않는 구현에 대해 시각적으로 다른 임펄스 응답을 제공하기 위해 수치 에러가 축적된다. 필터에 따라 마일리지가 달라질 수 있습니다.

주문 = 10

여기에 이미지 설명을 입력하십시오

주문 = 13

여기에 이미지 설명을 입력하십시오


@learvst 내가 틀렸다면 나를 수정하지만 코드가 이득을 그리워합니다. 해서는 안됨 :[sos gain] = tf2sos(b,a); // Rest of code for nn = 1:size(sos,1); Z = filter(sos(nn,1:3),sos(nn,4:6), Z ); end Z = filter(gain,1,Z);
user915783
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.