1. 程式人生 > >LimeSDR 中文教程 (九)

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