글쓴이 : SOONDORI
USB 포트를 통해 디지털 데이터(연속적으로 들어오는 자료이므로 Stream이라고 한다)를 받게 되었다고 가정한다. 정보는 음성신호 등 일체의 것들이 담겨 있는 PCM(Pulse Code Modulation) 데이터이다. (표제부 사진 출처 : http://i.imgur.com/xEjMYTe.png)
다음은 PCM 데이터에서 유효한 신호를 추출하는 루틴들로서, 내부에 표기된 함수정의를 이용해서 사상을 정리해보자면…
1) 먼저 usb_demode 또는 lsb_demode 함수를 이용하여 상측파대 또는 하측파대 정보 하나를 추출한다.
(Upper Side Band를 추출하고 *fm에 담는다. lsb_demode함수도 있다)
(상/하 측파대는 정보가 동일한데 어떤 신호값을 퓨리에변환(Fourier Transform)한 후의 그린 그래프를 생각하면 이해가 쉽다)
2. 그리고 Polar_discriminant 함수 등을 이용하여 직교검파에 준하는 처리를 진행한다.
(*fm의 Polar_Discriminant 외 함수들을 써서 위상을 조작한다)
3. 그 다음 디엠퍼시스 루틴을 실행하면 아나로그 신호에 준하는 최종 디지털신호가 나올 것이다. 또다른 루틴들을 이용하여 그것을 PC, 모바일의 사운드 카드에 전달하면 그만.
(포인터 변수 *fm가 지정하는 메모리 정보(신호)에 대하여 소프트웨어적인 디엠퍼시스를 처리한다)
인터넷에 C언어나 요즘 각광을 받고 있는 Python으로 작성된 라이브러리 소스들이 공개되어 있으므로 Dongle만 있다면 나만의 라디오를 만들 수 있고 함수를 응용하고 시각화 라이브러리를 조합하여 스펙트럼 분석기 등 다양한 소프트웨어 응용도구의 개발도 가능하다. 상기 샘플소스의 출처 : https://github.com/th0ma5w/rtl_fm_python/blob/master/rtl_fm.c)