블로그 이미지
훅크선장

카테고리

분류 전체보기 (360)
사진이야기 (23)
펭귄컴퓨팅 (120)
컴퓨터보안 (83)
절름발이 프로그래머 (59)
하드웨어개조 (23)
아두이노(Arduino) (7)
RC비행기(FPV) (3)
HackRF One [SDR] (3)
USRP B210 [B2x0] (0)
3D 프린팅 (1)
멀알려줄까 (35)
홈베이킹&홈쿠킹 (2)
잡다한것들 (15)
Total
Today
Yesterday

달력

« » 2024.3
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

공지사항

태그목록

최근에 올라온 글

gnuradio의 예제, 2020년도에 직접 실험한 것들

HackRF one, RTL-SDR, BladeRF  등

 

 

 

 

RTL-SDR_FM_radio_receiver_with_freq_slider.grc
0.02MB
RTL-SDR_FM_radio_receiver_with_freq_selection.grc
0.02MB
get_sig.grc
0.01MB
send_sig.grc
0.01MB
FM_Receiver.grc
0.01MB
fm_example_by_HooK.grc
0.04MB

윈도우즈에서 만든 간단한 예제 FM_Receiver.grc 에서는  음성 신호 마지막이 24KHz 인데, 이 설정이 리눅스 (칼리리눅스) 에서 Alsa 오디오 드라이버에서는 지원되지 않는 음성주파수 라고 나온다. 2배로 늘려서, 48KHz 로 하면, 정상적으로 출력된다. 

48KHz로 설정하였으면, 바로 앞단계의 Re Sampling도 48로 맞춰줘야 한다.

 

Posted by 훅크선장
, |

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 훅크선장
, |

최근 RF 해킹에 관심을 가지게 되어서, HackRF One 장비를 구입했습니다.

외국 문헌에 사용방법이 많이 나와있는데, 저는 가능하면 칼리 리눅스 Kali Linux 2.0을 선호해서, 여기서 사용할 수 있는 방법을 정리해봤습니다.


이미 칼리 리눅스 Kali Linux 2.0 에는 HackRF와 관련된 모든 설치와 

셋팅이 되어 있습니다. 그냥 사용하시면 됩니다.

GNU Radio를 바로 쓰면 됩니다.


다만, 매번 장비를 꽂고나서 반드시

# rmmod hackrf

명령어를 실행시켜야만 합니다. 그래야 정상적으로 장비가 커널에서 인식이 됩니다.


HackRF one에 관련된 정보는 https://greatscottgadgets.com/hackrf/ 를 참고하시면 됩니다.



쉽게 풀어 말하면, 소프트웨어로 조종할 수 있는 전파장비 Radio 입니다. SDR 즉, Software Defined Radio.


GNU Radio라는 훌륭한 프로젝트가 있기 때문에, 우리는 이것을 이용하면 됩니다. 다만, 우리의 칼리 리눅스 2.0에서는 다음과 같이 몇 가지 설치가 필요합니다.

먼저 칼리 리눅스 2.0 한글판으로 부팅합니다. LXDE, Gnome 버전이나 XFCE 윈도우 매니저 버전에서도 동일하게 잘 동작합니다. XFCE, LXDE 윈도우 매니저 버전에서는 아주 잘 동작하는 것을 직접 확인하였습니다.


참고 : Pentoo Linux를 LiveCD로 그냥 사용하는 방법도 있습니다만, Pentoo 리눅스의 작업환경이 일반적인 Debian 이나 Ubuntu 환경과 조금? 다른 Gentoo 리눅스 기반이라서, 명령어나 설치등에 차이로 불편이 많습니다. Pentoo 리눅스를 쓰는 것도 나쁘지는 않습니다. 익숙해지기 전까지 조금 불편할 뿐이죠!


1. 설치를 위해서 컴파일 도구 및 라이브러리의 사전 설치

# apt-get update

# apt-get install git build-essential cmake libusb-1.0-0-dev liblog4cpp5-dev libboost-dev libboost-system-dev libboost-thread-dev libboost-program-options-dev swig gnuradio-dev libvolk-dev
# apt-get install gnuradio gnuradio-dev gr-iqbal

# sync


패키지 설치를 위한 소스 컴파일용 디렉토리를 생성
# cd ~
# mkdir sdr
# cd sdr


hackrf 기존 패키지 제거

# dpkg -r --ignore-depends=gqrx,kali-linux-full,kali-linux-sdr  hackrf

# dpkg -r --ignore-depends=gqrx,kali-linux-full,kali-linux-sdr,gr-osmosdr,libgnuradio-osmosdr0.1.3  libhackrf0


2. hackrf  패키지를 소스로 컴파일 후,  설치
# git clone https://github.com/mossmann/hackrf.git
# cd hackrf/host/
# mkdir build && cd build
# cmake ../ -DINSTALL_UDEV_RULES=ON
# make
# make install

# ldconfig


root@kali:~/sdr/hackrf/host/build# make install
[ 11%] Built target hackrf
[ 22%] Built target hackrf-static
[ 33%] Built target hackrf_cpldjtag
[ 44%] Built target hackrf_info
[ 55%] Built target hackrf_max2837
[ 66%] Built target hackrf_rffc5071
[ 77%] Built target hackrf_si5351c
[ 88%] Built target hackrf_spiflash
[100%] Built target hackrf_transfer
Install the project...
-- Install configuration: ""
-- Up-to-date: /usr/local/lib/pkgconfig/libhackrf.pc
-- Up-to-date: /etc/udev/rules.d/53-hackrf.rules
-- Up-to-date: /usr/local/lib/libhackrf.so.0.4.0
-- Up-to-date: /usr/local/lib/libhackrf.so.0
-- Up-to-date: /usr/local/lib/libhackrf.so
-- Up-to-date: /usr/local/lib/libhackrf.a
-- Up-to-date: /usr/local/include/libhackrf/hackrf.h
-- Up-to-date: /usr/local/bin/hackrf_max2837
-- Up-to-date: /usr/local/bin/hackrf_si5351c
-- Up-to-date: /usr/local/bin/hackrf_transfer
-- Up-to-date: /usr/local/bin/hackrf_rffc5071
-- Up-to-date: /usr/local/bin/hackrf_spiflash
-- Up-to-date: /usr/local/bin/hackrf_cpldjtag
-- Up-to-date: /usr/local/bin/hackrf_info

