Skip to content

RP2350 + LTE-M1 타당성 분석

1. 입력 데이터 사양

Data Channels Sample Rate Bit Depth Raw Data Rate
Audio (2 stereo mics) 4ch (2 mic x 2ch) 96 kHz 24-bit 1,152 KB/s
Sensors (vibration, magnetic, temp, humidity) 4ch 100 Hz f32 ~1.6 KB/s
Motor signals (brake 20ch RPM, current, voltage) 22ch ~100 Hz f32 ~8.8 KB/s
Total raw data rate ~1,162.4 KB/s

2. RP2350 리소스 분석

Resource Specification Notes
CPU Dual Cortex-M33 @ 150 MHz ~300 MIPS total
SRAM 520 KB Includes stack, heap, static buffers
ADC 12-bit, 500 ksps (shared) NOT sufficient for 96kHz/24-bit audio
I2S PIO-based CAN handle 96kHz/24-bit with external ADC
SPI Up to 62.5 MHz SD card, external ADC connection
UART 2ch LTE-M1 modem AT commands
GPIO 30 pins Sensor, motor signal inputs
WDT Hardware Watchdog Timer Long-term stability
Flash External QSPI (typically 2-16 MB) Firmware + log storage

핵심 제약 사항: 내장 ADC는 12-bit/500ksps로, 96kHz/24-bit 오디오를 캡처할 수 없다. 외장 I2S ADC(예: PCM1808, CS5343)가 필요하다.


3. 코덱 타당성

Codec MIPS/ch 4ch Total RP2350 Feasible? Compression Quality
Opus (music) ~80 320 NO (exceeds CPU) 10:1+ Excellent
Opus (voice) ~30 120 Marginal (1 full core) 10:1+ Good
IMA-ADPCM ~1 4 YES 4:1 Good
u-law/A-law <1 <4 YES 2:1 Fair
Raw PCM 0 0 YES 1:1 Perfect
FLAC ~30 120 Marginal 2:1 Lossless
XAP ~20 80 YES 10:1 Excellent
XAP (DSP 가속) ~14 56 YES 10:1 Excellent

결론: RP2350에서 권장하는 코덱은 XAP이다. 10:1 압축률에 음질도 우수하다. DSP 가속 인코딩(CMSIS-DSP 최적화 MDCT 및 FIR, Cortex-M33 DSP 확장)을 사용하면 XAP 4ch @96 kHz에 ~56 MIPS만 필요해 RP2350의 300 MIPS 예산 안에 충분히 들어온다. IMA-ADPCM은 극단적으로 단순한 경우의 대체 옵션으로 유효하다.

XAP 및 XMBP는 Xylolabs Inc.의 특허 출원 중인 기술이다.

DSP 가속: RP2350의 Cortex-M33에는 단일 사이클 32x32 MAC, 듀얼 16비트 SIMD(SMLAD), 포화 연산이 포함되어 있어 순수 C 대비 XAP 인코딩 비용을 ~30% 절감한다. Rust SDK features = ["cmsis-dsp"] 또는 C SDK XYLOLABS_USE_CMSIS_DSP=1로 활성화한다. 자세한 벤치마크는 docs/CODEC-ANALYSIS.ko.md 섹션 6 및 성능 프로파일을 참조한다.


4. 대역폭 분석

LTE-M1 최대 대역폭: 375 kbps = ~47 KB/s (이론값, 실측 ~30-40 KB/s)

Data Raw Rate With ADPCM Fits LTE-M1?
4ch audio 96kHz/24-bit 1,152 KB/s 288 KB/s (4:1) NO
4ch audio 96kHz/16-bit 768 KB/s 192 KB/s NO
4ch audio 48kHz/16-bit 384 KB/s 96 KB/s NO
4ch audio 16kHz/16-bit 128 KB/s 32 KB/s YES
4ch audio 8kHz/16-bit 64 KB/s 16 KB/s YES (margin)
Sensors 100Hz x 4ch ~1.6 KB/s ~1.6 KB/s YES
Motor 100Hz x 22ch ~8.8 KB/s ~8.8 KB/s YES

5. 핵심 발견 사항

4채널 96kHz 오디오는 기존 압축 방식만으로는 LTE-M1으로 실시간 스트리밍이 불가능하다.

  • Opus로 4ch x 64kbps = 32KB/s는 대역폭에 맞지만, RP2350은 Opus 인코딩이 불가능하다(~320 MIPS 필요)
  • IMA-ADPCM 4:1 적용 시 288 KB/s -- LTE-M1 용량(47 KB/s)의 6배 초과
  • 16kHz로 다운샘플링 시: 4ch x 16kHz x 4-bit ADPCM = 32 KB/s -- 대역폭 내 수용 가능

