임베디드 마이크로컨트롤러에서 디지털 필터링 마스터하기: LPC55S69 PowerQuad의 듀얼 Biquad IIR 엔진
시간 영역 데이터 필터링의 가장 일반적인 기법을 탐구하고, LPC55S69의 PowerQuad 듀얼 Biquad IIR 엔진이 DSP 작업을 어떻게 가속화하는지 살펴봅니다.
시간에 따라 수집된 데이터를 다룰 때 첫 단계는 종종 디지털 필터 적용입니다. 다양한 필터링 전략을 이해하면 신호 품질이 향상될 뿐만 아니라 CPU가 다른 중요한 작업을 위해 자유로워집니다. 이는 임베디드 마이크로컨트롤러에서 필수적인 고려 사항입니다.
이 기사는 가장 널리 사용되는 시간 영역 필터링 방법을 다루고, LPC55S69 MCU의 PowerQuad 유닛에 있는 듀얼 Biquad IIR 엔진을 파고들어 다양한 필터링 시나리오에서 활용할 수 있는 강력한 DSP 빌딩 블록을 다룹니다.
연속 샘플링 데이터용 일반 필터
시간 영역 수집 시스템에서 샘플은 고정되고 알려진 비율로 도착합니다. 시간 영역 필터는 이 샘플들을 처리하여 추가 처리되거나 디지털-아날로그 변환기(DAC)로 전송될 수 있는 새로운 신호를 생성합니다. 모든 필터의 핵심은 사인파에 대한 응답으로, 주파수 전반에 걸쳐 진폭과 위상을 변경합니다. 주파수 스펙트럼 전반의 집단적 행동은 필터의 주파수 응답으로 알려져 있습니다.
유한 임펄스 응답(FIR) 필터는 표준 접근 방식입니다. 가장 최근 데이터를 이전 샘플의 이력과 결합하여 각 출력 샘플을 생성합니다.

그림 1. 입력 이력을 사용한 샘플별 필터 처리.
직관적인 구현은 이전 샘플을 배열에 저장하고 다음 방정식을 적용합니다:
x[n] // 가장 최근 입력
x[n-1], x[n-2] // 이전 두 입력 샘플
y[n] // 다음 출력 샘플
y[n] = b0 * x[n] + b1 * x[n-1] + b2 * x[n-2] 이 단순한 곱셈-누적 연산은 상수 계수와 정의된 이력 길이를 사용하여 필터의 주파수 응답을 형성합니다. 계수를 조정함으로써 필터는 로우패스, 하이패스, 대역통과 장치로 작동할 수 있습니다.
개념적으로 단순하지만, FIR 필터는 정밀한 제어를 위해 많은 과거 샘플을 요구하는 경우가 많아, 특히 이력이 증가할 때 기존 CPU에서 계산 비용이 많이 들 수 있습니다.
필요한 이력을 줄이기 위해 많은 설계가 피드백을 통합하여 무한 임펄스 응답(IIR) 필터의 기초를 형성합니다:
// 앞선 명명 규칙을 따름
y[n] = b0 * x[n] + b1 * x[n-1] + b2 * x[n-2] + a1 * y[n-1] + a2 * y[n-2] 위 예제는 일반적인 IIR 빌딩 블록인 바이쿼드 필터를 보여주며, 더 높은 차수의 응답을 위해 캐스케이드될 수 있습니다. FIR 필터에 비해 더 적은 계수가 필요하지만, 불안정과 발진을 피하기 위해 신중한 계수 선택이 필수적입니다.
표준 필터 설계를 위한 최적 계수를 생성하는 수많은 도구가 존재합니다. 이러한 "쿡북"은 고품질 필터로의 빠른 경로를 제공합니다.

