跳至主要內容

调整中心频率

Jia-Yin大约 3 分钟comm

频率移动 (频移, 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,这也提供了我们更大的弹性。

一般常见的作法,会先将信号乘上 ej2πfte^{j2\pi f t},这等于是将每个频率成份都加上 ff,或者就是将信号图往右移 ff Hz。如果我们设定接收信号的中心频率为 fcf_c,乘上的信号为 fsf_s,则中心频率的信号会平移到 fc+fsf_c+f_s

实际使用 GRC 进行测试:

设定其中模组参数为:

  • Samp_rate: 10e6
  • Soapy HackRF: Center_Freq=100e6
  • Range: fs=0~6e6
  • Signal Source: Freq=fs
  • Freq_Sink: Freq_Center=100e6

实验结果,把 fsf_s 移到 2 Mhz 所得的结果:

过滤观察频率

假设我们要观察的电台的中心频率为 ff,我们要想办法把 ff 移到频率的中心点,然后使用低通滤波器把其他高频成分滤掉。在上述的操作中,假设我们原先观察的频率中心为 fcf_c,当所有频谱往右移 fsf_s 之后,这时原来观察中心的频率变成 fcfsf_c-f_s,假设 fcfs=ff_c-f_s=f,则 fs=fcff_s=f_c-f

修改上述的系统,

  • 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 频段),估计大概有多少个电台。