根据上一篇教程,我们已经在Ubuntu上安装好了GunRadio环境,但默认GunRadio环境是没有OsmoSDR模块的,为此我们要为GunRadio安装OsmoSDR模块,安装也很简单,只需要在命令行执行以下指令,再次打开GunRadio就会看到OsmoSDR模块了。
sudo apt-get install gnuradio
进入GunRadio界面,第一步我们要做的是修改Options中ID和Title。Title可以不进行修改,但在新版本的GunRadio中,如果不修改ID,是会报错的,无法保存。
下面借鉴教程:HackRF_中文教程_哔哩哔哩_bilibili来完成一个收音机的测试。
1. 与视频教程不同,我们从OsmoSDR中选取osmocom Source,以实现和无线电设备的通信,该模块将通知HackRF处于接收模式,采样的数据通过USB口接收并传入后续模块。
2. 我们也不再使用视频中的WX模块,而改用QT模块,所以,为了展示信号展示,我们选取QT GUI Frequency Sink模块。
3. 在Variable中修改采样率samp_rate,将采样率提高,修改到10e6。
4. 修改osmocom Source中的ch0:Frequency(HZ)参数,修改到一个电台频率,如果不知道就先随便改到100e6HZ左右(设置一个Variable,center_freq);修改RF Gain为0,因为不需要发射信号,所以射频放大就不需要了;IF Gain和BB Gain可以使用默认的20,也可根据实际情况适当提高,一般提高IF Gain收听效果会明显增强。
BB gain:基带增益baseband frequency gain
IF gain:中频增益Intermediate frequency gain
RF gain:射频增益Radio frequency gain
5. 修改GUI Frequency Sink中的Average,与视频中的模块不同,该模块不仅可以设置on/off,还可以选择low,medium,high,我们可以选取medium试试。还有一点,将GUI Frequency Sink的Frequency改为center_freq。
6. 到此,就可以运行看一看了,我们应该可以看到大致的信号,但并不能听到声音。其运行效果如图。
7. 为了实现调节频率位置,找到最优的收听位置,使用Signal Source和Multiply模块,通过Multiply将osmocom Source(HackRF收到的信号)与Signal Source(CPU产生的信号)相乘。
8. 设置一个Variable,channel_freq 在实验中设置为95.4e6,把Signal Source中的Frequency设置为center_freq-channel_freq。再copy一个QT GUI Frequency Sink,运行会出现两个界面查看是否实现了调频,
可以看到95.4已经在屏幕中间了
9.下面把信号转为声音信号,首先使用一下filter,使用lowpass filter。首先创建Variable:channel_width,数值为200e3,设置lowpassfilter的属性Decimation(降低采样率):int(samp_rate/channel_width);Cutoff Freq:75e3,Transition Freq:25e3。产生操作是,采样率为10MB的信号传入到低通滤波器中,它会把采样率降低50倍,输出10MB/50=200k每秒的采样点。
10.滤波后,使用Rational Resampler再更改采样率,这样做是因为lowpass filter只能整数倍修改。现在需非整数修改,12/5,参数Interpolation:12,Decimation:5。这里200k*12/5=480k
11.之后使用核心模块FM解调器WBFM Receive,把复数信号转换为实数音频信号,设置采样率Quadrature Rate:480e3,进一步降低采样倍数 Audio Decimation:10。所以out的是480k/10=48k。
12.声卡接收到的是48k的信号,选取Audio Sink,设置参数Sample Rate为48k。此时就可以运行听音乐了!但是,我在运行时gunradio报了一个python语法的错误,我尝试解决,但最后随便了修改了以下sample_rate,就好了...错误原因不明,所以如果大家也出现了错误不妨reset以下设备试试。
13.调节声音,在WBFM模块和Audio Sink两个模块中间添加Multiply Const来乘一个数值,将Multiply Const中的数据类型改为flow,否则会报错。乘数constant就是乘以的倍数,我们希望可以随时调整,视频中使用的是WX GUI Slider,这里我们换做QT GUI Range,我们设置QT GUI Range的属性 ID:audio_gain,Default Value:1,Start:0,Stop:10,Step:0.2,其含义比较好理解。并将Multiply Const中的constant参数设定为audio_gain,这样就可以实现在界面中通过滑块调节声音了。
14.至此,照着视频中的步骤已经做完了,在视频中,老师留了一个课后作业,就是把频道也做成可调节的。在此,我将channel_freq从Variable改成了GUI Range,并设置了起始和步长,即可很容易实现调频了。