Portapack应用开发教程(十八)NavTex接收

GNURadio实现NavTex(航行警告电传系统)解调_哔哩哔哩_bilibili

上面视频是我目前实现的效果。

NavTex是一种航行警告电传系统。工作频率是500kHz左右或者4.2MHz,后者可以用PortaPack直接接收。

更多介绍:

NAVTEX(航行警告电传系统)接收、粗认识指南 - 哔哩哔哩

我之前就知道它可以认为是SSB+AFSK的调制方式。问题是这么解太难。往简单来说SSB其实就是一种AM,而AM又可以被看作是频率搬移或混频,这部分工作本身SDR就有硬件在承担了。因此可以直接忽略这部分,剩下的就是FSK了。而FSK就可以看作FM。这个就跟以前做NRF或者BTLE解调一样。

所以我一开始用NRF的流图尝试。能看到效果,但是效果不好,后来我在网上找了fsk-demod这个第三方gnuradio模块。并且把我查到的navtex调制频率变化freq_deviation 170Hz填入到模块中,还把我根据音频频谱图上的中心频率1500Hz作为选频滤波器的中心频率填入。就可以看到类似安卓的navtex软件上类似的方波波型了。

我数了一下0.1秒内有10个UI,和我查询到的navtex的波特率100正好对应。

后来我又仔细比较了一下每一瞬间的波形长短,发现都能和安卓软件对得上,说明gnuradio解调就做好了。

再后来我还要简化一下流图,把第三方模块里有用的部分直接拿到我自己的流图里来,也能用,这也就是视频里用到的程序了。

但目前解调只是音频基带的。后面还要做portapack发射后,用hackrf+gnuradio来接收并解调。然后再一步步实现HackRF直接用c++解调和解码。最终搬进portapack。

接下来尝试用portapack发射,再用hackrf+gnuradio来接收。

流图需要调整如下:

这里边的调整主要是3方面:

1.调整接收机硬件中心频率,使得它与发射机中心频率不重合(相差30kHz),然后再用数学运算乘以-31.5kHz的cosine,实现数字下变频,除了补偿偏移的30kHz外,还顺带把音频的1.5kHz搬到0Hz。这样做目的是解决hackrf接收机的dc offset的干扰,以及不需要调整xlating filter的中心频率了,理论上这个带通滤波器可以直接用低通滤波器替代了。

2.更改了带通滤波器high和low的值,使得fsk deviation更小了,这样可以滤除发射机dc offset的影响。

3.为了重新听到基带信号对应的音频,需要把在0Hz附近的基带信号上搬移回1.5kHz,所以又乘以1.5kHz的cosine后作为音频输出。(这个音频可以再次用navtex解调以便验证处理没问题)

上图上半部分就是经过无线电发射和接收解调出的方波信号。下半部分就是无线电频谱,你可以看到两个波峰,其中0Hz的大波峰就是接收机dc offset。右侧31.5kHz左右的小波峰就是真正的信号。它们俩差距是30kHz+1.5kHz。

正因为有比较大的差距(大于原来的1.5kHz的差距),才可以通过滤波器滤除。其实在右侧波峰里还隐含着一个发射机dc offset,在30kHz,它也是被这个带宽很小的带通滤波器给过滤了,如果没过滤的话,上面的方波信号不会这么完美。

如果我们不考虑接收机dc offset,那么我们直接把接收机和发射机设置相同中心频率,然后流图如下:

最终解出的结果会是下图这样的,看得出解调结果与方波差别较大,这是因为基带音频信号在1.5kHz处,被接收机dc offset的裙边覆盖了,哪怕有一个很窄的滤波器也无法分离这两个信号。

因此,dc offset问题是肯定绕不过的。至于portapack里好不好实现暂时还不清楚。因此暂时只打算在电脑的gnuradio上实现解调和后续解码。

猜你喜欢

转载自blog.csdn.net/shukebeta008/article/details/127156849