LimeSDR 中文教程 (九)
這是第九篇教程。從第一篇教程開始,我們一步步教會你各種SDR相關工具,現在你應該會用LimeSDR做各種操作了。
上一篇文章,我們看了C程式碼,以及如何實現一個簡單的掃頻儀。這次我們要看一下pyLMS7002M,它是LimeSDR的python庫。我們這次不是要建立一個程式,而是解釋一下一個現成的例子,向量網路分析儀VNA。
注意,這個VNA精度不會很高,不是羅德施瓦茨產的夠買輛豪華轎車的儀器,但是它也能工作,讓你i大概知道某個電路在特定頻率下會如何表現。
我們需要一些元件:
定向耦合器
SMA連線線
SMA衰減器(10dB)
SMA介面的“校準過的”短路負載
開始
VNA例子需要一些依賴包,但是安裝不會太麻煩,首先你需要有一個LimeSDR環境(windows或者linux都行)。你還需要python 2.7或者3.x。
首先我們要安裝pyLMS7002M。用終端到這個資料夾下。
你應該能找到setup.py,你可以輸入python2 setup.py install來安裝,注意一定要強制使用python2。
接下來pySmithPlot也是用類似步驟安裝,只不過這次執行python3 setup.py install。在windows裡,我們需要手動用pip來安裝依賴。
安裝完成
到這裡VNA就應該能工作了,會生成s.2p檔案(S引數),但是不會顯示史密斯圓圖,這個圖對VNA很重要。
在pyLMS7002M的examples資料夾中,分為兩個子資料夾,basic和VNA,我們先試試basic資料夾下的findLimeSDR.py,它的功能就是它的名字,只需要輸入命令python2 findLimeSDR.py,就會得到下面的輸出:
這樣就代表pyLMS7002M庫工作正常了。接下來我們看看VNA資料夾下的例子。
VNA分為兩部分:測量和計算。首先要做的就是測量。但是開始之前,我們要設定硬體。可以看看下面的圖片:
從左往右,我們需要把接上TX2_1這個發射口。並使用RX1_H這個接收口。還需要一個10dB的衰減器,理論上這個值可以是別的,因為會被校準掉。它的功能只是為了提供一個固定的功率衰減,並控制輸出功率,這樣負載變化的時候影響就會減小,同時也可以提高測量精度。
定向耦合器
這可能是最難理解的部分了。我們不深入研究傳輸線理論,定向耦合器基本做兩件事:
耦合
定向
一條通道從輸入到達輸出,它被稱作主通道。這條通道與另一個埠形成耦合(通過微帶線和波導等方式)。你可以看看這裡的介紹。這樣訊號中的一小部分就會出現在耦合埠。方向性意味著,耦合通道的其中一個埠接入了一個匹配的阻抗。這樣會把那個方向大多數能量吸收掉。意味著只有一個方向的訊號會從匹配的埠發射出去。
你可能會想,我們可以自制一個定向耦合器嗎?當然是肯定的,但是它沒有經過校準,那麼耦合和方向性可能無法保證。微帶線版本的定向耦合器可能非常簡單,只是2條並行的路徑,其中有一頭的阻抗是50歐(這是對於LimeSDR來說的,也有系統的要用阻抗75歐的)。一個輸出口接入50歐後連到地上,另一個口就是耦合口。
你應該會想到,定向耦合器有幾個方面是重要的:耦合訊號的大小、方向性和損耗。推薦的耦合器是Mini Circuits ZHDC-16-63-S+。它的方向性是30dB,這個數字是訊號導通和隔離的比例。也就是說定向耦合器在兩個方向所看到的訊號的比例。主線損耗是2dB,也就是訊號從輸入到輸出的損耗。耦合大小是17dB。
我們手頭沒有Mini Circuits的耦合器,我們使用的是AtlanTecRF A2023-20。這樣就有一些問題:
首先,這耦合器的頻率範圍是500MHz到2GHz,第二它的方向性只有25dB。
這樣就產生了另一個問題,因為這個例子的預設設定是使用2.4GHz,所以我們需要把它改到適合我們的耦合器的範圍,我們選擇1.5GHz。還有一點要注意的是,這已經接近LNAH的頻段邊緣了,就會有一些問題,最好完全保持在支援的頻段內,或者更改匹配網路,使得它能夠更好地對要測量的頻率做匹配。這有點像先有蛋還是先有雞的問題,因為VNA就是用來解決這個問題的。
比如,我們的LNAH輸入口相位噪聲問題,那麼要做866MHz的精確測量就是不可能的。如果你看了這一段但是沒理解,你可以看看教程第二篇,我們說到過匹配問題。
初次測量
在開始調整頻率前。注意我們選擇LNAH路徑作為預設的LNA,那麼我們必須選擇1500MHz以上,否則會降低靈敏度。
開啟“measureVNA.py”,我們需要更改下面幾行(你可以根據你的需求來改):
startFreq = 2.3e9
endFreq = 2.4e9
nPoints = 101
改為
startFreq = 1500e6
endFreq = 1510e6
nPoints = 101
儲存檔案,並輸入“python2 measureVNA.py test1”
這樣就會在命令列輸出很多內容,然後會要求你連上短路負載用於校準。
這一步會校準VNA。最好用校準過的短路負載來做。有個難以理解的地方是,射頻電路的短路負載可能跟常識裡的短路負載不同。導線和PCB中的寄生電感和寄生電容可能就能實現這個電路,你不信的話可以用萬用表測量WiFi天線的直流電阻(這句話不確定)
做完校準後,指令碼會要求你接入DUT(待測裝置)。
接下來就會像校準一下執行相同的操作。簡單來說VNA的原理就是比較這兩組資料的相位和振幅,用來計算電抗(虛部)的損失和電阻(實部)的損失。
然後會使用一種特殊的圖形來清楚的展示這個資訊,這個圖形叫作史密斯圓圖。
搞定後,我們會生成兩個檔案:
vna_test1_short_1500000000.0_1510000000.0_101
vna_test1_DUT_1500000000.0_1510000000.0_101
繪製結果
接下來我們要處理這些檔案,得到S-引數和圖形。我們要改一下程式碼。在 “calculateVNA.py” 中,我們需要把下面的幾行改掉,這樣就能支援0.2.0版本的smithplot.py support.
這裡:
fromsmithplot.smithaxes importupdate_scParams
改為:
from smithplot.smithaxes import SmithAxes
檔案最下面:
subplot(1, 1, 1, projection=’smith’,grid_major_fancy=True,
grid_minor_fancy=True, plot_hacklines=True)
改為
subplot(1, 1, 1, projection=’smith’,grid_major_fancy=True,
grid_minor_fancy=True)
這樣就算是改好了。
接下來執行“python3 calculateVNA.py test1 plot”
第一個圖形是校準過的短路負載的相位,相位隨頻率變化很小,如果DUT就是短路負載,那麼結果應該與之類似。
類似短路負載的相點陣圖,這個圖也是相位/頻率圖。當負載帶有電抗成分後會產生相位變化。簡單來說,短路負載和DUT的相位差會做比較,這樣就能生成史密斯圓圖的複數阻抗了。
這是電壓駐波比,用來測量待測器件的反射功率比。
這是S11圖,表示負載反射回來的能量。
最後還有史密斯圓圖,展示的是用電抗分量和電阻分量來表示的負載的圖形,這裡有史密斯圓圖的基礎。
最後
希望LimeSDR教程對你有幫助。現在,我們已經把最有用的射頻開發的工具給你了,這就是VNA。根據我們的經驗,這個例子還可以再改進一下,用更大的射頻功率和更好的外部LNA。我們還注意到用更大的衰減器,我們會看到一些奇怪的結果,比如相位變化,可能是因為接收到的訊號處於底噪上。
你可以開始自己寫一些SDR程式了,就像這個VNA例子一樣。
注意要做這個實驗還有一些額外的步驟要做:
1. 安裝cython 直接apt安裝這個包
2.要到cylimelib目錄裡也執行一下python setup.py install
此處感謝熱心買家:antboy1979