블로그 이미지
훅크선장

카테고리

분류 전체보기 (362)
사진이야기 (23)
펭귄컴퓨팅 (121)
컴퓨터보안 (84)
절름발이 프로그래머 (59)
하드웨어개조 (23)
멀알려줄까 (35)
홈베이킹&홈쿠킹 (2)
잡다한것들 (15)
Total
Today
Yesterday

달력

« » 2024.12
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31

공지사항

태그목록

최근에 올라온 글

FM_Receiver.grc
0.01MB
fm_example_by_HooK.grc
0.04MB

RTL-SDR FM radio receiver with GNU Radio Companion

http://www.instructables.com/id/RTL-SDR-FM-radio-receiver-with-GNU-Radio-Companion/?ALLSTEPS

를 참고하여서, 약간의 수정을 가한 것입니다.

 

※ 좀더 자세한 FM 수신에 관한 정보는 여기서 볼 수 있습니다. (일본어 자료)

http://wireless-square.com/2016/01/14/fm-receiver-using-gnu-radio/

위와 같이, 샘플링 주파수와 각각의 값을 주어져야 합니다. 아래의 설명에서는 주파수 대역폭이 약간 이상한 값을 사용하였으나, 방송수신에는 큰 차이 없습니다.

 

 

 

HackRF One 장비와 GNU Radio Companion 프로그램을 이용하여서, Kali Linux 2.0 버전에서 실행한 결과입니다.

※ Kali Linux 2.0에서 HackRF One 장비를 정상적으로 사용하기 위해서는, 항상 장비를 USB로 연결한 다음, # rmmod hackrf  명령을 실행해야만 합니다.

 

바로 사용할 수 있는 완성된 GRC 파일은 여기서 다운로드 받을 수 있습니다.

 

다음은 테스트 버전으로 만들어본 것으로 주파수 입력을 텍스트 박스에서 하는 형태입니다.

 

 

다음은 완성된 버전으로 주파수 입력을 텍스트 박스에서 할 수도 있고, 슬라이드 바를 움직여서 주파수 변화를 줄 수 있게 만든 것입니다.

 

 

위와 같은 SDR (Software Defined Radio)를 만드는 과정을 단계별로 설명합니다.

 

제일 먼저 (GRC) GNU Radio Companion 을 실행시킵니다.  실행메뉴에서 찾기 어려우면, 그냥 터미널 프로그램에서

# gnuradio companion &

명령어를 실행하면 됩니다.

 

 

0. Variable: samp_rate

HackRF One에서 전파 수신을 하는 주기인 Sampling Rate 샘플링 주기를 정합니다. FM Radio를 설계하는 것이라서, 적절한 2000000 (= 2MHz를 의미)으로 설정합니다. 2e6 으로 입력하면, 화면 표시는 2M 으로 나타납니다.

 

 

1. RTL-SDR Source

HackRF 장비를 나타내는 전파 수신 입력기를 설정합니다. RTL-SDR Source는 대부분의 전파 수신 입력장치를 총괄합니다. RTL2832 계열의 수신기도 사용할 수 있습니다.

여기서는 Sample Rate로 변수인 samp_rate와 Ch0: Frequency를  슬라이드 바 변수값인 channel_freq로 설정합니다.

그리고, ch0: RF Gain을 20 정도로 맞추어줍니다. 

※ RF Gain은 환경에 따라, 40 정도가 적절할 수 도 있습니다.(전파혼선이 많은 환경에서는,)

 

 

 

2. WX GUI FFT Sink

주파수 영역의 그래프를 보기위한 비주얼 화면 출력입니다. Fast Fourier Transform 빠른 푸리에 변환을 수행하는 출력모듈입니다.

여기서는 Sample Rate로 변수인 samp_rate와 Baseband Freq를  슬라이드 바 변수값인 channel_freq로 설정합니다.

그리고 화면 출력을 한 화면에 2개의 탭으로 출력하기 위해서, Notebook에 Notebook_0, 0 로 입력합니다. 첫번째 탭에 출력이 될 것입니다.

 

 

3. Low Pass Filter

HackRF에 들어오는 전파 신호중에서 특정 영역(원하는 FM 라디오 주파수 대역)만을 추출하기 위해서 필요합니다.

