홈으로 돌아가기

STM32에서 SDR GPS: ASIC 없이 처리

이 기사는 MAX2769 프론트엔드를 사용한 STM32F4에서 SDR GPS 수신기 구현을 설명합니다. 원시 데이터의 소프트웨어 처리에서는 전통적인 ASIC 대신 PRN 코드 상관관계를 위해 비트와이즈 XOR를 사용합니다. SPI+DMA를 통한 캡처는 실시간을 보장합니다.

STM32 마이크로컨트롤러에서 소프트웨어 GPS 수신기
Advertisement 728x90

STM32로 특수 칩 없이 SDR GPS 수신기 구현하기

STM32F4는 GNSS RF 프론트엔드 MAX2769에서 16.368MHz로 공급되는 2비트 데이터 스트림을 실시간으로 캡처하고 처리할 수 있습니다. ADC부터 상관관계 계산까지 전체 체인을 소프트웨어로 구현했습니다—ASIC이나 FPGA 없이—DMA와 최적화된 비트 연산을 활용했습니다.

GNSS 수신기 구조

전통적인 GPS 수신기는 GP2021 같은 전용 상관기(correlator)를 사용해 PRN 코드 상관 피크를 찾습니다. 이 프로젝트는 해당 하드웨어 체인을 MCU로 대체합니다:

  • RF 프론트엔드(MAX2769)가 IF 4.092MHz에서 신호를 디지털화
  • DMA가 순환 버퍼로 데이터 캡처
  • 소프트웨어 처리: 캐리어 제거(carrier wipeoff), 코드 제거(code wipeoff), 상관 계산

한 PRN 주기(1ms)에는 16368개의 샘플이 들어갑니다—칩당 정확히 16개(총 1023칩). 비트 압축 데이터를 칩당 2바이트로 그룹화합니다.

Google AdInline article slot

하드웨어: MAX2769 프론트엔드

MAX2769는 사전 설정 모드(PGM=1, 변형 2)에서 SPI 설정 없이 I1에서 1비트 부호 신호를 출력합니다. 보드 구성:

  • 16.368MHz TCXO
  • 3.0V LDO
  • J3의 능동 안테나
  • P5의 클럭 출력
  • P3의 데이터

주파수는 완벽한 정렬을 위해 선택: 16368 / 1023 = 칩당 16샘플. IF에서의 이상적 칩 패턴: 0b1100110011001100.

STM32F4-Discovery에서의 데이터 캡처

STM32F4(Cortex-M4, 168MHz, 192KB RAM, 1MB Flash)는 SPI + DMA를 순환 모드로 사용해 16Mbps를 처리합니다.

Google AdInline article slot
  • 더블 버퍼링: 4KB 버퍼의 반/전체에서 인터럽트
  • PRN당 2KB(2046바이트)
  • DMA 중단 없이 처리할 수 있는 여분 버퍼

DMA 코드는 연속 수신을 보장합니다: 단 하나의 바이트 손실만으로도 동기화가 깨집니다.

비트 최적화 DSP

FPU 스타일 처리(16Msamples/s) 없이, 자작 GPS/GLONASS 수신기에서 가져온 기법을 사용합니다: 부호 데이터에서 곱셈을 XOR로 대체.

XNOR(반전 XOR)은 곱셈과 같습니다(-1 -1 = 1, -1 1 = -1). 순차 XOR로 반전을 처리합니다.

Google AdInline article slot

연산은 속도를 위해 32비트 워드에서 벡터화합니다.

신호 처리 체인

  • 캐리어 NCO: 도플러, TCXO 오차, 4.092MHz IF를 고려한 I/Q 고조파 생성. 듀얼 믹서로 베이스밴드로 이동.
  • 코드 NCO: 로컬 PRN(1023칩)을 칩당 16샘플로 보간.
  • 상관 계산: 입력 데이터와 로컬 코드의 요소별 XOR + 누적.

복소 I/Q 형태로 사이드밴드를 분리합니다.

// 비트 상관 예시(의사코드)
for (i = 0; i < 2046; i += 4) {
    uint32_t input = buffer[i];
    uint32_t replica = prn_replica[i];
    corr += __builtin_popcount(input ^ replica) - 16;
}

자원 사용량과 한계

  • 4 상관 채널: 168MHz에서 CPU ~70%
  • RAM: 채널당 12KB(버퍼 + 상태)
  • 기본 버전은 추적(tracking)이나 네비게이션 데이터 없음
  • 수동 에페메리스 초기화

이 프로젝트는 SNR > 35dB·Hz에서 콜드 스타트 30~60초를 달성합니다.

주요 요약

  • STM32에서 완전 소프트웨어 GPS 체인—ASIC/FPGA 불필요
  • 비트 XOR가 곱셈 압도: DSP 10배 속도 향상
  • PRN 보간을 위한 칩당 16샘플
  • 동기화 핵심: 연속 DMA 캡처
  • F4/F7에서 6~8채널 확장 가능
  • L1 C/A 실험용 오픈소스 코드

— Editorial Team

Advertisement 728x90

다음 읽기