그림 2. 자동으로 계수를 생성하는 수많은 도구 중 하나.
PowerQuad IIR 바이쿼드 엔진 사용하기
LPC55S69의 PowerQuad 유닛은 IIR 바이쿼드 필터 실행을 위한 전용 하드웨어를 제공합니다. 필터링 워크로드를 이 코프로세서에 오프로드함으로써 Cortex-M33 코어가 애플리케이션 로직에 집중할 수 있게 합니다.
필터 알고리즘 자체는 단순하지만, 상당한 CPU 사이클을 소비할 수 있습니다. PowerQuad의 하드웨어는 필터링 및 기타 복잡한 수학 연산에 특별히 최적화되어 있습니다. AHB 버스와 Arm® Cortex®-M33 코프로세서 인터페이스를 통해 시스템에 연결됩니다.
개발자는 일반적으로 무료 Eclipse 기반 MCUXpresso IDE와 여러 PowerQuad 예제 애플리케이션을 포함하는 LPC55S69 SDK를 사용합니다.

그림 3. PowerQuad 디지털 필터 예제 선택.
"powerquad_filter" 예제는 다양한 필터 구성을 시연합니다. 핵심 로직은 powerquad_filter.c에 있으며, 기본 필터 설정을 보여줍니다.
이 기사가 Direct Form I 구현을 소개했지만, PowerQuad는 내부적으로 연산을 Direct Form II 구조로 재정렬합니다. 이 배열은 입력과 출력 이력을 모두 저장할 필요를 없애고, 대신 단일 중간 상태 벡터 v[n]을 유지합니다.
AHB 상의 여러 레지스터가 PowerQuad의 IIR 필터 연산 구성에 필요한 상태와 계수를 보유합니다. SDK 예제에서 상태는 PQ_BiquadRestoreInternalState를 통해 초기화됩니다.
초기화 후, 필터는 fsl_powerquad_filter.c의 PQ_VectorBiquadDf2F32를 사용하여 데이터 블록을 처리합니다:
/* 함수는 입력 샘플을 8의 배수로 처리합니다. */ 
그림 4. 벡터화된 IIR 필터 구현
이 루틴은 MCR 명령을 통해 메인 CPU에서 PowerQuad 코프로세서로 데이터를 전송합니다. PowerQuad는 곱셈-누적 연산을 수행하고, 필터링된 결과를 또 다른 MCR 전송으로 CPU에 다시 전달합니다. 이 오프로딩은 Cortex-M33 코어에서 동일한 알고리즘을 실행하는 것에 비해 CPU 부하를 극적으로 줄입니다.
디지털 필터링을 위한 듀얼 바이쿼드 IIR 엔진
LPC55S69의 PowerQuad 유닛은 두 개의 독립적인 바이쿼드 엔진을 포함하여 병렬 또는 캐스케이드 필터링 연산을 가능하게 합니다. AHB 버스의 구성 레지스터가 IIR 기능을 설정하고, 데이터 교환은 코프로세서 인터페이스를 통해 발생합니다.
MCUXpresso SDK는 견고한 시작점을 제공하지만, 제공된 코드는 순수한 성능보다 명확성을 우선시합니다. 개발자는 CPU와 PowerQuad 간의 데이터 전송을 최소화하여 추가로 최적화할 수 있습니다.
NXP는 필터 계수 생성과 시각화를 돕는 IIR 바이쿼드 필터 설계 및 시각화 도구를 제공합니다. NXP 커뮤니티 페이지에는 LPC55S69의 PowerQuad 유닛과 그 기능에 대한 심층 문서도 제공됩니다.
산업 기사는 업계 파트너가 All About Circuits 독자들에게 유용한 소식, 메시지, 기술을 편집 콘텐츠로는 다루기 어려운 방식으로 공유할 수 있는 콘텐츠 형태입니다. 모든 산업 기사는 독자들에게 유용한 소식, 기술 전문성, 또는 이야기를 제공하려는 의도로 엄격한 편집 가이드라인을 따릅니다. 산업 기사에 표현된 관점과 의견은 파트너의 것이며 All About Circuits나 그 작가들의 의견과 반드시 일치하지는 않습니다.