이제 RTL-SDR, B205mini-i까지 모두 잘 돌아가는 가상 환경을 확보했다.
이 둘을 사용할 수 있는 것만으로도 매우 만족스러우나, 사실 최근 GNU Radio에 손을 댄 목표 중 하나는 사실 USRP 기반 LoRa 송수신기를 만드는 것이었다.
아래는 LoRa의 물리 계층 구조와 패킷 구조를 공부할 때 참고했던 논문이다.
JOACHIM, Tapparel; BURG, Andreas. Design and Implementation of LoRa Physical Layer in GNU Radio. Proceedings of the GNU Radio Conference, [S.l.], v. 9, n. 1, sep. 2024. Available at: <https://pubs.gnuradio.org/index.php/grcon/article/view/145>. Date accessed: 17 july 2025.
LoRa는 공개되지 않은 전매 특허 기술이라 여러 연구자들의 피나는 역공학 노력을 통해 비로소 조금 조금씩 그 실체가 밝혀지고 있는데, 위 논문의 저자들이 고맙게도 gnuradio-lora_sdr 패키지를 통해 LoRa 송수신이 가능한 GNU Radio module을 공개했다.
즉, 맨땅에 헤딩할 필요 없이 이 package를 가상 환경에 추가 설치하면 될 것 같다는 말.
하지만 역시 또 어려움이 닥친다 ㅜ
gnuradio-lora_sdr을 설치하려고 하니, gnuradio 뿐만 아니라 여러 패키지의 버전을 downgrade 하라는 메시지가 떴다.
뭔가 최근에 나온 gnuradio 정식 버전이 gnuradio-lora_sdr 버전보다 더 높아서 생기는 충돌 이슈인 것으로 보였다.
해당되는 패키지는 아래와 같았다.
gnuradio 3.10.12.0-py312hf3d8913_3 --> 3.10.11.0-py312ha212742_2
gnuradio-core 3.10.12.0-py312h1cd45be_3 --> 3.10.11.0-py312h9c714ff_2
gnuradio-grc 3.10.12.0-py312h66d8579_3 --> 3.10.11.0-py312heb4dd43_2
gnuradio-iio 3.10.12.0-py312hcebcc41_3 --> 3.10.11.0-py312h026e601_2
gnuradio-pmt 3.10.12.0-py312hf3ff670_3 --> 3.10.11.0-py312ha7c0959_2
gnuradio-qtgui 3.10.12.0-py312h285d4ff_3 --> 3.10.11.0-py312hb80ee4c_2
gnuradio-soapy 3.10.12.0-py312ha587f02_3 --> 3.10.11.0-py312h50830a3_2
gnuradio-uhd 3.10.12.0-py312h401ace4_3 --> 3.10.11.0-py312h2890e24_2
gnuradio-video-sdl 3.10.12.0-py312h66d8579_3 --> 3.10.11.0-py312heb4dd43_2
gnuradio-zeromq 3.10.12.0-py312h014023b_3 --> 3.10.11.0-py312he6c26a2_2
libboost 1.86.0-hc9fb7c5_3 --> 1.84.0-hc9fb7c5_7
libthrift 0.21.0-h64651cc_0 --> 0.20.0-h64651cc_1
numpy 2.2.6-py312h7c1f314_0 --> 1.26.4-py312h8442bc7_0
portaudio 19.7.0-h5833ebf_0 --> 19.6.0-h13dd4ca_9
soapysdr-module-u~ 0.4.1-h1e7af17_14 --> 0.4.1-h8180fdb_13
spdlog 1.15.1-hed1c2b2_0 --> 1.14.1-h6d8af72_1
uhd 4.8.0.0-py312hcf98d66_0 --> 4.7.0.0-py312h1afdc0e_0
volk 3.2.0-h71a8b11_0 --> 3.1.2-h71a8b11_1
꽤 많음..
그래도 일단 설치는 잘 되길래 바로 GNU Radio Companion을 켜서 기존 RTL-SDR과 B205mini-i가 여전히 잘 돌아가는지 확인했다.
RTL-SDR은 문제 없이 잘 돌아갔다.
그런데 문제는 B205mini-i ㅜㅜ
Flowgraph를 돌리면 Python이 문제가 생겼다는 Report 창이 뜨면서 안 돌아감 ㅜㅜ
uhd 버전이 4.8.0.0에서 4.7.0.0으로 downgrade돼서 그런가? NumPy가 2.2.6에서 1.26.4로 downgrade돼서 그런가?
사실 지난번에도 바로 직전 GNU Radio 정식 버전에서 NumPy랑 Python 간에 충돌로 인해 똥고생했다 보니 downgrade된 NumPy도 굉장히 못미덥다.
어쨌든 이렇게 또 지금까지의 노력이 물거품되려는 찰나에 radioconda package를 발견했다.
사실 아까 gnuradio-lora_sdr GitHub 사이트에서 Ryan Volz라는 사람이 conda package화 하는 데에 힘을 써 줬다는 멘트를 읽긴 했는데, 알고 보니 이사람, GNU Radio 정식 버전과 여러가지 third party package를 한꺼번에 통합한 radioconda의 개발자였다!
Radioconda는 전부터 알고 있긴 했지만, 워낙 처음에 정식 버전부터 시작하는 걸 좋아하다 보니 고려하지 않았었다.
그런데 이제 다시 막다른 길에 다다른 이상 시도해 봐야겠지..
특히, 설치하겠다고 다짐한 가장 큰 계기는, 구글 AI에게 "radioconda랑 gnuradio-lora_sdr이 잘 동작해?" 라는식으로 질문을 하니 radioconda에 gnuradio-lora_sdr이 포함되어 있다고 말해줘서였음!!
그동안 한 고생이 있으니 기존 가상환경은 이대로 유지하고 radioconda는 새로운 가상환경 radioconda250314 (2025.03.14. 버전) 에 깨끗하게 설치하기로 했다.
>> conda create -n radioconda250314 -c conda-forge -c ryanvolz radioconda (필요 시 python=3.12)
설치 성공!
Package 리스트를 보니 진짜 웬만한 GNU Radio packages는 다 설치된 듯??
그리고 지금 가장 관심을 가지고 있는 gnuradio-lora_sdr까지 설치됐다!
USRP의 bitfiles만 새로 받으면 될 것 같다.
>> uhd_images_downloader
아, 그리고 Soapy SDR로 --info 옵션을 돌리니 여전히 librtlsdr.2.dylib가 missing이라는 오류가 있긴 하다.
이건 누군가 언젠가 꼭 수정해야 할 것 같다..
그래서 이 부분도 이전에 했던 방법처럼 가상환경이름/lib 폴더 내에서 librtlsdr.2.0.1.dylib를 복사하여 librtlsdr.2.dylib으로 이름 변경하는 식으로 해결!
자, 이제 GNU Radio Companion을 켜볼까?
와, LoRa 관련 blocks은 물론 radar, satellite, LEO 관련 blocks까지 있네?
나중에 위성 통신 시뮬레이션 할 때 써먹어도 될 것 같다!
전에 따라한 RTL-SDR, B205mini-i tutorial flowgraph도 하드웨어 인식 문제 없이 잘 돌아가는 것도 확인!
이제 오늘부터는 본격적으로 LoRa 송수신기 제작에 집중해 보겠다.
Comments
Post a Comment