GNU Radio Tutorials의 Beginner Tutorials를 거의 다 끝냈다.
4장까지는 SDR 없이 자체 Signal Source 블록만을 가지고 진행했는데, 이제 드디어 SDR을 컴퓨터에 연결하여 사용해 보는 연습을 하게되었다.
첫 하드웨어는 RTL-SDR.
일단 tutorial에서 하라는 대로 아래와 같은 flowgraph를 만들었다.
MacBook Pro 16 (M1, 2021) 은 USB 3.0 ports 밖에 없고, RTL-SDR은 USB 2.0이라 USB hub를 이용하여 아래와 같이 연결했다.
자, 이렇게 연결만 하면 당연히 MacBook에서 RTL-SDR을 인식하지 못 하기 때문에 안 돌아갈 것 같다.
혹시 모르니 일단 한번 flowgraph를 실행해 보았다.
예상한 대로 오류가 발생했고 내용은 "RuntimeError: SoapySDR::Device::make() no match" 이었다.
SoapySDR 라이브러리에서 RTL-SDR을 찾지 못 하는 모양이다.
일단 MacBook에서 RTL-SDR이 제대로 인식됐는지 한번 확인해 보기 위해 System Settings -> General -> System Reports... 의 USB 항목을 눌러보았다.
흠, 일단 macOS에서는 인식이 된 것 같다.
그럼 SoapySDR에서의 문제인 것 같은데..
구글링으로 여러 사이트를 찾아 보다가 SoapySDR 공식 GitHub의 Issues에서 비슷한 Q&A를 발견하였다. 제목은 Soapy SDR No devices found
우선 SoapySDRUtil 명령어로 SDR의 연결 여부를 확인할 수 있는 것을 알아냈다.
잠시 GNU Radio Companion을 종료하고 작업 중인 anaconda 가상환경에서 아래를 쳐봤다.
>> SoapySDRUtil
다양한 옵션이 있다.
--find 옵션을 사용하여 가용 SDR 목록을 출력해 본다.
>> SoapySDRUtil --find
>> SoapySDRUtil --find="driver=rtlsdr"
"No devices found!" 라는 메시지만 나온다.
아까 그 GitHub issue 페이지를 쭉쭉 내려보니 도움을 주려는 자가 Soapy SDR에 대한 자세한 현재 상태 정보를 요구했다.
나도 해봤다.
>> SoapySDRUtil --info
뭔가 중간에 "No modules found!" 라는 메시지가 나오는 것을 확인하고 해당 위치로 가보니 "SoapySDR"은 물론 하위 "modules0.8" 이라는 폴더가 아예 없었다.
그 GitHub issue 페이지에서 질문자의 경우 HackRF가 인식되지 않는 문제였는데, 해결해 주고자 하는 자가 위 info 화면에서 HackRF 관련된 module이 없는 것을 발견하고 따로 관련 SoapyHackRF module을 설치하라는 조언을 주었다.
그럼 나도 어떻게든 SoapyRTLSDR module만 설치하면 해결될 수 있을까!?
그래서 관련 GitHub 페이지를 가 보았고, rtl-sdr 패키지를 설치하라고 했다.
>> conda install conda-forge::rtl-sdr
설치는 정상적으로 됐는데, 이후 다시 --info 명령어를 실행하니 아직도 module이 없다는 메시지가 나왔다ㅜ
일단 rtl-sdr을 깔아봤으니 한번 사용해 보긴 하자.
Hackster.io의 RTL-SDR on Mac OS Part 1: Install & Setup를 참고하여 rtl_test 명령어를 실행해 보았다.
>> rtl_test
어?? 인식되네?
특히 "Info: This tool will continuously read from the device, and report if samples get lost. If you observe no further output, everything is fine." 라는 문구 이후로 별다른 출력이 없었는데, 그럼 진짜 오류 없이 잘 받아지고 있는 것인가?
두 번째 테스트로 rtl_power 명령어로 지정한 주파수 범위에 걸쳐 수신된 세기를 확인해 보았다.
>> rtl_power -f 88M:108M:125k
이 밑으로 쭈욱 10초마다 125 kHz 크기로 쪼개진 bandwidth에서의 수신 세기를 리포트해 주었다.
하드웨어나, MacBook Pro와의 연결은 더 이상 의심하지 않아도 될 것 같다!
자, 그럼 이제 Soapy SDR과 rtl-sdr을 연결시킬 방법만 찾으면 된다.
다시 열심히 구글링을 해 보니 soapysdr-module-rtlsdr 라는 패키지가 있다??
혹시 이런 구조인가?
rtl-sdr: Anaconda 가상환경에서 RTL-SDR을 사용할 수 있게 해 주는 패키지
soapysdr-module-rtlsdr: Soapy SDR의 RTL-SDR을 위한 module
한번 설치해 본다.
>> conda install conda-forge::soapysdr-module-rtlsdr
오오오오 "SoapySDR" 폴더가 갑자기 생성됨!
게다가 하위 폴더로 "modules0.8"이 생겼고, 그 안에 "librtlsdrSupport.so" 도 생성됐다!
다시 그럼 SoapySDRUtil --info를 실행해 보자.
음... module은 찾았다고 뜨는데 "dlopen() failed: ..." 라는 긴 오류메시지가 뜬다.
librtlsdr.2.dylib가 없다는 것이 이유인 것 같다.
실제로 --find 명령어를 실행하니
같은 오류메시지가 출력되며 끝내 "No devices found!"라고 한다 ㅜㅜ
포기할 수 없어 "lib" 폴더에서 "librtlsdr"로 시작하는 파일을 모두 검색해 보았다.
어라?
librtlsdr.2.dylib 대신에 librtlsdr.2.0.1.dylib 파일이 존재함을 확인했다.
혹시 몰라 얘를 복사하여 이름을 librtlsdr.2.dylib로 바꿨더니,
와 드디어 찾아지네...
혹시 아까 rtl-sdr 설치할 때 너무 높은 버전을 설치한 것인가???
Conda forge에서 실제로 확인해 보니 rtl-sdr 버전이 2.0.2이다.
혹시나 하는 마음에 기존에 설치한 최신 rtl-sdr을 지우고 v2.0.0을 깔아보기로 한다.
dylib 이름을 내 맘대로 바꾼 게 찝찝하기도 했고..
>> conda install -c conda-forge rtl-sdr==2.0.0
엇 이렇게 지우고 다시 설치하니 soapysdr-module-rtlsdr 지워져 있다.
다시 설치해 보...려고 했는데 "Solving environment"에서 넘어가지 않는다 ㅜ
아씨 그냥 복사본으로 해볼껄 ㅜ
아무래도 여러 패키지를 지웠다 깔았다 반복하다 보니까 가상환경이 심하게 꼬인 것 같다.
.
.
.
결국 가상환경을 아예 지워버리고 GNU Radio부터 새로 설치했다.
위에서 처럼 그냥 rtl-sdr v2.0.2 쓰려고 한다.
그리고 뭐같은 "Solving environment" 기다리는 동안 GNU Radio 설치 웹페이지를 들어가 보니 애초에 이런 게 있었다.
아하, 애초에 SDR 사용하고 싶으면 SDR에 맞는 패키지 알아서 따로따로 설치하라고 친절하게 리스트해 주었었구나..ㅎㅎ
자, RTL-SDR 연결 방법 정리!
>> conda install -c conda-forge rtl-sdr
>> conda install -c conda-forge soapysdr-module-rtlsdr
이후 "librtlsdr.원하는숫자.dylib"가 없다는 오류 메시지가 발생하면 가상환경/lib 위치에서 "librtlsdr.다른숫자.dylib"를 찾고 사본을 만들어 다른숫자 부분을 원하는숫자로 바꾸기!
다시 GNU Radio Companion으로 가서 초반에 그 Flowgraph 다시 돌려본다.
성공!!
SBS 파워 FM은 수신 감도가 안 좋은데, MBC는 파형이 나름 잘 나옴.
휴 나 또 고생했다...
Comments
Post a Comment