어플리케이션 노트

맞춤형 실시간 디지털 필터링을 통한 소음 및 과도 현상 경감

Moku 클라우드 컴파일 이용례

3 월 27, 2024 업데이트

이 애플리케이션 노트에서는 Moku Cloud Compile 및 Multi-instrument Mode를 활용하여 일반적인 이동 평균 필터를 개발하는 방법을 설명합니다. 우리는 오실로스코프와 주파수 응답 분석기를 모두 사용하여 이 기본적인 유한 임펄스 응답(FIR) 필터를 검사합니다. 그런 다음 다음을 사용하여 5점 중앙값 필터를 개발, 배포 및 검사합니다. Moku:Pro, Moku:LabMoku:Go 장치. 이러한 방식으로 선형 및 비선형 필터를 결합하면 많은 제어 또는 감지 애플리케이션에서 과도 현상을 효과적으로 거부하고 잡음을 줄일 수 있습니다.

Moku 클라우드 컴파일

Moku Cloud Compile(MCC)은 맞춤형 HDL(하드웨어 설명 언어) 코드를 빠르게 컴파일하고 Moku 장치에 배포할 수 있는 Liquid Instruments 서비스입니다. MCC는 Moku 내에서 FPGA를 열어 사용자 정의 코드를 제공하고 사용자가 특정 기능을 개발할 수 있도록 합니다. 우리는 사용자 정의 기능을 배포하는 데 도움이 되는 다양한 예제와 지원을 제공합니다.

 

이동 평균 필터

이동 평균 필터는 매우 간단하게 연속 신호 샘플 수(n)의 평균입니다. 방정식은 다음과 같습니다.

여기서 x(t)는 이산 시계열 입력 신호이고 y(t)는 출력 신호입니다. 예를 들어, n = 4인 경우:

이 간단한 필터는 신호의 노이즈를 줄이는 데 매우 유용하게 적용됩니다. 상관되지 않은 무작위(백색) 잡음의 경우 이 이동 평균 기능은 저지대역 성능이 좋지 않으면서 잡음을 제거하고 날카로운 계단형 응답을 유지하는 데 최적입니다. 이를 하드웨어에서 구현하려면 가산기와 하나의 분할만 필요하므로 제한된 하드웨어 리소스에 유용합니다. 하드웨어에서 임의의 숫자로 나누는 것은 FPGA에서 간단하지 않습니다. 일반적으로 이 필터는 n이 2의 거듭제곱(즉, n = 2^N)임을 확인하여 분할을 N 이진 비트의 오른쪽 시프트로 줄여 구현됩니다.

그림 1: 이진 비트 단위 이동

직접적인 하드웨어 구현은 그림 2와 같습니다.

그림 2: 이동 평균을 구현하기 위한 일련의 덧셈기

이 구현에는 2^N-1 가산기가 필요하며 하드웨어 측면에서 비용이 많이 듭니다. 딥 가산기 시리즈에는 합리적인 타이밍 성능을 충족하기 위해 클럭 레지스터가 필요할 수도 있습니다. 우리는 다음을 실현함으로써 이를 개선할 수 있습니다.

따라서 그림 3에 보다 일반적으로 설명되어 있습니다.

그림 3: 누산기 구현

이는 각 출력이 이전 출력과 현재 입력에 따라 달라짐을 인식합니다. 이제 이동 평균 함수를 누산기, 하나의 빼기 함수, n단계 시프트 레지스터와 2^N 나누기에 대한 비트 오른쪽 시프트로 줄였습니다(그림 3). N > 4일 때 이 하드웨어 절약 효과는 상당하며 제한 요소는 2^N 스테이지 시프터 레지스터입니다. 또한 타이밍 제약 조건을 충족하기 위해 추가로 클록된 요소가 필요하지 않습니다.

 

VHDL 구현

그림 4는 VHDL 구현의 핵심을 보여줍니다. 이 필터의 핵심은 매우 간단하며 단 12줄의 코드로 구성됩니다. p_moving_average는 마지막 N 샘플의 시간 기록입니다. 여기서 8행은 최신 입력 앞에 추가하고 가장 오래된 입력을 삭제합니다. 9행에서 누산기 r_acc는 새 입력을 추가하는 반면, 10행에서는 출력에 필요한 비트 단위 이동(나누기)을 생성합니다.