업데이트 (섹션 12): XAP 코덱이 이 제약을 해결한다. XAP는 80 kbps/ch에서 10:1 압축을 달성하며, RP2350에서 DSP 가속 시 ~56 MIPS만 필요하여 4ch @96kHz = 40 KB/s — LTE-M1 대역폭 내 수용 가능하다. 수정된 권장 사항은 섹션 12를 참조한다.


6. 권장 아키텍처

옵션 A: 다운샘플링 실시간 스트리밍

(연속 모니터링에 권장)

Architecture Overview

옵션 A: 다운샘플링 실시간 스트리밍

  • 외장 I2S ADC로 96kHz에서 캡처
  • RP2350에서 16kHz로 다운샘플링 (간단한 FIR 필터, ~5 MIPS/ch, 총 ~20 MIPS)
  • IMA-ADPCM 4:1 압축 (~1 MIPS/ch, 총 ~4 MIPS)
  • 오디오: 4ch x 16kHz x 4-bit = 32 KB/s
  • 센서 + 모터: XMBP 프로토콜 = ~10 KB/s
  • 합계: ~42 KB/s -- LTE-M1 대역폭 내 수용 가능

옵션 B: 주기적 고해상도 녹음

(음질 우선 시 권장)

옵션 B: 주기적 고해상도 녹음

  • SD 카드에 96kHz/24-bit 원본으로 녹음 (1.15 MB/s -- SD로 충분히 처리 가능)
  • 녹음 구간(10초 = 11.5 MB) 이후 ADPCM으로 2.9 MB까지 압축
  • 압축 파일을 LTE-M1로 업로드 (10초 녹음당 약 62초 소요)
  • 약 70초마다 10초 녹음 -- 14% 듀티 사이클
  • 또는 5분마다 10초 녹음 -- 매우 여유로운 주기

옵션 C: 하이브리드 (양쪽 장점 결합)

(최종 권장안)

옵션 C: 하이브리드 아키텍처

  • Core 0: 연속 저해상도 모니터링 (16kHz ADPCM 스트림)
  • Core 1: 센서/모터 데이터 수집 + 주기적 고해상도 버스트 (96kHz를 SD 카드에 저장 후 업로드)
  • 서버에서 두 스트림을 수신하여 타임스탬프 기반으로 상관 분석

7. 장기 안정성 (1년 이상 운용)

Item Implementation Notes
Watchdog RP2350 hardware WDT, reset on hang Periodic feed in main loop
Memory Static allocation only, no heap fragmentation No malloc/free
Network Exponential backoff reconnect, session auto-resume Modem reset after max retries
Power PSM/eDRX for idle periods, voltage monitoring Safe shutdown on low voltage
Logging Error counts to flash, periodic health report Health report to server
OTA updates Firmware update via server command A/B partition recommended
Temperature RP2350 built-in temp sensor monitoring Reduce clock on overheat

8. 시간 동기화

시간 동기화

  • 세션 생성 시 서버가 기준 타임스탬프를 할당
  • Pico는 모노토닉 카운터(부팅 이후 마이크로초 단위) 사용
  • 세션 시작 시각 = 세션 생성 시점의 서버 타임스탬프
  • 모든 샘플은 세션 시작 시점 기준 상대 시간 (RP2350 크리스탈 기준 드리프트 < 1ms/hour)

9. 10초 윈도우 정렬

10초 윈도우 정렬

  • 서버가 수신된 데이터를 10초 단위 경계에 맞춰 정렬
  • 같은 윈도우 내의 오디오와 센서 데이터는 상관 분석 가능
  • Window ID = floor(server_timestamp / 10)
  • 겹침 없음 (0%)

10. 메모리 예산

RP2350 SRAM: 총 520 KB

Purpose Size Notes
I2S DMA double buffer (4ch) ~32 KB 96kHz x 24-bit x 4ch x 2 buf
Downsample FIR filter ~4 KB Filter coefficients + state
ADPCM encoding state <1 KB Per-channel state variables
XMBP packet buffer ~8 KB Sensor + motor batch
HTTP transmit buffer ~4 KB AT commands + headers
Sensor collection buffer ~12 KB 26ch x 100Hz x 500ms batch
Stack (2 cores) ~16 KB 8 KB per core
SD card buffer (Option B/C) ~8 KB FatFS + read/write buffer
Misc (session, URL, stats) ~4 KB
Total ~89 KB 520 KB 중 17% 사용

11. CPU 예산

RP2350: 2 x Cortex-M33 @ 150 MHz = 총 ~300 MIPS

옵션 A/C(연속 스트리밍) 기준:

Task Core MIPS Notes
I2S DMA management 0 ~2 DMA hardware handles most
FIR downsample 4ch 0 ~20 96kHz to 16kHz, ~5 MIPS/ch
IMA-ADPCM encode 4ch 0 ~4 ~1 MIPS/ch
Sensor ADC read 26ch 1 ~5 100Hz, lightweight
XMBP encoding 1 ~2 Binary serialization
HTTP transmit (AT cmds) 1 ~10 Includes UART I/O wait
WDT, logging, misc 1 ~3
Core 0 total 0 ~26 150 MIPS 중 17%
Core 1 total 1 ~20 150 MIPS 중 13%

