조정 가능한 버터 워스 필터에 대한 표준 구현 양식이 있습니까?


17

버터 워스 필터를 구현하는 표준 방법 중 하나는 일련의 2 차 섹션으로 구성되며 각 섹션은 복잡한 복합 극에 해당합니다. 예를 들어 4 차 필터의 경우 2 차 섹션이 있습니다. 컷오프가 0hz 근처에서 Nyquist 근처로 설계 되었기 때문에 z 평면에서 저역 통과 필터의 극 위치가 어떻게 바뀌는 지 고려하면 각 극 쌍에 의해 "스윕 된"경로는 단위 원 내부의 호 쌍에 해당합니다. 다음 그림에서 볼 수 있듯이 [4 차 필터의 경우] :

4 차 버터 워스 저역 통과 필터를위한 Z 평면 극 위치

이 필터들이 얼마나 오랫동안 존재했는지와이 "아크"가 s- 평면의 직선에 대응한다는 사실을 감안할 때, 누군가가 극점을 쓸 수있는 단일 매개 변수로 구현 양식을 개발했을 것입니다. "디자인 타임"과 반대로 "런타임"에서 호를 따라. 그러나 나는 아직 그런 것을 보지 못했습니다.

이 작업을 수행하는 다양한 방법, 특히 범위의 세그먼트 내에서 약간의 추가 계산을 기꺼이 내릴 의향이있는 것은 비교적 간단합니다. 내가 궁금한 것은 다음과 같습니다.

1) 최적의 특성 (예 : 효율, 견고성)을 가지며 2) 전체 범위를 포함하는 주어진 순서의 조정 가능한 [디지털] 버터 워스 필터를 구현하는 표준 방법이 있습니까?

아니면 아무도 그것에 대해 이야기 할 귀찮은 쉬운 문제입니까? 이 경우 "정적"설계 옵션 옆에 필터 설계 프로그램이 표시되는 것 같습니다.

나는 이것을 발견했다 : 가변 컷오프 주파수를 가진 다목적 버터 워스 필터 ,하지만 처음 에는 인터넷 검색 에 무엇이 있는지에 대한 정보가 많지 않습니다.

업데이트 (다시 답변)

좀 더 명확하게하기 위해 :

  • 시변 시스템에서 사용하기 위해 DC에서 Nyquist (게인을 정규화 상태로 유지)로 컷오프를 자동으로 조정하는 매개 변수 (예 : [0,1])가있는 "메타 설계"를 찾고 있습니다. 이 2 극 공진기 와 같은 것버터 워스 제약 조건을 제외 . 아이디어는 런타임시 일반적인 오프라인 설계 절차를 수행하는 것보다 매개 변수를 계산하는 것이 더 효율적이라는 것입니다.
  • 필자 는 "메타 필터"를 설계하는 방법 을 찾을 필요조차 없습니다 (즉, 숫자 대신 변수를 사용하여 수학을 수행). 표준 [비 명확한] 구현 형태에 대한 선택이 있는지 궁금합니다. 즉, 정적 사례에 해당하는 간단한 접근 방식은 시변 사례에서 숫자 문제가 발생합니다.
  • 문제가 없을 수도 있고 간단한 접근 방식이 실제로 사용됩니다. 대단 할 것입니다. 내 우려는 내가 상담 한 소스 에서이 주제를 명시 적으로 보지 못했지만 실제로 분명한 것을 놓친 것일 수 있으므로 묻습니다.
  • 여기에 더 자세한 내용을 추가하는 과정에서 필자는 파라 메트릭 바이 쿼드 구조 의 일반적인 처리 방법을 살펴 보았습니다.

업데이트 2

Jason R에 대한 두 번째 의견에 다음과 같은 답변을 찾고 있습니다.

"아, 그래, 당신은 최소한의 곱셈을 사용하는 동안 그런 엣지 케이스를 해결하기 때문에 탭된 상태 격자 형태로, 소위 논문에서 파라 메트릭 화 III-2b를 사용하고 싶습니다."

어쩌면 그와 같은 것은 존재하지 않지만 내 질문은 그것이 존재하는지, 그렇다면 그렇다면 무엇인지, 어디서 찾을 수 있습니까?입니다.

공동 자금

Jason R의 답변 에있는 comp.dsp 스레드에서 Tim Wescott이 제공 한 "관찰자 정식 형식"에 대한 참조를 기반으로 , 나는 제어 시스템 문헌에서 파고 시작해야한다고 가정하기로 결정했습니다. butterworth "상태 공간"으로 파라 메트릭 Butterworth뿐만 아니라 Chebyshev 및 Elliptic 필터의 설계 / 구현에 대한 다음과 같은 매우 시원한 처리가 이루어졌습니다.

Sophocles J. Orfanidis, "고주파 디지털 파라 메트릭 이퀄라이저 설계", J. Audio Eng. Soc., vol. 53, pp. 1026-1046, 2005 년 11 월.

발굴하는 데 약간의 시간이 걸리지 만 지금까지 읽은 내용에 따라 내가 찾고있는 것이 아닌 경우 매우 놀랐습니다. 나는 이것을 Orfanidis 논문으로 이끌어 준 comp.dsp 참조를 위해 Jason R에게 제공하고 있습니다. 그의 대답은 버터 워스 필터 설계에 대한 실질적인 개요입니다.

답변:


10

