目前,已经编写了 python 模块,可以实现对给定频率区间的自动扫描。具体而言,每个定点扫描处,使用 FFT 计算出频谱,并取出其中有效的部分(考虑到滤波器的过渡带效应以及频谱的混叠,靠近 +Fs/2、 -Fs/2 处的部分被予以舍弃,这也导致了相邻两个固定频点间距小于Fs, 两个 FFT 的频谱区间是重叠 的),最终拼接出整个给定频率区间的频谱。
使用了 pyqtgraph 的方式绘制实时扫描的频谱。
把频谱侦察分为两种模式:定频模式、扫频模式。两者没有实质上的区别,但由于扫频模式下多个区间段的频谱不是同一时刻获得的,它的实时性低于定频模式,这使得两种模式的信号处理方式略有区别。
最终,将完成如下工作(含两种模式):
目前的工作实际上是对扫频模式的探索,接下来可以先实现定频模式的检测、识别和解调,进而拓展出扫频模式下的信号处理方式。
首先使用 python 编写出可用的原型,为了进一步提高算法的性能,再考虑将核心模块改成 C++ 编写。
- 信号检测模块
给出信号的中心频率和带宽的估计值(f0,B)。
结果展示方法:
- 终端打印
- 图形(实时标绘在频谱图中)
检测算法:
- 能量检测法
- 体制识别模块
信号检测模块将信号序列传递给体制识别模块(使用 Message 的方式)、
体制识别模块能够给出根据传入的信号序列以及IQ采样给出每个信号的调制方式。
结果展示方法:
- 终端打印
- 表格
识别算法:
- 决策树
- 神经网络
- 解调模块: 调制识别模块将识别结果为FM、AM的信号特征信息(f0,B,M)传递给该模块、 该模块根据调制方式(M=FM或AM)启动不同的解调方式,给出信号的解调结果。
其中,前两个模块可以参考 gr-inspector, 第三个模块的AM/FM解调在GNU Radio 中已经有很成熟的方法。
基本同上。
在后续的内容中,我将逐一实现定频/扫频模式的各个模块的编写,这个过程中会重复造轮子(编写 GNU Radio 的 OOT 模块)、学习优秀的现有模块、学习其中的信号处理方法。这些过程会尽可能地记录在这个版本库中。