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