3 월 27, 2024 업데이트
이 애플리케이션 노트에서는 Moku Cloud Compile과 Multi-Instrument Mode를 활용하여 공통 이동 평균 필터를 개발하는 방법을 설명합니다. 오실로스코프 진동수 응답 분석기 이 기본 유한 임펄스 응답(FIR) 필터를 검사합니다. 그런 다음 다음을 사용하여 5점 중간 필터를 개발, 배포 및 검사합니다. 모쿠 장치. 이러한 방식으로 선형 및 비선형 필터를 결합하면 많은 제어 또는 감지 애플리케이션에서 과도 현상을 효과적으로 거부하고 잡음을 줄일 수 있습니다.
Moku 클라우드 컴파일
Moku 클라우드 컴파일 (MCC)는 Moku 장치에 사용자 정의 하드웨어 설명 언어(HDL) 코드를 빠르게 컴파일하고 배포할 수 있는 Liquid Instruments 서비스입니다. MCC는 Moku 내의 FPGA를 사용자 정의 코드로 열어 사용자가 특정 기능과 특징을 개발할 수 있도록 합니다. 사용자 정의 기능을 배포하는 데 도움이 되는 다양한 예제와 지원을 제공합니다.이동 평균 필터
이동 평균 필터는 매우 간단하게 연속 신호 샘플 수(n)의 평균입니다. 방정식은 다음과 같습니다.
여기서 x(t)는 이산 시계열 입력 신호이고 y(t)는 출력 신호입니다. 예를 들어, n = 4인 경우:
이 간단한 필터는 신호의 노이즈를 줄이는 데 매우 유용하게 적용됩니다. 상관되지 않은 무작위(백색) 잡음의 경우 이 이동 평균 기능은 저지대역 성능이 좋지 않으면서 잡음을 제거하고 날카로운 계단형 응답을 유지하는 데 최적입니다. 이를 하드웨어에서 구현하려면 가산기와 하나의 분할만 필요하므로 제한된 하드웨어 리소스에 유용합니다. 하드웨어에서 임의의 숫자로 나누는 것은 FPGA에서 간단하지 않습니다. 일반적으로 이 필터는 n이 2의 거듭제곱(즉, n = 2^N)임을 확인하여 분할을 N 이진 비트의 오른쪽 시프트로 줄여 구현됩니다.
그림 1: 이진 비트 단위 이동
그림 2: 이동 평균을 구현하기 위한 일련의 덧셈기
따라서 그림 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의 샘플링 속도로 두 개의 계측기를 사용할 수 있습니다. Moku:Pro에서도 이 필터를 테스트할 수 있는데, Moku:Pro는 MiM 모드에서 네 개의 계측기를 동시에 사용할 수 있고 입력 샘플링 속도는 312.5MHz입니다. 슬롯 1에는 Moku 클라우드 컴파일 이동평균 필터가, 슬롯 2에는 오실로스코프 계측기가 있습니다. 오실로스코프를 사용하여 아날로그-디지털 변환기(ADC) 입력 1에서 입력되는 필터링된 신호와 필터링되지 않은 신호를 관찰합니다. 오실로스코프에는 테스트 신호를 생성하는 데 사용되는 파형 발생기가 내장되어 있습니다. 이 경우 오실로스코프의 내장 파형 발생기를 사용하여 2kHz의 구형파를 생성하고 출력 1로 출력합니다. 외부에서 신호를 60dB 감쇠시켜 Moku:Go의 노이즈 플로어에 가깝게 만듭니다. 그런 다음 이 신호를 다시 입력 1로 보냅니다.
그림 5: 다중 계측기 모드에서의 필터 테스트 설정
그림 6에서는 파란색 트레이스에서 감쇠 후 노이즈가 있는 구형파를 볼 수 있습니다. 빨간색 추적은 이동 평균기의 출력이 훨씬 더 깨끗한 구형파임을 보여줍니다. 이는 MCC와 MiM의 한 슬롯을 사용하여 활성화된 유용한 노이즈 감소 기술입니다.
그림 6: MCC 이동 평균 필터를 사용한 노이즈 감소
따라서 이 가장 간단한 필터는 노이즈 감소에 유용했습니다. 또한, 누산기, 감산기, 비트 단위 시프트만 필요하기 때문에 계산량이 매우 가볍습니다. 즉, Moku:Pro에서는 312.5 MSa/s, Moku:Go에서는 31.25 MSa/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에 근접함을 알 수 있습니다. 이 필터는 정상적으로 작동하며 예상을 충족합니다.
그림 7: 평균 입력 잡음
주파수 응답
Moku 주파수 응답 분석기(FRA) 장비를 사용하여 이동 평균의 주파수 응답을 쉽게 결정할 수 있습니다. FRA는 출력에서 주파수 스윕 사인파를 구동하고 입력에서 결과 진폭과 위상을 측정합니다. 그림 8은 테스트 설정을 보여줍니다.
그림 8: 주파수 응답 분석기 MiM 구성
그림 9는 MCC 필터의 결과적인 주파수 응답을 보여줍니다. 이를 이상적인 이동 평균 필터의 MATLAB 플롯인 그림 10과 비교하면 이동 평균 필터가 특히 우수한 저지대역 감쇠를 제공하지 않는다는 것을 알 수 있습니다.
그림 9: 이동 평균 필터의 주파수 응답
그림 10: 이상적인 이동 평균 필터의 MATLAB 플롯
중앙값 필터
중앙값 필터는 작은 이동 윈도우의 중앙값을 구하는 비선형 필터입니다. 입력 샘플은 이 윈도우를 통과하고, 출력은 특정 시점에서의 샘플 중앙값입니다. 이동 평균 필터가 고르게 분포된 랜덤 노이즈를 제거하는 데 적합한 반면, 중앙값 필터는 매우 짧은 스파이크나 임펄스 노이즈를 제거하는 데 적합합니다. 중앙값 필터는 이미지 처리에서 자주 사용되지만, 일반적인 신호 처리에서도 유용하게 활용됩니다. 일반적으로 윈도우 길이는 3, 5, 또는 7 포인트와 같은 홀수 개의 샘플로 설정됩니다. 따라서 출력은 값 순서대로 정렬된 윈도우의 가운데 샘플이 됩니다.VHDL 구현
그림 11은 VHDL에서 11점 중앙값 함수의 구현을 보여줍니다. 클록 신호의 각 상승 에지에서 그림 12의 함수는 다섯 개의 입력 샘플을 낮은 값에서 높은 값 순으로 정렬합니다. 이 정렬은 20행부터 22행까지 두 개의 중첩된 "for" 루프에서 수행됩니다. 따라서 중앙값은 정렬된 윈도우의 세 번째 샘플이며, XNUMX행의 출력에 할당됩니다.
그림 11: 중앙값 필터 VHDL 코드
오실로스코프의 파형 생성기와 함께 오실로스코프 및 Moku Cloud Compile 슬롯을 사용하여 이동 평균 필터와 동일한 방식으로 중앙값 필터의 시간 영역 성능을 분석할 수 있습니다.
그림 12는 잡음 피크가 크게 감소한 것을 보여줍니다. 필터링되지 않은 잡음의 피크 간 측정값이 필터링 후 3.66mV에서 305μV로 낮아졌습니다. 이는 1/12 감소로, 이동 평균 필터(1/16)만큼 효과적이지 않습니다.
그림 12: 중앙값 필터 시간 영역 성능
그림 13: 스파이크 노이즈를 제거한 중앙값
MCC 클럭 속도가 31.25MHz인 Moku:Go에서 이 중간값 필터를 컴파일하고 테스트했습니다. 그러나 Moku:Pro에서 이 예제를 테스트할 때, 클럭 속도가 312.5MHz로 증가했기 때문에 구현 방식을 조정해야 했습니다. 그림 11의 구현은 변수를 사용하는 중첩 for 루프를 사용합니다. 이는 Moku:Pro 클럭 속도의 14ns 주기를 초과하는 전파 지연(그림 3.2)을 갖는 크고 깊은 조합 논리 회로망으로 합성됩니다. 타이밍을 맞추려면 클럭된 요소 간의 논리 전파 지연이 클럭 주기보다 작아야 합니다.
그림 14: 로직을 통한 전파 지연
우리는 큰 논리 블록을 레지스터나 클록 요소로 구분된 세그먼트로 나누어야 합니다. VHDL에서는 변수가 아닌 신호를 사용하여 이를 달성합니다. 이 경우 코딩의 용이성을 위해 논리를 XNUMX단계로 나눕니다. 이는 약 XNUMX클럭 주기의 입력-출력 대기 시간이 있다는 것을 의미하며, 이는 우리 어플리케이션에 적합합니다.
그림 15는 이 XNUMX단계 파이프라인 중앙값 알고리즘의 한 단계를 보여줍니다. 전체 VHDL은 다운로드 가능한 프로젝트 파일에서 확인할 수 있습니다. 여기에서 확인하세요.
그림 15: 파이프라인 중앙값 필터의 한 단계
Moku:Pro 중앙값 필터 테스트
우리는 AWG(임의 파형 발생기)와 함께 MiM에서 Moku:Pro를 사용하여 노이즈 스파이크가 있는 구형파를 생성합니다. 그런 다음 AWG의 출력을 MCC 중앙 필터에 연결하고 오실로스코프를 사용하여 효과를 관찰합니다.
이 MiM 설정은 그림 16에 나와 있습니다. 그림 17에 표시된 대로 AWG를 구성했습니다. 해당 출력은 Moku:Pro의 출력 3에 대한 아날로그 신호를 구동하고, 이는 다시 동축 케이블을 통해 입력 3에 루프됩니다. Moku Cloud Compile 슬롯의 중앙값 필터를 사용하고 오실로스코프를 사용하여 성능을 관찰했습니다.
그림 16: Moku:Pro 중앙값 필터 테스트 시스템
그림 17: 임의 파형 발생기, 임펄스가 있는 구형파
그림 18: Moku:Pro 중앙값 필터 작동



