GNU Radio 를이용한 AM Reeiver 구현 이봉준 2008-07-25 1. 연구목적 Software Radio 를이해하고 GNU Radio 와 Universal Software Radio Peripheral (USRP) 를이용한 AM Reeiver 를구현한다. 2. GNU Radio and USRP GNU Radio는 GNU General Publi Liense하에배포되는 signal proessing pakage로서 eletromagneti spetrum을이용해 radio spetrum을이해하고쉽게사용할수있게해준다. 또한 modular pipeline struture 와 python 언어의쉬운 onfiguration 과 flexibility 성질을이용하여프로그래밍하기쉽도록만들어졌다. USRP는 software radio를만들기위한 high speed USB기반의장치로서 4 개의 high speed digital to analog onverter와 4 개의 high speed digital to analog onverter, FPGA, glue logi으로구성되어있다. USRP는 GNU Radio와무료로제공되는라이브러리를이용해자유롭게디자인할수있다. 3. Amplitude Modulation 3.1 Introdution of modulation Modulation은정보를저장, 전송하기위해 baseband signal을전기적신호로변환하는것을말한다. 원하는정보에따라 arrier 신호의 amplitude, frequeny, phase 정보를변경하여변조된신호를얻는다. Baseband Signal (Original Signal) Modulation (+ Carrier) Modulated Signal (Baseband + Carrier) Demodulation (- Carrier) Original Signal 그림 1. Modulation Proessing Blok. 1
3.2 Amplitude Modulation with Large Carrier (DSB-LC or AM) f ( t ) φ( t) = ( f ( t) + A )osωt Modulator t ( ) = A osωt = f ( t)osωt+ A osωt DSB-LC 방식은 DSB-SC (Suppressed Carrier) 방식에 large arrier 를더해주는 방식으로일반적인 AM Radio방식으로사용된다. A os( ωt ) f ( t) 를 modulating signal이라했을때다음과같다. 를 arrier signal F( ω) = F {f(t)} Φ ( ω) = F { φ(t)} Φ ( ω) = F[A os( ωt) + f ( t) os( ωt) A jω ( ) ( ) t A jωt f t jωt f t jωt = F e + e + e + e 2 2 2 2 1 1 = πaδ ( ω ω ) + πaδ ( ω+ ω ) + F( ω ω ) + F( ω+ ω ) 2 2 (1) (2) (3) (4) 그림 2. DBS-LC Modulation Proess. 2
3.3 Demodulation of modulated signal DSB-LC 신호의 demodulation에는주로 envelope detetion방법이이용되는데, 이것은 modulated signal를 diode 및 RC 회로를통과시켜양의값의 envelope을 detetion하여 original signal을복구하는방법이다. software signal proessing에서는 magnitude proessing을통해 demodulation하게된다. 4. AM Reeiver 64Mhz 64khz 64khz 32khz USRP DDC Magnitude LPF Complex Complex Float Float S P K 그림 3. AM Reeiver Signal Proess. 4.1 USRP Blok USRP의 RF단을통해 Radio Signal을수신하기위해서는 interfae설정이필요하다. USRP를설정하기위한코드는다음과같다. sr = usrp.soure_ () sr.set_deim_rate(usrp_deim) subdev = usrp.seleted_subdev(sr, pik_subdevie(sr)) usrp.tune(sr, 0, subdev, 1107e3+64000) usrp.soure_() 함수는 USRP Rx path interfae 로연결하는기능을한다. 이때 _ 는 omplex 로데이터를수신함을의미한다. USRP 내부의 ADC sampling rate 는 64Mhz 로수행된다. 다음으로 usrp.tune() 함수를이용해 enter frequeny 를 setting 하게되는데함수 인자및각각의의미는다음과같다. usrp.soure_x.tune(u, han, subdev, target_freq) Parameters u: instane of usrp.soure_* han: DDC number subdev: daughterboard subdevie target_freq: frequeny in Hz 3
위 sample soure 에서는 1107khz+64khz 를중심주파수로설정된상태이다. 아래 그림은 sample soure 가실행될때 USRP 를통해들어오는 signal 를 frequeny domain 에서본모습니다. 그림 4. Signal from USRP in frequeny domain. Frequeny entered at 1171khz. 4.2 Digital Down Converter (DDC) Blok USRP 를통해 64Mhz 로 sampling 된 signal 은 DDC 기능을하는 gr.freq_xlating_fir_f() 함수를통해 down onverting 되게된다. gr. freq_xlating_fir_filter _xxx (deimation, taps, enter_freq, sampling_freq) Parameters deimation: integer taps: depends on funtion enter_freq: double sampling_freq: double gr.freq_xlating_fir_f() 함수는내부적으로 frequeny translation, FIR filter, deimation 과정을수행하게된다. 이런기능을통해원하는 hannel을효과적으로 seletion하고 wide bandwidth input을 narrow band signal로 deimate하게된다. _f 는 omplex input omplex output을의미한다. hannel_oeffs = gr.firdes.low_pass (1, if_rate, 8000, 1000, gr.firdes.win_hann) dd = gr.freq_xlating_fir_filter_f (if_deim, hannel_oeffs, 64000, if_rate) 위 sample soure 에서는중심주파수를 64khz 로설정하고 sampling_freq 265khz, utoff_freq 8khz, transition_with 1khz 인 Low Pass Filter (LPF) 와계수가 4 인 deimation 을통해최종적으로는 64khz 로 sampling 된 signal 이나오게된다. 4
아래그림은 DDC 를통과한신호의 frequeny domain 에서의모습이다. 그림 5. Post-DDC Signal in frequeny domain. utoff_freq 와 transition_with 를각각 8khz, 1khz 로설정하는이유는 AM Radio 의대여 폭이 9khz 이기때문이다. 4.3 Magnitude Blok DSB-LC방식의 AM signal을 demodulation 하기위해서주로 envelope detetion을거치게된다. software frequeny에서는 magnitude를통해같은과정을수행하게된다. 이때사용되는함수가 gr.omplex_to_mag() 이다. magblok = gr.omplex_to_mag() gr.omplex_to_mag() 함수는 omplex signal 을받아 float 형식의 magnitude 를 출력으로내보내는역할을한다. 이과정을거치면서 modulated signal 이 demodulation 이되면서 original signal 이복원되게된다. 4.4 LPF Blok Magnitude 를거쳐복원된 original signal 에서불필요한부분을줄이고가청주파수 대역만남기기위해 LPF 를이용한다. gr.fir_filter_fff() 함수가그역할을하게된다. gr. fir_filter_xxx (deimation, taps) Parameters deimation: integer taps: depends on funtion gr.fir_filter_fff() 는 float 형식의 Signal 을입력받아 low pass filter 와 deimation 을 5
수행하고 float 형식으로내보내게된다. audio_oeffs = gr.firdes.low_pass (1.0, demod_rate, 9e3, 4e3, gr.firdes.win_hann) audio_filter = gr.fir_filter_fff (audio_deimation, audio_oeffs) 위 sample soure에서는 sampling_freq 64khz, utoff_freq 8khz, transition_with 4khz인 Low Pass Filter와계수가 2 인 audio_deimation을지나면서최종적으로 32khz로 sampling된 signal이출력된다. 아래그림은 audio_filter을통과한 signal의 frequeny domain에서의모습이다. 그림 6. Post-LPF Signal in frequeny domain. 출력되는 sound signal 의 volume 을설정하기위해서는 gr.multiply_onst_ff() 함수를 이용한다. volumeontrol = gr.multiply_onst_ff(.5) gr.multiply_onst_ff() 함수는 float형식의 onstant signal을입력받아크기를증가시켜 float형식으로출력하게된다. 이렇게나온 signal는 sound_sink() 함수를통해 PC의 sound ard로입력되어 PC와연결된스피커를통해 signal을들을수있게된다. REFERENCES [1] http://gnuradio.org/tra [2] Ferrel G. Stremler, Introdution to Communiation Systems, Addison-Wesley Pub. Co.. 6