GNURadio+HackRF小实验(FM发射与接收)
时间:2023-12-21 14:37:01
第一次接触HackRF,做了些小实验,记录一下。
运行环境:Ubuntu 16.04,HackRF One
1 构建运行环境
百度说虚拟机不好用,为了方便我直接做U盘系统(不是U盘启动盘),方法如下:
(1)准备两个U盘,一个性能差不多没关系,另一个U盘需要性能更好(用于安装)Ubuntu系统);
(2)先用差点的U盘做一个Ubuntu启动盘;
(3)从U盘开始时提示Try Ubuntu和Install Ubuntu,选择后一个,将系统安装在更好的U盘上,这里一定要注意不要误选电脑硬盘,否则后果会很严重,楼主花了300大洋恢复硬盘数据(引以为戒)。
GNURadio配置:
《HackRF与GNURadio网站如下:
http://www.hackrf.net/hackrf与gnuradio入门指南/
然而,我没有用这种方法成功。我不知道我的网速是否不好。有些东西没有安装好。
我安装了以下网站:
http://bobao.360.cn/learning/detail/405.html
关键命令贴在这里:
sudo
apt-get
install
hackrflibhackrf-devlibhackrf0
sudo
apt-get
install
gnuradiognuradio-devgr-osmosdrgr-osmosdrgqrx-sdrwireshark
2 FM接收机
我不记得参考哪个视频了。你可以自己看百度。代码如下,保存成grc文件,就可以
用GNURadio打开。
Sat Oct 15 11:19:45 2016 options author window_size category Custom comment description _enabled True _coordinate (0, 6) _rotation 0 generate_options wx_gui hier_block_src_path .: id top_block max_nouts 0 qt_qss_theme realtime_scheduling run_command {python} -u {filename} run_options prompt run True thread_safe_setters title variable_slider comment converver float_converter value 1 _enabled True _coordinate (272, 369) _rotation 0 grid_pos
id
audio_gain
label
max
10
min
0
notebook
num_steps
100
style
wx.SL_HORIZONTAL
variable_slider
comment
converver
float_converter
value
93.6e6
_enabled
True
_coordinate
(856, 377)
_rotation
0
grid_pos
id
channel_freq
label
max
110e6
min
80e6
notebook
num_steps
1000
style
wx.SL_HORIZONTAL
variable
comment
_enabled
True
_coordinate
(0, 78)
_rotation
0
id
samp_rate
value
10e6
blocks_multiply_const_vxx
alias
comment
const
audio_gain
affinity
_enabled
True
_coordinate
(696, 343)
_rotation
0
id
aaa
type
float
maxoutbuf
0
minoutbuf
0
vlen
1
analog_sig_source_x
amp
1
alias
comment
affinity
_enabled
True
freq
center_freq - channel_freq
_coordinate
(104, 297)
_rotation
0
id
analog_sig_source_x_0
maxoutbuf
0
minoutbuf
0
offset
0
type
complex
samp_rate
samp_rate
waveform
analog.GR_COS_WAVE
analog_wfm_rcv
audio_decimation
10
alias
comment
affinity
_enabled
True
_coordinate
(696, 246)
_rotation
0
id
analog_wfm_rcv_0
maxoutbuf
0
minoutbuf
0
quad_rate
480e3
audio_sink
alias
comment
affinity
device_name
_enabled
True
_coordinate
(696, 415)
_rotation
0
id
audio_sink_0
num_inputs
1
ok_to_block
True
samp_rate
48000
blocks_file_sink
append
False
alias
comment
affinity
_enabled
True
file
test
_coordinate
(104, 444)
_rotation
0
id
blocks_file_sink_0
type
complex
unbuffered
False
vlen
1
blocks_multiply_xx
alias
comment
affinity
_enabled
1
_coordinate
(328, 283)
_rotation
0
id
blocks_multiply_xx_0
type
complex
maxoutbuf
0
minoutbuf
0
num_inputs
2
vlen
1
parameter
alias
comment
_enabled
True
_coordinate
(0, 150)
_rotation
0
id
center_freq
label
short_id
type
value
90e6
parameter
alias
comment
_enabled
True
_coordinate
(0, 222)
_rotation
0
id
channel_width
label
short_id
type
value
200e3
low_pass_filter
beta
6.76
alias
comment
affinity
cutoff_freq
75e3
decim
int(samp_rate/channel_width)
_enabled
True
type
fir_filter_ccf
_coordinate
(576, 14)
_rotation
0
gain
1
id
low_pass_filter_0
interp
1
maxoutbuf
0
minoutbuf
0
samp_rate
samp_rate
width
25e3
win
firdes.WIN_HAMMING
osmosdr_source
alias
ant0
bb_gain0
20
bw0
0
dc_offset_mode0
0
corr0
0
freq0
center_freq
gain_mode0
False
if_gain0
20
iq_balance_mode0
0
gain0
0
ant10
bb_gain10
20
bw10
0
dc_offset_mode10
0
corr10
0
freq10
100e6
gain_mode10
False
if_gain10
20
iq_balance_mode10
0
gain10
10
ant11
bb_gain11
20
bw11
0
dc_offset_mode11
0
corr11
0
freq11
100e6
gain_mode11
False
if_gain11
20
iq_balance_mode11
0
gain11
10
ant12
bb_gain12
20
bw12
0
dc_offset_mode12
0
corr12
0
freq12
100e6
gain_mode12
False
if_gain12
20
iq_balance_mode12
0
gain12
10
ant13
bb_gain13
20
bw13
0
dc_offset_mode13
0
corr13
0
freq13
100e6
gain_mode13
False
if_gain13
20
iq_balance_mode13
0
gain13
10
ant14
bb_gain14
20
bw14
0
dc_offset_mode14
0
corr14
0
freq14
100e6
gain_mode14
False
if_gain14
20
iq_balance_mode14
0
gain14
10
ant15
bb_gain15
20
bw15
0
dc_offset_mode15
0
corr15
0
freq15
100e6
gain_mode15
False
if_gain15
20
iq_balance_mode15
0
gain15
10
ant16
bb_gain16
20
bw16
0
dc_offset_mode16
0
corr16
0
freq16
100e6
gain_mode16
False
if_gain16
20
iq_balance_mode16
0
gain16
10
ant17
bb_gain17
20
bw17
0
dc_offset_mode17
0
corr17
0
freq17
100e6
gain_mode17
False
if_gain17
20
iq_balance_mode17
0
gain17
10
ant18
bb_gain18
20
bw18
0
dc_offset_mode18
0
corr18
0
freq18
100e6
gain_mode18
False
if_gain18
20
iq_balance_mode18
0
gain18
10
ant19
bb_gain19
20
bw19
0
dc_offset_mode19
0
corr19
0
freq19
100e6
gain_mode19
False
if_gain19
20
iq_balance_mode19
0
gain19
10
ant1
bb_gain1
20
bw1
0
dc_offset_mode1
0
corr1
0
freq1
100e6
gain_mode1
False
if_gain1
20
iq_balance_mode1
0
gain1
10
ant20
bb_gain20
20
bw20
0
dc_offset_mode20
0
corr20
0
freq20
100e6
gain_mode20
False
if_gain20
20
iq_balance_mode20
0
gain20
10
ant21
bb_gain21
20
bw21
0
dc_offset_mode21
0
corr21
0
freq21
100e6
gain_mode21
False
if_gain21
20
iq_balance_mode21
0
gain21
10
ant22
bb_gain22
20
bw22
0
dc_offset_mode22
0
corr22
0
freq22
100e6
gain_mode22
False
if_gain22
20
iq_balance_mode22
0
gain22
10
ant23
bb_gain23
20
bw23
0
dc_offset_mode23
0
corr23
0
freq23
100e6
gain_mode23
False
if_gain23
20
iq_balance_mode23
0
gain23
10
ant24
bb_gain24
20
bw24
0
dc_offset_mode24
0
corr24
0
freq24
100e6
gain_mode24
False
if_gain24
20
iq_balance_mode24
0
gain24
10
ant25
bb_gain25
20
bw25
0
dc_offset_mode25
0
corr25
0
freq25
100e6
gain_mode25
False
if_gain25
20
iq_balance_mode25
0
gain25
10
ant26
bb_gain26
20
bw26
0
dc_offset_mode26
0
corr26
0
freq26
100e6
gain_mode26
False
if_gain26
20
iq_balance_mode26
0
gain26
10
ant27
bb_gain27
20
bw27
0
dc_offset_mode27
0
corr27
0
freq27
100e6
gain_mode27
False
if_gain27
20
iq_balance_mode27
0
gain27
10
ant28
bb_gain28
20
bw28
0
dc_offset_mode28
0
corr28
0
freq28
100e6
gain_mode28
False
if_gain28
20
iq_balance_mode28
0
gain28
10
ant29
bb_gain29
20
bw29
0
dc_offset_mode29
0
corr29
0
freq29
100e6
gain_mode29
False
if_gain29
20
iq_balance_mode29
0
gain29
10
ant2
bb_gain2
20
bw2
0
dc_offset_mode2
0
corr2
0
freq2
100e6
gain_mode2
False
if_gain2
20
iq_balance_mode2
0
gain2
10
ant30
bb_gain30
20
bw30
0
dc_offset_mode30
0
corr30
0
freq30
100e6
gain_mode30
False
if_gain30
20
iq_balance_mode30
0
gain30
10
ant31
bb_gain31
20
bw31
0
dc_offset_mode31
0
corr31
0
freq31
100e6
gain_mode31
False
if_gain31
20
iq_balance_mode31
0
gain31
10
ant3
bb_gain3
20
bw3
0
dc_offset_mode3
0
corr3
0
freq3
100e6
gain_mode3
False
if_gain3
20
iq_balance_mode3
0
gain3
10
ant4
bb_gain4
20
bw4
0
dc_offset_mode4
0
corr4
0
freq4
100e6
gain_mode4
False
if_gain4
20
iq_balance_mode4
0
gain4
10
ant5
bb_gain5
20
bw5
0
dc_offset_mode5
0
corr5
0
freq5
100e6
gain_mode5
False
if_gain5
20
iq_balance_mode5
0
gain5
10
ant6
bb_gain6
20
bw6
0
dc_offset_mode6
0
corr6
0
freq6
100e6
gain_mode6
False
if_gain6
20
iq_balance_mode6
0
gain6
10
ant7
bb_gain7
20
bw7
0
dc_offset_mode7
0
corr7
0
freq7
100e6
gain_mode7
False
if_gain7
20
iq_balance_mode7
0
gain7
10
ant8
bb_gain8
20
bw8
0
dc_offset_mode8
0
corr8
0
freq8
100e6
gain_mode8
False
if_gain8
20
iq_balance_mode8
0
gain8
10
ant9
bb_gain9
20
bw9
0
dc_offset_mode9
0
corr9
0
freq9
100e6
gain_mode9
False
if_gain9
20
iq_balance_mode9
0
gain9
10
comment
affinity
args
_enabled
True
_coordinate
(104, 91)
_rotation
0
id
osmosdr_source_0
maxoutbuf
0
clock_source0
time_source0
clock_source1
time_source1
clock_source2
time_source2
clock_source3
time_source3
clock_source4
time_source4
clock_source5
time_source5
clock_source6
time_source6
clock_source7
time_source7
minoutbuf
0
nchan
1
num_mboards
1
type
fc32
sample_rate
samp_rate
sync
rational_resampler_xxx
alias
comment
affinity
decim
5
_enabled
True
fbw
0
_coordinate
(760, 43)
_rotation
0
id
rational_resampler_xxx_0
interp
12
maxoutbuf
0
minoutbuf
0
taps
type
ccc
wxgui_fftsink2
avg_alpha
0
average
True
baseband_freq
center_freq
alias
comment
affinity
_enabled
1
fft_size
1024
freqvar
None
_coordinate
(328, 0)
_rotation
0
grid_pos
id
wxgui_fftsink2_0
notebook
peak_hold
False
ref_level
0
ref_scale
2.0
fft_rate
15
samp_rate
samp_rate
title
FFT Plot
type
complex
win_size
win
None
y_divs
10
y_per_div
10
wxgui_fftsink2
avg_alpha
0
average
True
baseband_freq
channel_freq
alias
comment
affinity
_enabled
1
fft_size
1024
freqvar
None
_coordinate
(488, 256)
_rotation
0
grid_pos
id
wxgui_fftsink2_0_0
notebook
peak_hold
False
ref_level
0
ref_scale
2.0
fft_rate
15
samp_rate
samp_rate
title
FFT Plot
type
complex
win_size
win
None
y_divs
10
y_per_div
10
wxgui_scopesink2
ac_couple
False
alias
comment
affinity
_enabled
0
_coordinate
(928, 195)
_rotation
0
grid_pos
id
wxgui_scopesink2_0
notebook
num_inputs
1
samp_rate
samp_rate
t_scale
0
title
Scope Plot
trig_mode
wxgui.TRIG_MODE_AUTO
type
float
v_offset
0
v_scale
0
win_size
xy_mode
False
y_axis_label
Counts
aaa
audio_sink_0
0
0
aaa
wxgui_scopesink2_0
0
0
analog_sig_source_x_0
blocks_multiply_xx_0
0
1
analog_wfm_rcv_0
aaa
0
0
blocks_multiply_xx_0
low_pass_filter_0
0
0
blocks_multiply_xx_0
wxgui_fftsink2_0_0
0
0
low_pass_filter_0
rational_resampler_xxx_0
0
0
osmosdr_source_0
blocks_file_sink_0
0
0
osmosdr_source_0
blocks_multiply_xx_0
0
0
osmosdr_source_0
wxgui_fftsink2_0
0
0
rational_resampler_xxx_0
analog_wfm_rcv_0
0
0
这里都是按视频做的,没什么参考,就不详细介绍了。
3 FM电台
代码如下,保存成grc文件,然后用GNURadio打开。
Mon Oct 17 14:46:32 2016
options
author
window_size
category
Custom
comment
description
_enabled
True
_coordinate
(8, 8)
_rotation
0
generate_options
wx_gui
hier_block_src_path
.:
id
top_block
max_nouts
0
qt_qss_theme
realtime_scheduling
run_command
{python} -u {filename}
run_options
prompt
run
True
thread_safe_setters
title
variable_slider
comment
converver
float_converter
value
4.388e6
_enabled
True
_coordinate
(856, 113)
_rotation
0
grid_pos
id
FM_samp_rate
label
max
5e6
min
3e6
notebook
num_steps
1000
style
wx.SL_HORIZONTAL
variable_slider
comment
converver
float_converter
value
104e6
_enabled
True
_coordinate
(264, 8)
_rotation
0
grid_pos
id
freq
label
max
110e6
min
80e6
notebook
num_steps
1000
style
wx.SL_HORIZONTAL
variable
comment
_enabled
True
_coordinate
(168, 6)
_rotation
0
id
samp_rate
value
48000
analog_wfm_tx
audio_rate
48000
alias
comment
affinity
_enabled
True
_coordinate
(536, 3)
_rotation
0
id
analog_wfm_tx_0
max_dev
75e3
maxoutbuf
0
minoutbuf
0
quad_rate
480000
tau
300e-6
audio_source
alias
comment
affinity
device_name
_enabled
True
_coordinate
(0, 159)
_rotation
0
id
audio_source_0
maxoutbuf
0
minoutbuf
0
num_outputs
1
ok_to_block
True
samp_rate
samp_rate
blocks_multiply_const_vxx
alias
comment
const
20
affinity
_enabled
True
_coordinate
(168, 159)
_rotation
0
id
blocks_multiply_const_vxx_0
type
float
maxoutbuf
0
minoutbuf
0
vlen
1
fractional_interpolator_xx
alias
comment
affinity
_enabled
True
_coordinate
(320, 150)
_rotation
0
id
fractional_interpolator_xx_0
interp_ratio
875e-3
maxoutbuf
0
minoutbuf
0
phase_shift
1
type
float
osmosdr_sink
alias
ant0
bb_gain0
20
bw0
250e3
corr0
0
freq0
freq
if_gain0
40
gain0
10
ant10
bb_gain10
20
bw10
0
corr10
0
freq10
100e6
if_gain10
20
gain10
10
ant11
bb_gain11
20
bw11
0
corr11
0
freq11
100e6
if_gain11
20
gain11
10
ant12
bb_gain12
20
bw12
0
corr12
0
freq12
100e6
if_gain12
20
gain12
10
ant13
bb_gain13
20
bw13
0
corr13
0
freq13
100e6
if_gain13
20
gain13
10
ant14
bb_gain14
20
bw14
0
corr14
0
freq14
100e6
if_gain14
20
gain14
10
ant15
bb_gain15
20
bw15
0
corr15
0
freq15
100e6
if_gain15
20
gain15
10
ant16
bb_gain16
20
bw16
0
corr16
0
freq16
100e6
if_gain16
20
gain16
10
ant17
bb_gain17
20
bw17
0
corr17
0
freq17
100e6
if_gain17
20
gain17
10
ant18
bb_gain18
20
bw18
0
corr18
0
freq18
100e6
if_gain18
20
gain18
10
ant19
bb_gain19
20
bw19
0
corr19
0
freq19
100e6
if_gain19
20
gain19
10
ant1
bb_gain1
20
bw1
0
corr1
0
freq1
100e6
if_gain1
20
gain1
10
ant20
bb_gain20
20
bw20
0
corr20
0
freq20
100e6
if_gain20
20
gain20
10
ant21
bb_gain21
20
bw21
0
corr21
0
freq21
100e6
if_gain21
20
gain21
10
ant22
bb_gain22
20
bw22
0
corr22
0
freq22
100e6
if_gain22
20
gain22
10
ant23
bb_gain23
20
bw23
0
corr23
0
freq23
100e6
if_gain23
20
gain23
10
ant24
bb_gain24
20
bw24
0
corr24
0
freq24
100e6
if_gain24
20
gain24
10
ant25
bb_gain25
20
bw25
0
corr25
0
freq25
100e6
if_gain25
20
gain25
10
ant26
bb_gain26
20
bw26
0
corr26
0
freq26
100e6
if_gain26
20
gain26
10
ant27
bb_gain27
20
bw27
0
corr27
0
freq27
100e6
if_gain27
20
gain27
10
ant28
bb_gain28
20
bw28
0
corr28
0
freq28
100e6
if_gain28
20
gain28
10
ant29
bb_gain29
20
bw29
0
corr29
0
freq29
100e6
if_gain29
20
gain29
10
ant2
bb_gain2
20
bw2
0
corr2
0
freq2
100e6
if_gain2
20
gain2
10
ant30
bb_gain30
20
bw30
0
corr30
0
freq30
100e6
if_gain30
20
gain30
10
ant31
bb_gain31
20
bw31
0
corr31
0
freq31
100e6
if_gain31
20
gain31
10
ant3
bb_gain3
20
bw3
0
corr3
0
freq3
100e6
if_gain3
20
gain3
10
ant4
bb_gain4
20
bw4
0
corr4
0
freq4
100e6
if_gain4
20
gain4
10
ant5
bb_gain5
20
bw5
0
corr5
0
freq5
100e6
if_gain5
20
gain5
10
ant6
bb_gain6
20
bw6
0
corr6
0
freq6
100e6
if_gain6
20
gain6
10
ant7
bb_gain7
20
bw7
0
corr7
0
freq7
100e6
if_gain7
20
gain7
10
ant8
bb_gain8
20
bw8
0
corr8
0
freq8
100e6
if_gain8
20
gain8
10
ant9
bb_gain9
20
bw9
0
corr9
0
freq9
100e6
if_gain9
20
gain9
10
comment
affinity
args
_enabled
1
_coordinate
(704, 110)
_rotation
0
id
osmosdr_sink_0
type
fc32
clock_source0
time_source0
clock_source1
time_source1
clock_source2
time_source2
clock_source3
time_source3
clock_source4
time_source4
clock_source5
time_source5
clock_source6
time_source6
clock_source7
time_source7
nchan
1
num_mboards
1
sample_rate
FM_samp_rate
sync
rational_resampler_xxx
alias
comment
affinity
decim
1
_enabled
1
fbw
0
_coordinate
(536, 139)
_rotation
0
id
rational_resampler_xxx_0
interp
8
maxoutbuf
0
minoutbuf
0
taps
type
ccc
wxgui_scopesink2
ac_couple
False
alias
comment
affinity
_enabled
0
_coordinate
(320, 243)
_rotation
0
grid_pos
id
wxgui_scopesink2_0
notebook
num_inputs
1
samp_rate
samp_rate
t_scale
0
title
Scope Plot
trig_mode
wxgui.TRIG_MODE_AUTO
type
float
v_offset
0
v_scale
0
win_size
xy_mode
False
y_axis_label
Counts
analog_wfm_tx_0
rational_resampler_xxx_0
0
0
audio_source_0
blocks_multiply_const_vxx_0
0
0
blocks_multiply_const_vxx_0
fractional_interpolator_xx_0
0
0
blocks_multiply_const_vxx_0
wxgui_scopesink2_0
0
0
fractional_interpolator_xx_0
analog_wfm_tx_0
0
0
rational_resampler_xxx_0
osmosdr_sink_0
0
0
这里做一个简单介绍,很多模块我也不清楚,如有错误,望大神指出。
(1)Audio Source模块:
这个模块是从话筒采集信号,Sample Rate参数可以自己设置,一般音乐的采样率为44.1k,这里的设置为48k。
(2)Multiply模块
对话筒接收的信号进行线性放大,保证信号的清晰度。
(3)Fractionnal Interpolator模块
这个我也不懂,不过需要注意的是,模块上的875m表示875e-3,我当时只看到截图,花了点时间才知道的。
(4)WBFM Transmit模块
300u表示300e-6。
(5)osmocom Sink模块
Sample Rate(sps):决定了音频输出的快慢,我用了一个滑块来调整到合适值。
Ch0:Frequency(Hz):载波频率,决定了你能在哪个频道上收到信号 (注意:注意使用无线电请遵守法律,不要干扰其他无线电设备)。
Ch0:RF Gain(dB):修改这个值可以改变发射信号覆盖的范围。
(6)最后,你可以用你的手机FM接收HackRF电台的信号了。