跳至主要內容

調整中心頻率

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 頻段),估計大概有多少個電台。