DSP 가속 적용 시 (Rust SDK features = ["cmsis-dsp"] 또는 C SDK XYLOLABS_USE_CMSIS_DSP=1): FIR 다운샘플링에 CMSIS-DSP arm_fir_q15(듀얼 16비트 SIMD)를 사용하면 ~20 MIPS에서 ~12 MIPS로 줄어든다. ADPCM은 포화 연산의 혜택을 받는다. Core 0 합계는 ~18 MIPS(12%)로 감소한다.

ADPCM 대신 XAP 사용 시 (옵션 D -- 96 kHz 직접 스트리밍):

Task Core MIPS Notes
I2S DMA management 0 ~2 DMA hardware handles most
XAP encode 4ch @96 kHz (DSP) 0 ~56 ~14 MIPS/ch with CMSIS-DSP
Sensor ADC read 26ch 1 ~5 100Hz, lightweight
XMBP encoding 1 ~2 Binary serialization
HTTP transmit (AT cmds) 1 ~10 Includes UART I/O wait
WDT, logging, misc 1 ~3
Core 0 total 0 ~58 150 MIPS 중 39%
Core 1 total 1 ~20 150 MIPS 중 13%

XAP를 80 kbps/ch로 설정하면 4ch x 80 kbps = 40 KB/s로 다운샘플링 없이 LTE-M1에 적합하다. FIR 다운샘플 단계가 불필요해지며 96 kHz 전체 대역폭이 10:1 압축으로 보존된다.


12. 결론 및 권장 사항

  1. 96kHz/24-bit 4채널 오디오의 LTE-M1 실시간 스트리밍은 XAP로 가능하다.
  2. XAP 80 kbps/ch: 4ch = 40 KB/s -- LTE-M1 대역폭 내
  3. DSP 가속 XAP 인코딩은 RP2350 한 코어의 39%만 사용
  4. 다운샘플링 불필요 -- 96 kHz 전체 스펙트럼 보존

  5. 권장 솔루션: 옵션 C (하이브리드) + XAP

  6. 연속 모니터링: XAP 4ch @96 kHz (40 KB/s) + 센서 XMBP (10 KB/s) = 50 KB/s (LTE-M1 이론 최대 47 KB/s 초과 — 64 kbps 모드 또는 센서 데이터 축소 필요)
  7. 또는: XAP 4ch @96 kHz (32 KB/s @64 kbps) + 센서 XMBP (10 KB/s) = 42 KB/s (여유 있음)
  8. 주기적 고해상도: 96kHz 원시 데이터를 SD 카드에 저장하여 무손실 보관, 일괄 업로드

  9. 서버 측 필요 변경 사항:

  10. XAP 프레임 디코딩을 위한 XAP 디코더 통합 (또는 FFmpeg 7.1+ XAP 지원 사용)
  11. ADPCM WAV 포맷 수신 및 디코딩 지원 추가 (대체 경로)
  12. 보관 저장을 위한 XAP → FLAC/WAV 트랜스코딩 파이프라인

  13. RP2350 리소스는 충분하다:

  14. 메모리: 89 KB / 520 KB (17%), XAP 인코더 상태 포함 시 ~121 KB (23%)
  15. CPU: DSP 가속 XAP 기준 코어당 39% 및 13%
  16. DSP 확장이 코덱 연산에 25-40% 속도 향상 (단일 사이클 MAC, SIMD, 포화 연산)
  17. 장기 안정성 확보 가능 (WDT, 정적 할당, PSM)

  18. DSP 하드웨어 가속이 핵심이다:

  19. Cortex-M33 DSP 확장이 XAP 인코딩을 4ch @96 kHz 기준 ~80 MIPS에서 ~56 MIPS로 절감
  20. CMSIS-DSP 라이브러리가 최적화된 FFT, FIR, 벡터 루틴을 제공
  21. 플랫폼별 DSP 성능 상세 벤치마크는 docs/CODEC-ANALYSIS.md 섹션 6 참조

  22. 구현 참고: Rust SDK가 RP2350 프로젝트의 권장 구현체이다. Embassy 기반 비동기 런타임은 제로 비용 추상화로 C 수준의 성능을 내면서 컴파일 타임 타입 안전성을 보장한다. 빌드 가능한 RP2350 Rust 예제는 sdk/examples/를 참고한다.

  23. 번인 테스트를 통한 성능 검증: E2E 테스트 결과 XAP 인코딩이 프레임당 평균 9us로 RP2350의 10ms 프레임 예산 대비 99.3% 여유를 확인했다. 다중 장치(10대 동시) 및 스트레스(96kHz) 시나리오에서 0건의 실패로 통과했다.