調整中心頻率
頻率移動 (頻移, 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 頻段),估計大概有多少個電台。