그림 4: 이동 평균 VHDL 코드

컴파일 및 배포

이 VHDL 코드를 컴파일하고 합성하는 것은 쉽습니다. 시작하려면 다음을 방문하세요. compile.liquidinstruments.com, 코드를 업로드하고 빌드를 선택합니다. Liquid Instruments 서버는 코드를 구현하기 위해 FPGA에 필요한 하드웨어 구성을 정의하는 파일 또는 비트스트림을 생성합니다. Moku:Go 및 Moku:Lab의 경우 컴파일하는 데 약 5분이 소요됩니다. Moku:Pro의 경우 FPGA 크기가 훨씬 크기 때문에 20분에 가깝습니다.

여기를 방문하시면 컴파일 및 배포 과정을 더욱 자세히 확인하실 수 있습니다.

 

MCC 이동 평균 필터 테스트

본 이동 평균 필터를 테스트하기 위해 그림 5와 같이 Moku:Go에 대한 다중 기구 모드(MiM)를 사용합니다. 이 모드에서는 샘플링 속도가 31.25MHz인 두 계측기를 배포할 수 있습니다. 또한 MiM에서 4개의 동시 계측기와 312.5 MHz의 입력 샘플링 속도를 허용하는 Moku:Pro에서 이 필터를 테스트할 수도 있습니다.

 

슬롯 1에는 Moku Cloud Compile 이동 평균 필터가 포함되어 있고 슬롯 2에는 오실로스코프 장비가 포함되어 있습니다. 오실로스코프를 사용하여 ADC(아날로그-디지털) 입력 1에서 공급되는 필터링된 신호와 필터링되지 않은 신호를 관찰합니다. 또한 오실로스코프에는 테스트 신호를 생성하는 데 사용되는 통합 파형 발생기가 있습니다. 이 경우 오실로스코프에 내장된 파형 발생기를 사용하여 2kHz에서 구형파를 생성하고 이를 출력 1로 구동합니다. 신호를 외부적으로 60dB 감쇠하여 Moku:Go의 노이즈 플로어에 가깝게 구동합니다. 그런 다음 이 신호를 다시 입력 1로 라우팅합니다.

 

 

그림 5: 다중 장비 모드의 필터 테스트 설정

그림 6에서는 파란색 트레이스에서 감쇠 후 노이즈가 있는 구형파를 볼 수 있습니다. 빨간색 추적은 이동 평균기의 출력이 훨씬 더 깨끗한 구형파임을 보여줍니다. 이는 MCC와 MiM의 한 슬롯을 사용하여 활성화된 유용한 노이즈 감소 기술입니다.

그림 6: MCC 이동 평균 필터를 사용한 노이즈 감소

따라서 이 간단한 필터는 노이즈를 줄이는 데 유용했습니다. 또한 계산적으로 매우 가볍기 때문에 누산기, 감산기 및 비트 단위 이동만 필요합니다. 즉, Moku:Pro에서는 312.5MSa/s, Moku:Go에서는 31.25MSa/s의 매우 빠른 속도로 실행될 수 있습니다.

잡음 전력에 주의를 기울이면 이 평균 필터가 잡음 전력을 2배로 감소시킨다는 것을 알 수 있습니다.N; 소음 진폭은 √2만큼 감소합니다.N. 우리의 구현에서는 N=8을 사용하므로 잡음 진폭은 원본의 6.25%(1/16)로 감소되어야 합니다.

그림 7은 각각 진폭이 161.2mV와 9.162mV인 Moku:Go 입력 잡음(파란색 추적)과 이동 평균 신호(빨간색 추적)를 보여줍니다. 이를 통해 필터 이후의 잡음 진폭이 원래 잡음의 1/16인 예상 계수, 즉 9.162/161.2mV = 0.057에 가깝다는 것을 알 수 있습니다. 이 필터는 작동 중이며 우리의 기대를 충족합니다.

MCC- 평균 입력 노이즈

그림 7: 평균 입력 잡음

