LabHub
배우기 러닝패스 코스

전자회로 입문 — 센서 입력 검증 · 앨리어싱과 필터의 불가능한 요구 · 이론

125Hz로 보이는875Hz의 정체

LabHub 에서 이어서 보기

한 줄 요약

표본에서 125Hz가 보인다는 사실만으로 원래 입력도 125Hz였다고 말할 수는 없습니다. 관측 시계, 아날로그 필터, 수치 수렴을 각각 바꿔 어디까지 구별 가능한지 확인합니다.

왜 이게 필요했나

우주 온실의 센서 담당자가 팬을 켤 때마다 125Hz 진동이 생긴다고 보고합니다. 앞 단원에서 ADC 획득 시간을 늘려 이전 채널의 기억은 줄였습니다. 그런데 이번에는 전압이 충분히 정착해도 이상한 주파수가 사라지지 않습니다. 팬에 정말 125Hz 성분이 있는 걸까요, 아니면 빠른 진동을 느리게 관측해서 다른 이름으로 보고 있는 걸까요?

획득 시간 문제는 한 번의 표본이 목표 전압에 충분히 가까운가를 묻습니다. 앨리어싱 문제는 서로 다른 연속 신호가 같은 표본열을 만들 수 있는가를 묻습니다. 전자는 각 표본의 오차를 줄이는 문제이고, 후자는 관측으로 잃은 구별 가능성의 문제입니다. 비트 수를 늘리거나 소수점을 더 출력한다고 두 문제가 함께 해결되지는 않습니다.