Decimation 값은 int(samp_rate/500e3) 로 설정하여, 샘플링 주기로 추출되는 데이터신호 중에서 일부만을 가져옵니다. 이것은 샘플링되는 데이터 량을 줄여주는 역할을 합니다. 비록 일부만 가져오더라도, 뒤에 Rational Resampler로 다시 보완하는 과정이 있기 때문에 문제가 되지 않습니다.

※ 여기서 500e3 즉 500KHz는 통상 채널폭(Channel Width)를 의미합니다.

Sample Rate는 samp_rate로 설정하고, Cutoff Freq는 100k (입력은 100e3 으로), Transition Width는 10k (입력은 10e3으로) 설정합니다.

 

 

4. WBFM Receiver

진짜 FM 신호를 주파수 변환하는 것입니다. 출력은 음성신호로 곧 변환할 수 있습니다. 

FM 라디오 수신을 위해서는 Quadrature Rate는 500k로 해주어야만 합니다.

500e3 으로 입력하는 500k 입력값은 앞의 Low Pass Filter에서 Decimation 값 입력의 일부로 사용한 숫자와 동일해야 합니다.

 

 

5. WX GUI FFT Sink

주파수 영역의 그래프를 보기위한 비주얼 화면 출력입니다. Fast Fourier Transform 빠른 푸리에 변환을 수행하는 출력모듈입니다.

여기서는 Sample Rate로 변수인 samp_rate와 Baseband Freq를  슬라이드 바 변수값인 channel_freq로 설정합니다.

그리고 화면 출력을 한 화면에 2개의 탭으로 출력하기 위해서, Notebook에 Notebook_0, 1 로 입력합니다. 두번째 탭에 출력이 될 것입니다.

두번째 화면에서는 FM 변환이 완료된 주파수 영역을 볼 수 있습니다.

 

 

6. Rational Resampler

FM 변환된 음성신호는 이산신호(디지털 샘플링 신호)이기 때문에, 이 신호를 아날로그로 연결했다가, 다시 디지털 샘플링으로 추출하는 과정을 거칩니다. 

여기서 입력하는 Interpolation 값인 48과  Decimation 값인 500은 임의로 정하는 숫자가 아니라, 앞에 WBFM Receiver의 Quadrature Rate인 500k 가  뒤에 나오는 Audio Sink의 Sample Rate인 48Khz (480000)로 변환되기 위해서 필요한 값이 되어야만 합니다. 

500k 가  48배로 증가했다가, 다시 500 배로 축소되어야만 최종적으로 48k 가 됩니다.

 

 

7. Wav File Sink

FM 라디오에서 출력되는 음성 데이터를 저장하기 위해서, 파일명 File을 지정합니다.

음성데이터의 Sample Rate는 48000으로 설정합니다.

(더 높은 96000, 192000 등으로 증가시킬 수 있습니다. 그러면, 음성 품질은 좋아질 것입니다. 대신 Sample Rate를 변경하면, 앞에서 Rational Resampler에 입력되는 값을 적절히 변경하여야 합니다.)

 

 

8. Multiply Const

소리로 출력되는 FM라디오 음성데이터의 소리 증폭을 위해 Volume 상수를 지정합니다.

 

 

9. WX GUI Slider

소리로 출력되는 FM라디오 음성데이터의 소리 증폭을 위해, 앞의 Multiply Const인 Volume 상수에 대응되는 슬라이드 바를 추가합니다.

ID와 Lable을 모두 volume으로 설정하고, Default Value(기본값)와 Minimum(최소값), Maximum(최대값), 그리고 Num Steps(최소값과 최대값 사이의 총 단계)를 설정합니다.

 

 

10. Audio Sink

실제 컴퓨터의 사운드 카드에 대응하는 소리 출력을 지칭합니다.

Sample Rate는 48KHz 로 설정합니다.

 

 

11. WX GUI Slider

FM 라디오 수신을 위한 주파수 입력 및 슬라이드 바를 지정합니다.

 

 

12. WX GUI Notebook

GRC 파일의 실행시, 화면 출력을 한 화면에 2개의 탭으로 출력하기 위해서 사용하는 화면 설정을 합니다.

Labels에 두 개 화면의 탭 이름을 써줍니다. ['RF Spectrum', 'Demod Sprctrum'] 로 입력하면 됩니다.

 

 

 

 

 

 

 

Posted by 훅크선장
, |