3. GNU Radio 관련 패키지 설치


기존 gr-osmosdr 패키지 제거


# dpkg -r --ignore-depends=gqrx,kali-linux-sdr gr-osmosdr libgnuradio-osmosdr0.1.3


4. osmocom 패키지를 소스로 컴파일 후,  설치
# cd ~/sdr

git clone git://git.osmocom.org/gr-osmosdr
# cd gr-osmosdr/
# mkdir build && cd build
# cmake ../
# make
# make install
# ldconfig


root@kali:~/sdr/gr-osmosdr/build# make install
[ 41%] Built target gnuradio-osmosdr
[ 41%] Built target osmosdr_swig_swig_doc
[ 44%] Built target _osmosdr_swig_swig_tag
[ 51%] Built target osmosdr_swig_swig_2d0df
[ 55%] Built target _osmosdr_swig
[ 62%] Built target pygen_swig_6ab6b
[ 68%] Built target pygen_python_0fe8f
[ 79%] Built target osmosdr_grc_xml_blocks
[ 86%] Built target pygen_apps_05ff6
[100%] Built target pygen_apps_5ca0e
Install the project...
-- Install configuration: "Release"
-- Up-to-date: /usr/local/lib/pkgconfig/gnuradio-osmosdr.pc
-- Up-to-date: /usr/local/include/osmosdr/api.h
-- Up-to-date: /usr/local/include/osmosdr/pimpl.h
-- Up-to-date: /usr/local/include/osmosdr/ranges.h
-- Up-to-date: /usr/local/include/osmosdr/time_spec.h
-- Up-to-date: /usr/local/include/osmosdr/device.h
-- Up-to-date: /usr/local/include/osmosdr/source.h
-- Up-to-date: /usr/local/include/osmosdr/sink.h
-- Up-to-date: /usr/local/lib/libgnuradio-osmosdr.so.0.1.5git
-- Up-to-date: /usr/local/lib/libgnuradio-osmosdr.so
-- Up-to-date: /usr/local/lib/python2.7/dist-packages/osmosdr/_osmosdr_swig.so
-- Up-to-date: /usr/local/lib/python2.7/dist-packages/osmosdr/osmosdr_swig.py
-- Up-to-date: /usr/local/lib/python2.7/dist-packages/osmosdr/osmosdr_swig.pyc
-- Up-to-date: /usr/local/lib/python2.7/dist-packages/osmosdr/osmosdr_swig.pyo
-- Up-to-date: /usr/local/include/osmosdr/swig/osmosdr_swig.i
-- Up-to-date: /usr/local/include/osmosdr/swig/osmosdr_swig_doc.i
-- Up-to-date: /usr/local/lib/python2.7/dist-packages/osmosdr/__init__.py
-- Up-to-date: /usr/local/lib/python2.7/dist-packages/osmosdr/__init__.pyc
-- Up-to-date: /usr/local/lib/python2.7/dist-packages/osmosdr/__init__.pyo
-- Up-to-date: /usr/local/share/gnuradio/grc/blocks/rtlsdr_source.xml
-- Up-to-date: /usr/local/share/gnuradio/grc/blocks/osmosdr_source.xml
-- Up-to-date: /usr/local/share/gnuradio/grc/blocks/osmosdr_sink.xml
-- Up-to-date: /usr/local/lib/python2.7/dist-packages/osmosdr/osmocom_siggen_base.py
-- Up-to-date: /usr/local/lib/python2.7/dist-packages/osmosdr/osmocom_siggen_base.pyc
-- Up-to-date: /usr/local/lib/python2.7/dist-packages/osmosdr/osmocom_siggen_base.pyo
-- Up-to-date: /usr/local/bin/osmocom_fft
-- Up-to-date: /usr/local/bin/osmocom_siggen
-- Up-to-date: /usr/local/bin/osmocom_siggen_nogui
-- Up-to-date: /usr/local/bin/osmocom_spectrum_sense


4. gqrx  패키지를 소스로 컴파일 후,  설치
# cd ~/sdr

git clone https://github.com/csete/gqrx.git
# cd gqrx/
# mkdir build && cd build

주의: 여기서는 cmake가 아니라, qmake 를 사용
# qmake ../
# make
# make install
# ldconfig


5. rtl-sdr 패키지를 소스로 컴파일 후,  설치
# cd ~/sdr
# git clone git://git.osmocom.org/rtl-sdr.git
# cd rtl-sdr/
# mkdir build && cd build
# cmake ../ -DINSTALL_UDEV_RULES=ON
# make
# make install
# ldconfig


6. gr-osmosdr 에서 만들어진 gnuradio용 블럭정의 파일을 사용하기 위해서, 정해진 위치로 복사
# cd
# cd /usr/local/share/gnuradio/grc/blocks/
# cp *.xml /usr/share/gnuradio/grc/blocks/
# cd /usr/share/gnuradio/grc/blocks/



7. GNU Raido Companion 프로그램을 실행해서, 사용
# cd
# gnuradio-companion &






Posted by 훅크선장
, |