Portapack应用开发教程(五)模拟视频解调和数传

这几天我在做portapack的模拟视频解调。

具体代码可以看我的github。

https://github.com/jamesshao8/portapack-havoc-modified

由于改动比较大,所以这里我不具体讲代码,而是讲思路。

我主要是基于模拟音频接收改的,我用了WFM接收的界面,解调部分我参考了AM接收和ADS-B接收,期间也参考了sstv发射的界面。

ads-b虽然是数字信号,但是也是am解调的,模拟电视也是。但是在解调之前我需要看一下时域图以便调试。我观察到WFM接收有两个图,一个是音频频谱图,另一个是无线电瀑布图。我当时想的是想办法把这两个频谱图的FFT部分去掉,这样就都是时域图了,然后音频频谱图可以直接看信号的时域对不对,无线电瀑布图正好是二维图像,我把它用来显示电视画面。

效果如下视频前半段。

https://www.bilibili.com/video/av92818404

我的手对着飞机摄像头左右移动,可以看到瀑布图中间有一条红色曲线像一条蛇一样对应变化。

(时域图可以用gnuradio来测试,在osmocom_sink前面接一个signal_source,然后发射方波,三角波等,看看portapack的时域图能否看到对应波形。你也可以把AM解调后的时域信号放在时域图上进行显示,看看是否与预想的一样 ,这主要是帮助调试用的。)

接下来,我觉得用绿色和红色来表示黑白图像不直观,所以我把lut改了,增加了lut4,RGB三个数字都从0~255就行。

结果是上面这个视频的后半段。

可以看到虽然有点像实际画面,但是还是有点不太对。所以我打算改瀑布图调用的后台频谱显示程序。

我以ui_spectrum.cpp为基础,改了好多代码,并存到了ui_tv.cpp里,这样不影响其他程序里的瀑布图功能。

可以看一下ui_tv.cpp里我写的英文注释。好多跟模拟视频解调的代码都在那个里面。这是模拟视频解调最重要的部分之一(另一重要的部分是AM解调)。

最终效果:

https://www.bilibili.com/video/av94746773

这样前段时间立的flag就搞定了。

接下去可能要尝试用portapack解调数传信号。这样图传有了数传也有了,我以后出门飞飞机只要带个portpack就够了(遥控器代替不了,发射功率太小了)

我查了一下,我之前做的飞控用的APC220数传,调制方式是GFSK,portpack里有一个现成的AFSK解调,另外我确定我用的数传是没有加密的,因为我可以用2个数传收同一架飞机的数据,所以是有希望解出来的,我打算先用urh在电脑上解一下试试看。

我看过portapack的AFSK代码了,就是用FM解调到音频,然后音频buffer再做解码,最后解码后的数据打印到portapack自带的console控件上。因为基带数据经过了音频buffer,所以叫afsk,以便从音频口输出给其他解码设备,其实就是fsk,没什么特别的。

我也看了gnuradio里的gfsk代码,发射部分就是在发射之前对数据先做了高斯低通滤波,然后FM调制。接收部分就是fm解调,所以也没什么特别复杂的。

后来我用fosphor看了一下,频谱图上确实是2fsk,瀑布图上看得出基带信号确实有高有低对应1010。我也用urh看过时域信号,有频率高低变化,但是飞控数传偶尔发一条,数据量太少,我后来把apc220用串口转接器插到电脑上用串口调试助手发射。不过我最终没发现串口发的数据对应ASCII码与空中的FSK信号的关系。我觉得可能是做了编码的,也就是说串口的1010并不是直接发去空中的,但是具体什么编码我查不到。APC220的资料太少了。接下去我打算试试 nrf24l01,这个芯片也用在飞机上,一般是小四轴做遥控的,也是fsk调制,但是好处是它资料很多,更好的是已经有人用rtlsdr解调过它了。

我还可以结合一下以前做的GMSK文本收发和GFSK音频收发,改为GFSK文本收发,然后在gnuradio实现收发的同时,用portapack的AFSK在旁边接收,看看console上会出现什么。

猜你喜欢

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