주파수 응답

Moku 주파수 응답 분석기(FRA) 장비를 사용하여 이동 평균의 주파수 응답을 쉽게 결정할 수 있습니다. FRA는 출력에서 ​​주파수 스윕 사인파를 구동하고 입력에서 결과 진폭과 위상을 측정합니다. 그림 8은 테스트 설정을 보여줍니다.

그림 8: 주파수 응답 분석기 MiM 구성

그림 9는 MCC 필터의 결과적인 주파수 응답을 보여줍니다. 이를 이상적인 이동 평균 필터의 MATLAB 플롯인 그림 10과 비교하면 이동 평균 필터가 특히 우수한 저지대역 감쇠를 제공하지 않는다는 것을 알 수 있습니다.

이동 평균 필터의 주파수 응답

그림 9: 이동 평균 필터의 주파수 응답

                                                                                       이상적인 이동 평균 필터의 MATLAB 플롯

그림 10: 이상적인 이동 평균 필터의 MATLAB 플롯

중앙값 필터

중앙값 필터는 작은 이동 창의 중앙값을 결정하는 비선형 필터입니다. 입력 샘플은 창을 통과하고 출력은 주어진 시간에 샘플의 중앙값입니다. 이동 평균 필터는 고르게 분포된 무작위 잡음을 필터링하는 데 적합하지만 중간 필터는 매우 짧은 스파이크나 임펄스 잡음을 필터링하는 데 적합합니다. 이는 종종 이미지 처리에 배포되지만 보다 일반적인 신호 처리에도 유용합니다.

일반적으로 창 길이에 대해 홀수 개의 샘플(3, 5 또는 7포인트)이 선택됩니다. 이는 출력이 단순히 값 순서 창의 중간 샘플임을 의미합니다.

 

VHDL 구현

그림 11은 VHDL에서 11점 중앙값 함수의 구현을 보여줍니다. 클록 신호의 각 상승 에지에서 그림 11의 기능은 5개의 입력 샘플을 낮은 값에서 높은 값으로 정렬합니다. 이 정렬은 12행부터 20행까지의 두 개의 중첩된 "for" 루프에서 발생합니다. 따라서 중앙값은 정렬된 창의 세 번째 샘플입니다. 이는 22행의 출력에 할당됩니다.

그림 11: 중앙값 필터 VHDL 코드

오실로스코프의 파형 생성기와 함께 오실로스코프 및 Moku Cloud Compile 슬롯을 사용하여 이동 평균 필터와 동일한 방식으로 중앙값 필터의 시간 영역 성능을 분석할 수 있습니다.

그림 12는 필터링 후 필터링되지 않은 노이즈의 피크 대 피크 측정이 3.66mV에서 305μV로 낮아짐으로써 노이즈 피크가 크게 감소한 것을 보여줍니다. 이는 1/12로 축소한 것으로 이동 평균 필터(1/16)만큼 효과적이지 않습니다.

그림 12: 중앙값 필터 시간 영역 성능

중앙값 필터의 주요 기능은 임펄스 잡음을 제거하는 것이므로 임펄스가 추가된 구형파를 사용하여 성능도 검토합니다. 그림 13은 앞쪽 스파이크와 낮은 레벨 중간에 스파이크가 있는 구형파를 보여줍니다(파란색 채널 B). 필터링된 신호는 중앙값 필터가 스파이크를 제거했지만 날카로운 앞 가장자리와 뒷 가장자리(빨간색 채널 A)를 유지한 후 구형파를 보여줍니다.

스파이크 노이즈를 제거하는 중앙값

그림 13: 스파이크 노이즈를 제거한 중앙값

우리는 MCC 클럭 속도가 31.25MHz인 Moku:Go에서 이 중앙값 필터를 컴파일하고 테스트했습니다. 그러나 Moku:Pro에 대해 이 예제를 테스트할 때 312.5MHz의 증가된 클럭 속도로 인해 구현을 조정해야 했습니다. 그림 11의 구현에서는 변수가 포함된 중첩 for 루프를 사용합니다. 이는 Moku:Pro 클럭 속도의 14ns 주기를 초과하는 전파 지연(그림 3.2)을 사용하여 크고 깊은 조합 논리 네트워크로 합성됩니다. 타이밍을 충족하려면 클록 요소 간 로직의 전파 지연이 클록 주기보다 작아야 합니다.

