跳至主要內容

解調

Jia-Yin大约 2 分鐘comm

處理基頻訊號

將上節中調變過的訊號餵給一個 Virtual Sink, id=ooksignal。接下來我們增加一些模組,如下圖所示:

其中新增模組的參數如下:

  • Virtual Source: id=ooksignal
  • Xlating FIR Filter:
    • Taps: firdes.low_pass(1, samp_rate, 40e3, 1e3)
    • Center Frequency: fstation-fcenter
  • Time Sink:
    • Number of Points=16384,
    • Y: -0.1~1.1
    • Trigger Mode: Auto
    • Trigger Level: 0.5
    • Trigger Delay: 0.0002

執行後會得到下圖的結果:

這個結果應該不難理解,主要就是把要處理的基頻訊號截取出來,並且取其振幅再進行觀察。

解調訊號

接下來我們再新增幾個模組,修改系統如下:

其中新增模組的參數如下:

  • Add Const: -0.25
  • Binary Slicer: N/A
  • Char To Float: default
  • Time Sink:
    • Number of Points=16384,
    • Y: -0.1~1.1,
    • Trigger Mode: Auto,
    • Trigger Level: 0.5,
    • Trigger Delay: 0.0002 -

上圖中 Binary Slicer 是把收到的實數訊號改成二元訊號,其中正值輸出為 1,負值輸出為 0,且輸出型態為 Byte。因此我們再加上一個 Char To Float 將其轉換為浮點數。執行後會得到如下的結果:

比對上下兩個訊號,會發現完全一致,表示傳送訊號已經被解調回來了。

練習 2

  1. 實際上在上述的執行結果中,每個 0 和 1 的訊號仍然持續了一定的寬度,所以仍不算是最原先的訊號。請在系統中加上一個 Keep 1 in N 的模組,將重覆的訊號改成單一的訊號;另外將後面的 Time Sink 的 Number of Points 改成小於 1024 的數,觀察看是否可得到原先 Vector Source 的訊號。
  2. (Optional) 實際上這邊使用了 Virtual Sink 及 Virtual Source 當作傳送及接收的端點。如果我們把 Virtual Sink 改成 Osmocom Sink,就可以把調變過的訊號透過 SDR 發送出去;把 Virtual Source 改成 Osmocom Source,就可以透過 SDR 接收調變過的訊號,這樣就變成一個真正的傳輸系統,不過接收端可能因為延遲的緣故,接到的訊號會是平移的版本。除此之外,我們也可以用 File Sink 把傳送的調變訊號錄下來,然後用 File Source 來取得調變的訊號,有興趣的同學可自行嘗試看看。