REMI Lab강의 노트

Wireless Embedded Systems E05

6장 SDR과 ADALM-Pluto

정리

  • Pluto는 RF 트랜시버 AD9363, 표본을 옮기고 드라이버를 돌리는 Zynq SoC, PC와 잇는 USB 2.0으로 이루어진다. AD9363은 325 MHz–3.8 GHz를 받고 12비트 표본을 낸다.
  • zero-IF 수신기는 z(t)=LPF{2r(t)e−j2πfLOt}z(t)=\mathrm{LPF}\{2r(t)e^{-j2\pi f_{\mathrm{LO}}t}\}로 LO 둘레를 곧바로 0 Hz로 내린다. fLO+Δf_{\mathrm{LO}}+\Delta의 톤은 +Δ+\Delta에, fLO−Δf_{\mathrm{LO}}-\Delta의 톤은 −Δ-\Delta에 서고, 이 부호는 I와 Q를 함께 받아야 알 수 있다.
  • 표본화율 fsf_s는 표본에 담기는 폭 −fs/2…fs/2-f_s/2\ldots f_s/2를 정하고, RF 대역폭 BRFB_{\mathrm{RF}}는 ADC 앞 아날로그 필터(이상적이라면 ∣f∣≤BRF/2|f|\le B_{\mathrm{RF}}/2 통과, 실제 3 dB 모서리는 1.4×BRF/21.4\times B_{\mathrm{RF}}/2)를 정한다. ±fs/2\pm f_s/2 밖의 신호는 칩의 디지털 필터가 솎기 전에 줄이고(얼마나 줄이는지는 실습 3에서 잰다), 필터 없이 솎으면 fsf_s의 정수배만큼 옮겨져 안쪽에 나타난다.
  • LO 자리(0 Hz)에는 DC 오프셋과 LO 누설이 모인다. LO 위의 톤은 오프셋과 한 칸에서 더해져 나눌 수 없으므로, 실습은 신호를 LO에서 떨어뜨려 둔다.
  • ADI가 표본을 잃지 않는다고 밝힌 USB 2.0 연속 전송은 초당 4 MS이다. 그보다 빠르게 받을 때는 NN개를 한 번에 캡처하고 옮기며, 캡처 하나의 길이는 T=N/fsT=N/f_s, 칸 간격은 Δf=1/T\Delta f=1/T이다.
  • 프로그램은 드라이버의 IIO 속성(ad9361-phy의 LO, 표본화율, RF 대역폭, 이득)을 바꾼다. pyadi-iio와 브라우저 실습 쪽이 같은 속성을 쓴다. 송신은 2400.1–2483.4 MHz 안(ISM 대역 양 끝 100 kHz 제외), 감쇠 10 dB 이상, 루프백에는 30 dB 감쇠기를 쓴다.

참고 자료

  • Analog Devices, ADALM-PLUTO Detailed Specifications — AD9363의 튜닝 범위, 채널 대역폭, 표본화율, 12비트 ADC·DAC, Zynq·메모리 구성, USB 2.0의 "streams up to 4MSPS with no dropped samples".
  • Analog Devices, Basic internals of Pluto — 수신·송신 경로의 순서, DC 오프셋 보정과 직교 보정.
  • Analog Devices, ADALM-PLUTO Transmit — 기본 감쇠 −10 dB와 루프백 조건, dBFS로 읽는 까닭.
  • Analog Devices, AD9361, AD9364 and AD9363 Linux device driver — IIO 속성, 수신 경로의 아날로그 필터와 솎음 필터, 이득 방식, 송신 감쇠 범위, 추적 보정. RF 대역폭의 절반을 필터 폭으로 쓰는 것은 드라이버 소스 drivers/iio/adc/ad9361.c의 __ad9361_update_rf_bandwidth.
  • Analog Devices, pyadi-iio — adi/ad936x.py(속성 이름과 대응하는 IIO 속성), adi/rx_tx.py(rx_buffer_size, rx()).
  • The Linux Kernel documentation, Industrial I/O: Introduction.
  • B. Razavi, "Design considerations for direct-conversion receivers," IEEE Transactions on Circuits and Systems II, vol. 44, no. 6, pp. 428–435, 1997 — DC 오프셋과 LO 누설의 원인.
  • Marc Lichtman, PySDR: IQ Sampling의 "DC Spike and Offset Tuning"과 PySDR: PlutoSDR in Python — offset tuning, 캡처와 USB 속도, 루프백의 감쇠기.

함께 읽을 자료