在您已经尝试过的方法中,对我来说“寻找光谱中的峰值”听起来是最有希望的,但是:
我的猜测是您的“频谱”实际上是使用 FFT 完成的 PSD 估计。这是了解光谱的好方法——但您可能已经注意到,“峰值”不会很清楚。
想一想:FM 的整个原理是改变载波的频率。因此,在单个 FFT 箱中寻找能量不会很好,因为这些箱太窄而无法“包含”单个站的所有能量(除非您选择非常低的 FFT 长度 -> 宽箱,但随后你无法区分车站)。
看待 FFT(这只是 DFT 的一种实现)而不是作为时域和频域之间的(基本)变换的另一种方式是将其理解为sinc 形滤波器的滤波器组。因此,如果您的无线电台的频谱恰好具有 sinc 形状,并且是fsampleNFFT间隔,这确实会很好。
可悲的是,该描述不适合 FM 广播电台。但是:使用不太具体的滤波器组,我们也许可以找到频道!
第一个观察结果是,如果它的频谱有点宽,并且在 87 到 108 MHz 之间的 UHF 频段,它就是一个 FM 电台,或者是非法的。所以,让我们不要过多考虑 FM 电台的特定光谱形状¹;相反,让我们
- 使用允许通过大约 160 kHz 带宽的滤波器
- 计算通过滤波器的所有信号的功率(只需对样本进行幅度平方并平均输出)
- 使用该过滤器+检测器并将其应用于所有潜在通道
滤波现在,该滤波器 (1.) 的设计可能相当简单:我将采用截止频率为 80 kHz 的任意实值低通滤波器;这将允许围绕其中心频率的 -80 kHz 和 +80 kHz 之间的 160 kHz。
幅度平方请记住,数字样本与 ADC 上的电压成正比,但在这里将是数字的。|·|² 只是一种计算与信号功率成正比的数字的方法——由于我们对绝对功率不感兴趣,而只对比某个任意阈值“更强”的东西感兴趣,这将做。
在整个频谱上应用滤波器老式的频谱分析仪方法是采用混频器,将其按顺序调谐到不同的频率,将滤波器应用于下混信号,然后计算功率。事实上,我们可以做这样的事情!但是,我们一次只能获得有关单个站点的信息。这对我们来说可能不够好,也可能不够好,而且它肯定和普通的汽车收音机一样好(它也能扫描!)。
现在,我们是 DSP 的骄傲申请者,所以我们不妨回到滤波器组的想法:让我们使用那个滤波器,复制它,移动 50 kHZ(我假设是 FM 电台频率光栅),然后应用这 420 个过滤器同时进行!
好吧,这将要求您一次“看到”完整的 21 MHz FM 分配频谱,而您的 RTL 加密狗不会这样做。相反,让我们选择您的加密狗能够一次采样的 2 MHz。那是40个过滤器。稍后我会回来为您准备一个信号处理流程图和代码。
¹ 顺便说一下,贝塞尔函数。你不想分析地处理这些。
²(108−87)MHz50kHz=21⋅1035⋅101=420