调整中心频率
频率移动 (频移, Frequency shifting/translation)
假设我们要观察 FM 的信号,其频率范围大约在 88~108 MHz。在这个频率范围中,有很多电台信号,每个电台信号大约占 200 kHz,而电台频率中心则位在每个频带的中心点。假设我们要接收的信号位于 98 MHz,我们可以设定 HackRF One 天线的接收频率中心为 98 MHz,但是一般来说,设定值和得到的结果可能会有一些误差,因此频率可能还是要做适当的调整。因此我们更常使用的方法,是固定接收频率的中心之后,使用频移 (frequency shifting/translation) 和滤波的方式来处理接收的信号。假设中心频率为 100 MHz,而取样频率为 10 MHz,那么有效的观察频率为 95~105 MHz,这也提供了我们更大的弹性。
一般常见的作法,会先将信号乘上 ,这等于是将每个频率成份都加上 ,或者就是将信号图往右移 Hz。如果我们设定接收信号的中心频率为 ,乘上的信号为 ,则中心频率的信号会平移到 。
实际使用 GRC 进行测试:
设定其中模组参数为:
- Samp_rate: 10e6
- Soapy HackRF: Center_Freq=100e6
- Range: fs=0~6e6
- Signal Source: Freq=fs
- Freq_Sink: Freq_Center=100e6
实验结果,把 移到 2 Mhz 所得的结果:
过滤观察频率
假设我们要观察的电台的中心频率为 ,我们要想办法把 移到频率的中心点,然后使用低通滤波器把其他高频成分滤掉。在上述的操作中,假设我们原先观察的频率中心为 ,当所有频谱往右移 之后,这时原来观察中心的频率变成 ,假设 ,则 。
修改上述的系统,
- Range: f=96e6~104e6
- Signal Source: freq=100e6-f
仿真结果如下 (f 值为 100.7 MHz):
低通滤波
我们可以再加上一个低通滤波器,只保留观察频率中心附近的频谱。
- LPF: Cutoff freq=80e3, Transition_Width=20e3
仿真结果如下 (f 值为 100.7 MHz):
频移 (frequency shifting/translation) 及滤波
上面调整频率的过程:把信号和一个 Signal Source 相乘,然后再经过低通滤波,由于经常使用,因此 GNU Radio 提供了一个 Frequency Xlating FIR Filter 模组来做这件事。这个模组就是把信号原来的中心点移到新的频率,并且以新的频率为中心做低通滤波,来保留所要的频道信号。
试著将系统修改如下:
注意其中 Frequency Xlating FIR Filter 的参数设定如下:
- Taps: firdes.low_pass(1, samp_rate, 80e3, 20e3)
- Center Frequency: f-100e6 (注意这边的用法,这里等于频率的偏移值)
firdes 是 GNU Radio 用来设计 FIR 滤波器的一个模组,而 low_pass 函数的四个参数依次为 Gain, Sample Rate, Cutoff Freq, Transition Width。
仿真结果如下(f 值为 100.7 MHz):
可以看到仿真结果与上述的结果一致。使用 Frequency Xlating FIR Filter 可以让系统看起来更清爽,不过缺点是调整过的频率,在还没有经过滤波时的中间信号,没有办法拉出来用 Frequency Sink 进行观察。
练习 3
使用上述所提到的方法,探索 88~108 MHz 频段(常见的 FM 频段),估计大概有多少个电台。