LimeSDR 中文教程 (三)
這是這個系列教程的第三篇。我們會以之前的教程為基礎,如果你沒看可以點這裡。
上一次我們詳細看了RX部分,這樣就能更好理解LimeSuite程式裡的設定選項。上一篇文章理論比較多,這一篇文章理論會少一些,我們會做更多實際操作。
開始
我們會使用“self test”例子作為本文的基礎。原因是隻要你有LimeSDR,你不需要額外的硬體(比如RF口上不需要接東西)就能使用。如果你想看一下步驟,可以點選這個連結並觀察例子3.7。(self test中的例子)
這個例子中使用的頻率是2100MHz,在英國是3G蜂窩網路的頻段,你大多數情況下都沒有在這個頻段發射的許可。我們使用了內部環路,這樣就不會真正發射出訊號,但是任然會有一小部分射頻能量從我們接著天線的口上漏出來。因此做這個測試時最好移除天線(或者你也可以換到你有權使用的頻段上去),這樣你就不會不小心地在這個頻段發射出訊號了。我們的內部環路加在高頻率的通道上,因此你選擇的頻段也必須在這個範圍內。
當你根據步驟到達3.7並得到上面的FFT影象後,我們可以具體理解一下這個例子到底做了些什麼。
載入”self_test.ini”
在LMS7002M晶片內部有上千個暫存器,因此要手動設定會非常麻煩。我們使用ini檔案來解決這個問題,它裡面包含了LMS7002M的暫存器設定,可以自動設定它們,我們不需要關心。如果你對這個感興趣,可以看看這個文件。
下面是self_test.ini中的一部分,我們提取出來作為例子。
[file_info]
type=lms7002m_minimal_config
version=1
[lms7002_registers_a]
0x0020=0xFFFD < Reset and PWR settings
0x0021=0x0E9F < SPI/I2C control
0x0022=0x07DF < Pad Drive control settings
SXT/SXR
SXT是用來控制TX PLL(發射部分的鎖相環)和時鐘發生器的,它和SXR非常類似,所以我們可以同時觀察。我們暫時不需要調整引數,只需要點選calculate和tune按鈕,但是最好還是理解一下到底是怎麼回事。
接下來要說的東西需要更多的知識:
之前的文章我們講過RX PLL(鎖相環),以及如何合成一個時鐘。實際上PLL只是把時鐘的相位與另一個時鐘源做了同步。我們說的另一個時鐘源是由參考時鐘和乘法器、除法器一起生成的。PLL保證了所有這些合成的時鐘都是同步的,這樣我們可以減少相位差和相位噪聲。
我們可以看一下下面的PLL結構圖,可以發現PLL由3部分組成:
- Inputs (Nint,Nfract & PLLCLK(ref)) 輸入引數
- A feedback loop 負反饋環路
- A VCO 壓控振盪器
回到self test例子中,我們可以看到當按下calculate按鈕後,這個選項卡中的許多引數都自動調整了。你可以試試改變頻率,然後看看那幾個引數會對應變化(記得看完了要改回來,然後按一下calculate)。
CLKGEN
這個時鐘發生器部分和前面說的有點相似,它用來控制LMS7002M的數字部分,因此有些引數需要優化一下。我們的主要目標是在發射部分的DAC(數模轉換)中做過取樣,以此提升SNR(信噪比),更高的時鐘一般來說效果都會更好。
內部環路
這個顧名思義就能知道是什麼,它控制了SKY13323射頻晶片,把它選為了環路模式。
載入WCDMA波形
FPGA的一部分功能是波形回放功能,它能夠按照正確的格式給LMS7002M提供已知的波形資料。
當我們載入波形後,還需要勾選MIMO,這樣波形就會在兩條發射通道上同時播放。如果你沒有把相應的波形檔案放到LimeSuite要求的資料夾下時,WCDMA按鈕是無效的。如果你碰到這個問題,可以點選Custom按鈕來載入你那裡的WCDMA波形。
改變引數
我們終於可以來調節訊號了。我們可以只對A通道做更改,而不更改B通道,這樣就能看出效果。你先要保證你能做到self test中的兩個波形看上去差不多的樣子。波形的IQ影象應該和我們的截圖一致。現在兩個通道的圖形應該是一樣的,但是我們馬上會做一些更改。
在開始之前,我們需要知道選項卡中的某些選項是對兩個通道同時有效的,比如SXT中的asan。我們之前看過LMS7002M的結構了,從中我們可以看到這些細枝末節。在我們前面看到的資料裡,可以發現PLL模組是被兩個通道共享的,因此改變這個引數對兩個通道同時起作用。這就是為什麼我讓你們先了解了背景知識,這樣你在這裡才會理解。
我們暫時不更改發射引數,先更改接收部分的引數,改一下上一篇文章提到過的引數。我們現在看到的I/Q影象,可以注意到這個形狀是一大塊點(理論上應該填滿這一塊)。如果我們用的是別的訊號,比如QAM64,那麼這種形狀就是不對的,因為那種調製對應的應該是離散的點。看懂星座圖很有用,它能幫助你更改引數,你可以先隨意調整一下,最終再做優化。
更改增益
我們知道LMS7002M的最前面一級是LNA,那麼我們先來調整它,它現在的設定應該是GMAX,也就是達標了最大值。我們把它降低為GMAX-12,可以發現星座圖看起來更緊密了,這意味著我們開始丟失資訊了。
所以我們減少接收端的輸入會造成這個現象。那麼我們如果減少發射端的輸出會得到相同結果嗎?我們試試。先把RX的LNA改回GMAX,然後到TX PAD gain control處改為16,它是TX LNA的一部分(在TRF選項卡里)。
你可以看到,結果和之前的類似。另外,TBB選項卡里還有一個frontend gain,它調整的是基帶增益。我們現在調整一組引數,先把TXPAD調整為12(TRF選項卡),然後再把frontend gain調整為60(TBB選項卡),這樣還原到原來的增益。
我們看到增益確實增加了,但是訊號出現了失真。不止是星座圖變成了很大的一個點,而且對臨近頻段也造成了干擾。這是為什麼?
這是因為我們對濾波器過載了,你可以看到IQ星座圖裡的嚴重失真(變成方的了)。在相鄰頻段還出現了毛刺。顯然這個設定是不對的,這可以作為錯誤的設定的例子。一般來說,在調整完大多數設定後,我們只要調整TXPAD。大多數設定已經在self_test.ini裡設定好了,所以我們可以直接按照那個檔案裡的引數為基礎。對於RX增益也是如此,我們還沒改過TIA和PGA增益,但是大多數應用中最好別改。
濾波器
回到self_test.ini(重新載入檔案,並在TX和CLK中點選Calculate和Tune按鈕)。我們知道TX和RX中的第二級都是濾波器,改變它們會有什麼影響?
TBB(發射部分濾波器設定)
我們現在把TX濾波器設定為52MHz,我們可以更改這個濾波器引數,這麼修改會造成更差的結果。幸運的是,下面還有一個Tune按鈕會自動計算濾波器係數。輸入100MHz,然後點選Tune按鈕,你會得到一個稍微小一點的IQ圖,因為我們發出了更多的噪聲(這裡不理解?噪聲多了不是應該更大麼)。注意我們在這裡使用的是TXLPFL濾波器。
我們還可以去掉LPFLAD_TBB和LPFS5_TBB的勾選,繞過這些濾波器。這樣我們會看到最大的星座圖。我們對臨近頻率造成了很大的干擾,因為我們沒有濾波器了,無法過濾高階諧波。你最好不要發射這種訊號,因為它會干擾其它頻段,無委會會來找你。最後記得重新把濾波器加入,並且把濾波器調整為52MHz。
RBB(接收部分濾波器設定)
這個部分對許多要接收訊號的人來說很有用,因為要提高接收質量就要做濾波。問題在於我們的WCDMA波形是很乾淨的。比如,我們選擇LPF_Bypass,即去掉10MHz的輸入濾波器後可能看不到什麼區別。
手動調整輸入濾波器引數可能會比較容易理解,這些濾波器是RC濾波器。再次選上LPFL,並把電容值增加到1200,我們可以看到,波形嚴重失真了,因為我們把高頻率的資訊過濾掉了。雖然我們可以手動調整濾波器,但是我還是推薦你自動選擇這些值,這就和TX裡面一樣。點選Tune按鈕會還原原本的設定。
最後
現在我們已經對上一篇文章裡說到的大多數模組都做過設定了。儘管還有許多地方我們沒有說到,比如Bias設定,ADC/DAC模組,以及LMS7002M的數字部分。但是這些設定對於新使用者來說不太重要,我們以後再說。
大多數情況下,我們的修改都把訊號越改越差,但是知道原理後可以幫助我們以後改得更好。
下一篇文章我們會看一些應用例子,做一些優化,這樣你以後在使用LimeSDR時會更有信心。
相關推薦
LimeSDR 中文教程 (三)
這是這個系列教程的第三篇。我們會以之前的教程為基礎,如果你沒看可以點這裡。上一次我們詳細看了RX部分,這樣就能更好理解LimeSuite程式裡的設定選項。上一篇文章理論比較多,這一篇文章理論會少一些,我們會做更多實際操作。開始我們會使用“self test”例子作為本文的基礎
LimeSDR 中文教程 (八)
這是第八篇教程。我們在第一篇就說過,我們會從SDR新手開始一步步教你,直到你學會呼叫API程式設計。前幾篇說完後,現在是時候開始寫程式了。如果你已經讀完了前面的文章,會用GNU Octave,也熟悉Pothos和GNU Radio了,那麼直接呼叫API只需要再前進一小步。在L
LimeSDR 中文教程 (五)
這是本教程的第五篇,我們上一次看了軟體無線電的軟體部分,使用了一個相對簡單的流圖開發環境Pothos。從理論的角度比再之前的幾篇文章簡單些。這次我們要稍微深入看一下,我們這次的例子用程式碼來寫。快速複習根據維基百科的定義,軟體無線電是:“把以往用硬體實現的元件(混頻器、濾波器
LimeSDR 中文教程 (九)
這是第九篇教程。從第一篇教程開始,我們一步步教會你各種SDR相關工具,現在你應該會用LimeSDR做各種操作了。 上一篇文章,我們看了C程式碼,以及如何實現一個簡單的掃頻儀。這次我們要看一下pyLMS7002M,它是LimeSDR的python庫。我們這次不是要建立
LimeSDR 中文教程 (七)
在GNU Radio中接收和發射ASK訊號這是第七篇教程。我們繼續上一次的內容,我們會仿製出一個最簡單的無線電裝置。上一篇文章我們可以接收位元流,但是每個符號對應的位元數是錯誤的。這篇文章,我們計劃改進ASK接收機,並且設計一個發射機,重放資料。要實現這個目標我們需要同時有發
Deep learning with Theano 官方中文教程(翻譯)(三)——多層感知機(MLP)
供大家相互交流和學習,本人水平有限,若有各種大小錯誤,還請巨牛大牛小牛微牛們立馬拍磚,這樣才能共同進步!若引用譯文請註明出處http://www.cnblogs.com/charleshuang/。 下面。http://deeplearning.net/tutorial/mlp.html#mlp 的中
Jasperreports+jaspersoft studio學習教程(三)- 解決列印pdf中文不顯示問題
中文不顯示是一個常見問題。解決方法在網上也是五花八門。試過幾次,親測有效為介紹的這種: 中文不顯示問題主要是jasperreports提供的font包不能為中文格式提供支援,所以我們需要自定義一個font包,用於支援。 3.1 在studio中新增中文字型 3.1
Spring 新手教程(三) 註入和自己主動裝配
文件 auto 進行 上下文 xxx -s 重要 mls 上下 Spring註入是指在啟動Spring容器載入bean配置的時候。對類變量的賦值。 兩種經常使用註入方式:設值註入和構造註入 以下就這部分知識看代碼以及代碼中的註解: 1、首先看S
學習 MeteoInfo二次開發教程(三)
開發教程 cnblogs false raw class .dll dll inf legend 1.breakList的問題 ((PolygonBreak) aLS.breakList[0]).DrawFill=false; 新的類庫將LegendScheme的brea
CodeArt入門教程(三)
pan center account 根據 領域對象 保存 顏色 單一職責原則 用例 5.領域模型設計 下面我們創建賬戶子系統(AccountSubsystem),賬戶子系統雖然被門戶服務使用,但是子系統本身是獨立於任何服務存在的。所以我們為賬戶子系統創建獨立的項目解決
Dapper入門教程(三)——Dapper Query查詢
int32 method ppi ransac try spa can () raw 介紹 查詢方法(Query)是IDbConnection的擴展方法,它可以用來執行查詢(select)並映射結果到C#實體(Model、Entity)類 查詢結果可以映射成如下類型: A
微信公眾平臺開發教程(三) 基礎框架搭建
開發 images wxs user 設計實現 bytes trre 來源 app 上一章,我們已經初步講解了微信公眾賬號開發的基本原理,今天我們來探索設計實現。 首先我們設計了模塊層次圖,當然圖中只是給出一種實現方式,不局限於此。具體見下圖。 主要功能介紹如下: 1)請求
Git 教程(三):倉庫與分支
ide 不但 clas version span 右上角 director discard pre 遠程倉庫 到目前為止,我們已經掌握了如何在Git倉庫裏對一個文件進行時光穿梭,你再也不用擔心文件備份或者丟失的問題了。 可是有用過集中式版本控制系統SVN的童鞋會站出來說,這
python基礎教程(三)
new gre multi mar tro ext blog 信息 無法 序列概覽 Python 包含6 種內建的序列,這裏重點討論最常用的兩種類型:列表和元組。 列表與元組的主要區別在於,列表可以修改,元組則不能。也就是說如果要根據要求來添加元素,那麽列表可以會更
Spring Boot參考教程(三)內部應用監控(Actuator)
使用方式 實現類 pat igp pid localhost aid 倉庫 默認 3. 內部應用監控(Actuator) 如上2.4中所述,傳統spring工程中工程的初始化過程,bean的生命周期,應用的內部健康情況均無法監控,為了解決這個問題,spring boot提供
3D Slicer中文教程(四)—圖像分割
細節 這樣的 切片 present complete 加載 surf photos 初始化 1.數據獲取 (1)下載3D Slicer自帶的樣本數據 (2)選擇自由的數據 (3)網上數據庫等其他方式下載數據 2.分割工具 Segment Editor是一個用於
Python入門教程(三)
循環 三個參數 normal 編程 list bili lan 函數返回 容易 按理說,這篇是收尾了。可能有一點術語,但大都是顧名思義的。重要概念【類】在第二個標題下說明。函數式編程(縮寫:FP) 如果對此有興趣,可以看scheme視頻教程(SICP公開課)(sche
企業級 SpringCloud 教程 (三)服務消費者(Feign)
pom https www. ram cat -h 客戶端 tin script 上一篇文章,講述了如何通過RestTemplate+Ribbon去消費服務,這篇文章主要講述如何通過Feign去消費服務。一、Feign簡介 Feign是一個聲明式的偽Http客戶端,它使得寫
Spring Cloud Commons教程(三)忽略網絡接口
ech 什麽 targe 地址 分享圖片 ans str log list 有時,忽略某些命名網絡接口是有用的,因此可以將其從服務發現註冊中排除(例如,在Docker容器中運行)。可以設置正則表達式的列表,這將導致所需的網絡接口被忽略。以下配置將忽略“docker0”接口
Spring Cloud Stream教程(三)持續發布 - 訂閱支持
點對點 cst 服務 均值 而不是 兩個 搭建 另一個 進行 應用之間的通信遵循發布訂閱模式,其中通過共享主題廣播數據。這可以在下圖中看到,它顯示了一組交互式的Spring Cloud Stream應用程序的典型部署。 SCSt傳感器圖6. Spring Cloud Str