정확히 당신이 찾고있는 것이 확실하지 않습니다. 귀하의 질문에 언급 한 바와 같이 , 버터 워스 필터 제품군전달 함수는 이해하기 쉽고 분석적으로 쉽게 계산됩니다. 필터 차수와 컷오프 주파수로 조정할 수있는 버터 워스 필터 구조를 구현하는 것은 매우 간단합니다.

  1. 선택한 필터 차수, 컷오프 주파수 및 샘플 속도를 기준으로 Butterworth 아날로그 프로토 타입 필터의 극 위치를 계산하십시오. 버터 워스 필터에는 0이 없으므로 전송 기능은 극 위치 (및 DC 게인)에 의해 결정됩니다.

  2. 쌍 선형 변환을 사용하여 아날로그 프로토 타입의 극 위치를 필터의 디지털 구현에서 해당 위치에 매핑합니다.

  3. 다시 디지털 필터는 2 단계에서 찾은 극 위치에 의해 정의됩니다 . 극을 쌍으로 그룹화하여 필터를 2 차 섹션 으로 분리합니다 .

그게 다야. 내가 말했듯이, 필요한 매개 변수를 사용하여 버터 워스 필터를 프로그래밍 방식으로 설계하는 것은 간단합니다. 어떤 작업도 구현하기가 너무 복잡하지 않습니다.

편집 : 나는 당신이 찾고있는 최종 결과가 확실하지 않습니다. Butterworth 필터에만 한정되는 것은 아니며 시변 계수로 IIR 필터를 구현하는 방법에 가장 관심이 있다고 생각합니다. 필터 차단 주파수를 변경할 때 아티팩트를 최소화하는 것이 목표라고 생각합니다. 이 내용은 올해 초 comp.dsp 뉴스 그룹 에 대한 토론에서 다루었 습니다. 이 필터 구조에 대한 사용 사례 나 요구 사항이 확실하지 않지만 전환을 수행하는 방법에는 여러 가지가 있습니다.

필터가 컷오프 주파수를 정의하는 단일 매개 변수를 갖기를 원한다고 말했지만 튜너 블 구조에는 컷오프 주파수를 필요한 계수로 변환 할 수있는 방법이 있어야합니다 (또는 버터 워스의 경우 극 위치). 위에서 설명한 프로세스는 원하는 정규화 된 샘플 속도를 기반으로 극 위치를 생성하는 데 적합합니다.

z 평면에서 디지털 필터 극 위치의 지오메트리를 분석하여 극 위치 계산 프로세스를 잠재적으로 단순화 할 수 있습니다. 아날로그 버터 워스 필터는 S 평면의 왼쪽 절반에 반원을 이루는 극을 가지고 있습니다. 이중 선형 변환은이 반원을 질문 설명에 표시된 타원 모양의 패턴으로 매핑합니다. 이 알려진 패턴을 아날로그 버터 워스 필터의 극에, 쌍 선형 변환의 매핑 기능 및 일부 대수를 사용하면 디지털 필터의 극 위치에 대해 상대적으로 간단한 표현을 얻을 수 있으므로 더 간단한 필터를 얻을 수 있습니다 튜닝 동작.


Jason, 저는 주어진 버터 워스 사양을 디자인하는 방법을 찾고 있지 않고 "메타 디자인"을 찾고 있습니다. 좀 더 자세하게 질문을 업데이트하겠습니다.
datageist

1
다시 : 편집. 마지막 단락에서 설명한 프로세스는 내가 어떻게 접근 할 것인지에 대한 것입니다. 이것이 실제로 어디에서 다루 었는지 궁금합니다. 다시 말해, "아, 그래, 당신은 최소한의 곱셈을 사용하면서 그런 대소 문자를 해결하기 때문에 탭된 상태 격자 형태로, 소위 논문에서 매개 변수화 III-2b를 사용하고 싶습니다. "
datageist

1
작은 니트 피킹 코멘트 : Z 평면에서 BW 필터는 실제로 0을 갖습니다. 저역 통과 필터의 경우 모두 -1에 있고 고역 통과 필터의 경우 +1에 있습니다.
Hilmar

에스±에스에스0

2

예. 버터 워스에 대한 표준 구현 양식과 거의 모든 다른 필터 응답이 있습니다. 그것들은 모두 오픈 소스 IIR 필터 라이브러리에서 완벽하게 구현됩니다. 다음은 임의의 정도의 버터 워스 필터에 대한 극점 / 영점 쌍을 생성하는 코드 스 니펫입니다.

void AnalogLowPass::design (int numPoles)
{
  if (m_numPoles != numPoles)
  {
    m_numPoles = numPoles;

    reset ();

    const double n2 = 2 * numPoles;
    const int pairs = numPoles / 2;
    for (int i = 0; i < pairs; ++i)
    {
      complex_t c = std::polar (1., doublePi_2 + (2 * i + 1) * doublePi / n2);
      addPoleZeroConjugatePairs (c, infinity());
    }

    if (numPoles & 1)
      add (-1, infinity());
  }
}

보다시피, 극의 위치는 s- 평면을 "쌍"같은 세그먼트로 세분하여 계산됩니다.

Chebyshev, Elliptic, Legendre와 같은 모든 일반적인 필터 응답 유형에 적합한 코드가 제공됩니다 (각각의 선반 버전 포함).

https://github.com/vinniefalco/DSPFiltersDemo.git

https://github.com/vinniefalco/DSPFilters.git

스크린 샷


DSPFilters 라이브러리는 매개 변수화 된 방정식을 사용하여 런타임시 디지털 필터의 극 / 0 쌍을 계산하여 원래 질문에서 고려한 사용 사례를 직접 처리합니다. 소스 코드 스 니펫도 포함하도록 답변을 수정하겠습니다.
Vinnie Falco
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.