로직을 통한 전파 지연

그림 14: 로직을 통한 전파 지연

우리는 큰 논리 블록을 레지스터나 클록 요소로 구분된 세그먼트로 나누어야 합니다. VHDL에서는 변수가 아닌 신호를 사용하여 이를 달성합니다. 이 경우 코딩의 용이성을 위해 논리를 5단계로 나눕니다. 이는 약 5클럭 주기의 입력-출력 대기 시간이 있다는 것을 의미하며, 이는 우리 어플리케이션에 적합합니다.

그림 15는 이 5단계 파이프라인 중앙값 알고리즘의 한 단계를 보여줍니다. 본 프로젝트 파일의 전체 VHDL은 여기에서 다운로드 할 수 있습니다.

그림 15: 파이프라인 중앙값 필터의 한 단계

Moku:Pro 중앙값 필터 테스트

우리는 AWG(임의 파형 발생기)와 함께 MiM에서 Moku:Pro를 사용하여 노이즈 스파이크가 있는 구형파를 생성합니다. 그런 다음 AWG의 출력을 MCC 중앙 필터에 연결하고 오실로스코프를 사용하여 효과를 관찰합니다.

이 MiM 설정은 그림 16에 나와 있습니다. 그림 17에 표시된 대로 AWG를 구성했습니다. 해당 출력은 Moku:Pro의 출력 3에 대한 아날로그 신호를 구동하고, 이는 다시 동축 케이블을 통해 입력 3에 루프됩니다. Moku Cloud Compile 슬롯의 중앙값 필터를 사용하고 오실로스코프를 사용하여 성능을 관찰했습니다.

그림 16: Moku:Pro 중앙값 필터 테스트 시스템

마지막으로 그림 18에 표시된 대로 중앙 필터의 성능을 관찰합니다. 중앙 필터는 구형파의 날카로운 모서리를 유지하면서 임펄스를 제거했습니다. 스테이지된 클록 파이프라인의 삽입으로 인해 발생하는 처리 지연으로 인해 약 44ns의 레이턴시가 발생합니다.

임펄스가 있는 구형파인 임의 파형 발생기

그림 17: 임의 파형 발생기, 임펄스가 있는 구형파

 

Moku:Pro 중앙값 필터 연산

그림 18: Moku:Pro 중앙값 필터 작동

요약

이 애플리케이션 노트에서는 이동평균 필터와 중앙값 필터의 구현에 대해 논의했습니다. 이를 구현하기 위해 우리는 Moku 클라우드 컴파일을 활용하여 필터를 구축하고 Moku:Go 장치에 배포했습니다. 그런 다음 증가된 Moku:Pro 클럭 속도와의 호환성을 보장하기 위해 디자인을 수정했습니다. MCC 필터 동작을 검증하기 위해 다중 기구 모드를 사용하여 완전히 사용자 정의 가능한 필터, 오실로스코프 및 임의 파형 발생기를 연결했습니다. 이 구현을 통해 디지털 신호 처리 애플리케이션에서 신호 에지를 보존하면서 효율적인 노이즈 감소가 가능합니다.

코드 다운로드

이번 어플리케이션 노트에서 사용된 코드를 여기에서 다운로드하실 수 있습니다.

모쿠: 데모 모드

Moku: macOS 및 Windows용 앱을 이 웹 사이트에서 다운로드할 수 있습니다. 데모 모드는 하드웨어가 없어도 작동하며 Moku:Go, Moku:Lab 및 Moku:Pro를 사용하는 방법을 안내해드립니다. Moku: 앱은 Apple 앱 스토어에서 iPadOS버전으로도 사용할 수 있습니다.

질문이 있으시거나 인쇄가능 버전을 필요로 하십니까?

support@liquidinstruments.com로 문의 부탁드립니다.

참조

[1] www.mathworks.com/help/dsp/ug/how-is-moving-average-filter-other-from-an-fir-filter.html