Analog Devices의 [입력 필터 FAQ](https://www.analog.com/en/resources/faqs/FAQ_antialiasing_filter.html)는 대역 밖 성분이 표본화 뒤 관심 대역으로 접혀 들어오며, 그 성분을 원래 대역 안 신호와 구분할 수 없다는 점을 설명합니다. 여기서는 그 원리를 인용하는 데서 멈추지 않고 두 개의 실제 ngspice 출력 파일을 만들어 대조합니다. 장비에 전압을 가하는 실험은 아닙니다.

어떻게 동작하나

시계가 두 개다

시뮬레이터가 회로를 계산하는 시간 간격과 우리가 결과에서 표본을 뽑는 간격은 다릅니다. ngspice는 회로 방정식을 풀기 위해 시간점을 남깁니다. 파형 파일의 행 번호를 ADC 시계라고 간주하면 안 됩니다. 첫 구간의 작은 시간 간격이나 내부 적응형 계산 때문에 행 간격이 관측 주기와 다를 수 있습니다.

이번 회로는 1V 진폭의 코사인 입력, 직렬 1kΩ 저항, 접지로 연결한 커패시터입니다. 커패시터가 있을 때 차단 주파수 fc=1/(2πRC)이며 300Hz와 80Hz를 비교합니다. 필터 없음은 커패시터 대신 10¹²Ω 부하로 구현합니다. 이 부하 때문에 이득이 수학적으로 정확히 1은 아니지만 이번 허용차보다 훨씬 작은 차이입니다.

[ngspice 공식 튜토리얼](https://ngspice.sourceforge.io/ngspice-tutorial.html)은 넷리스트로 회로를 정의하고 과도 해석 결과를 파일로 다루는 흐름을 설명합니다. 제공 도우미는 그 작업만 맡습니다. 표본을 고르고 스펙트럼을 계산하고 조건을 판정하는 부분은 직접 작성합니다. 사용 버전은 이미지에 포함된 ngspice42이며 웹 문서의 설치 버전과 같다고 가정하지 않습니다.

회로 계산의 최대 간격 dt는 2µs와 1µs, 전체 길이는 90ms입니다. 관측 시작은 24ms, 표본 수는 64개입니다. 관측률 fs를 1000Hz에서 4000Hz로 바꾸면 tᵢ=0.024+i/fs도 실제로 바꿉니다. 1kHz 관측은 마지막 표본이 87ms, 4kHz 관측은 39.75ms입니다. 같은 64개 숫자의 주파수 축만 네 배로 바꾸는 것은 새로운 측정이 아닙니다.

원 파일에 정확한 관측 시각이 없으면 바로 앞뒤 두 행의 출력 전압을 선형 보간합니다. 입력 열 v(in)이 아니라 필터 뒤 v(out)을 선택해야 합니다. 범위 밖을 임의로 연장하는 외삽은 거절합니다. 파일이 중간에 끊겼는데 필요한 표본 일부가 있다는 이유만으로 정상 보고를 만들지 않습니다. 완전한 90ms 파형인지 먼저 확인하는 로더가 제공됩니다.

다른 주파수가 같은 이름을 얻는 이유

실수 신호의 첫 나이퀴스트 구간은 0~fs/2입니다. 양의 입력 주파수 f에 대해 r=f mod fs를 구하면 그 구간의 관측 주파수는 min(r,fs−r)입니다. fs=1000일 때 125,875,1125,1875Hz가 모두 125Hz로 접힙니다. abs(fs−f)만 쓰면 첫 번째 이웃 구간에서는 맞아 보여도 더 먼 구간에서는 틀립니다.

코사인의 표본을 대입해 보세요. cos(2π(fs−f)i/fs)=cos(2πi−2πfi/fs)=cos(2πfi/fs)입니다. 이번 시작점 24ms와 두 입력은 위상도 맞아 무필터 125Hz와 875Hz의 표본열이 수치 허용차 안에서 겹칩니다. 임의의 시작점·위상·필터에서도 항상 표본열이 같다는 뜻은 아닙니다. RC 필터는 진폭뿐 아니라 위상도 바꾸기 때문입니다.

그래서 비교 함수는 스펙트럼의 최대 진폭만 보지 않습니다. 같은 fs·시작점·표본 수를 확인한 뒤 각 표본의 최대 절대 차이를 구합니다. 크기 스펙트럼은 위상 정보를 버립니다. 예컨대 부호가 반대인 코사인은 같은 크기 스펙트럼을 갖지만 표본열은 같지 않습니다. 여기서 indistinguishable이라는 이름은 명시한 관측과 100µV 허용차 안에서 구별하지 못했다는 뜻입니다.

DFT를 직접 계산하는 이유

64개 표본 xᵢ에 대해 Zₖ=(1/N)Σxᵢ exp(−j2πki/N)를 계산합니다. k번째 빈의 주파수는 kfs/N입니다. 실수 신호의 단측 결과는 k=0..N/2만 남깁니다. 내부 빈의 진폭은 2|Zₖ|지만 DC와 나이퀴스트 빈은 |Zₖ|입니다. 끝점 두 개까지 무조건 두 배 하면 상수 전압과 번갈아 부호가 바뀌는 신호의 진폭을 과장합니다.

1kHz에서 빈 간격은 15.625Hz이고 125Hz는 8번 빈입니다. 4kHz에서 간격은 62.5Hz이며 125Hz는 2번, 875Hz는 14번 빈입니다. 두 관측 모두 신호 주기가 DFT 창에 정수 번 들어오도록 선택했습니다. 이 조건을 coherent sampling이라고 합니다. 덕분에 창 함수 보정이나 빈 사이 피크 추정과 섞이지 않고 앨리어싱 자체를 공부할 수 있습니다.

주파수가 빈과 맞지 않으면 에너지가 여러 빈으로 퍼질 수 있습니다. 그러면 최대 빈의 진폭만 원 신호 진폭으로 쓰면 안 됩니다. 이번 분석 계약의 두 입력 쌍은 [125,875]와 [375,625]로 제한합니다. 무신호의 부동소수점 찌꺼기에 주파수 이름을 붙이지 않도록 최대 진폭이 1µV 이하면 peak_hz는 null입니다. 이는 이번 보고 규약이지 보편적인 센서 검출 한계가 아닙니다.

필터가 있다는 것과 요구를 만족한다는 것

1차 RC의 정상상태 이득은 G(f)=1/√(1+(f/fc)²)입니다. 이 f는 필터에 실제로 들어간 원래 주파수입니다. 875Hz를 이미 접힌 125Hz로 바꾼 뒤 RC 이득을 계산하면 필터와 표본화의 순서를 뒤집게 됩니다.

원하는 125Hz의 진폭을 0.9V 이상 보존하고 방해 875Hz는 0.1V 이하로 줄이고 싶다고 합시다. 입력 진폭은 둘 다 1V입니다. 해석식의 반올림 값은 다음과 같습니다. 실제 실행 보고서에는 계산값 대신 파일에서 관측한 값이 들어갑니다.

| 조건 | 원하는 125Hz 진폭 | 방해 875Hz 진폭 | 동시에 만족? |
| --- | --- | --- | --- |
| 필터 없음 | 약1.000V | 약1.000V | 아니요 |
| fc=300Hz | 약0.923V | 약0.324V | 아니요 |
| fc=80Hz | 약0.539V | 약0.091V | 아니요 |

80Hz 필터는 방해를 줄이지만 원하는 신호도 너무 줄입니다. 세 후보에 정답이 없으면 네 번째 fc를 계속 찾으면 될까요? 부등식을 정리하면 통과대역은 fc≥125/√(1/0.9²−1), 저지대역은 fc≤875/√(1/0.1²−1)입니다. 각각 약258.09Hz 이상과87.94Hz 이하입니다. 구간이 겹치지 않으므로 이 요구는 어떤 단일 RC로도 만족할 수 없습니다.

이것은 실습 실패가 아니라 설계 결론입니다. 후보 목록을 채우기 위해 허용차를 늘리거나 요구 조건을 몰래 바꾸면 안 됩니다. 다음 설계에서는 필터 차수, 관측률, 입력 대역 가정 등을 검토해야 합니다. 단지 이번 세 필터가 실패했다는 표와, 전체 단일 RC 구간의 교집합이 없다는 증명은 서로 다른 강도의 근거입니다.

수치 정확도와 설계 적합성을 따로 보고한다

같은 회로를 dt=2µs와1µs로 각각 풀고 두 관측률에서 표본 차이가 100µV 이내인지 봅니다. 그다음 네 보고의 주파수·진폭이 접힘 식과 RC 해석식에 맞는지 확인합니다. 수렴했다고 올바른 회로가 되는 것은 아닙니다. 잘못 연결한 입력 열도 시간 간격을 줄이면 안정적으로 같은 오답에 수렴할 수 있습니다.

마지막으로 원하는 대역과 방해 대역 요구를 모두 확인합니다. 보고서는 수렴 여부, 모델 일치, 설계 요구를 별도 필드로 남깁니다. 실행 오류는 오류로, 정상 분석 후 채택 가능한 필터가 없는 경우는 빈 후보로 남깁니다. 둘을 합치면 모델을 바꿔야 하는지 실행 환경을 고쳐야 하는지 구별할 수 없습니다.

현장에서 만나는 모습

센서·오디오·진동 데이터를 다루는 팀에서 낮은 주파수 피크를 발견했다면 입력 대역, 필터 위치, 실제 표본 시계부터 확인합니다. 파일에 적힌 sample_rate라는 숫자만 신뢰하지 않고 타임스탬프와 획득 설정을 함께 남깁니다. 분석 자동화의 가치는 그래프를 빨리 그리는 것뿐 아니라 누가 다시 실행해도 같은 조건을 대조할 수 있게 하는 데 있습니다.

Analog Devices의 [이상 ADC 앨리어싱 설명](https://www.analog.com/en/resources/interactive-design-tools/adcalias.html)은 오버샘플링과 아날로그·디지털 필터의 역할을 구분합니다. 이미 관심 대역으로 접힌 방해를 디지털 저역통과만으로 골라 제거할 수는 없습니다. 이 페이지의 Java 애플릿을 실행했다고 주장하지 않으며 설명 원리만 참고합니다. 실제 계산 근거는 이번 저장 파형입니다.

이번 결과는 이상 RC와 균일 표본화에 관한 것입니다. 잡음, 양자화, 클록 지터, 비선형 ADC, 능동 필터 안정도, 온도별 부품 변화는 모델에 없습니다. 따라서 실제 보드의 성능 인증이나 안전 판정으로 확대하지 않습니다. 전 단계의 획득 스위치 모델도 이번 회로에 자동으로 합쳐져 있지 않습니다. 서로 다른 실험의 결론을 결합하려면 모델 연결부터 검증해야 합니다.

다음 실습에서 할 것

8단계에서 접힘 함수, 시간 보간, 단측 DFT, 파일 분석, 표본 비교, RC 요구 구간, 필터 판정, 조건 비교 CLI를 차례로 만듭니다. 도우미가 만든 넷리스트·설정·로그·원 파형과 직접 만든 JSON 보고서를 함께 읽습니다. 1kHz에서 구별하지 못한 입력을4kHz로 다시 관측해 구별하고, 단일 RC의 빈 후보가 왜 정당한 결론인지 설명하는 것이 마지막 과제입니다.