用Python實現喇叭天線設計小工具(四)

2022-01-02 微波射頻網

摘要:本節主要介紹主調模塊,以及GUI模塊的編寫。

主調模塊

終於到了主調模塊了,之前的章節主要介紹了參數計算,波導查值,以及HFSS封裝和調用等,所有準備工作已就緒,只差一個「主體」將這些模塊調用起來,實現這個功能的便是主調模塊main.py。

這一步的編寫相對比較簡單,按我個人習慣,還是採用了面向對象的編程思路,寫一個叫Horn的對象,首先通過對象的初始化功能將輸入參數導入進來,然後調用「波導查值」模塊確定波導尺寸、「參數計算」模塊計算喇叭尺寸,再調用「HFSS調用模塊」,通過規定一系列建模動作(如第三節所述),完成HFSS建模和運算。

示意代碼如下,如果對於建模的動作有不太明白了,請看上一篇文章的講解。

import paraCalc
import wg
import sim


class Horn:
def __init__(self, freq, HPE, HPH, wg_name=None):
self.freq = freq
self.HPE = HPE
self.HPH = HPH
self.wg_name = wg_name
self.wg_a, self.wg_b, self.horn_a, self.horn_b, self.horn_l = None, None, None, None, None

def wg_size(self):
if self.wg_name is None:
self.wg_a, self.wg_b = wg.check_by_freq(self.freq)
else:
self.wg_a, self.wg_b = wg.check_by_name(self.wg_name)
return self.wg_a, self.wg_b

def para(self):
self.wg_size()
if (self.wg_a or self.wg_b) is None:
print('Input error!')
else:
self.horn_a, self.horn_b, self.horn_l = paraCalc.calc(self.freq, self.HPE, self.HPH, self.wg_a, self.wg_b)

def realize_in_hfss(self):
h = sim.HFSS()

# 設置變量
h.set_variable('wg_a', self.wg_a)
h.set_variable('wg_b', self.wg_b)
h.set_variable('wg_l', self.wg_a*1.5)
h.set_variable('horn_a', self.horn_a)
h.set_variable('horn_b', self.horn_b)
h.set_variable('horn_l', self.horn_l)
h.set_variable('wg_t', 0.5)
h.set_variable('ab', 75/self.freq)

# 波導內腔
h.create_centered_rectangle('wg_a', 'wg_b', 0, 'wg_in')
h.create_centered_rectangle('wg_a', 'wg_b', 'wg_l', 'wg_in_')
h.connect('wg_in', 'wg_in_')

# 喇叭內腔
h.create_centered_rectangle('wg_a', 'wg_b', 'wg_l', 'horn_in')
h.create_centered_rectangle('horn_a', 'horn_b', 'wg_l+horn_l', 'horn_in_')
h.connect('horn_in', 'horn_in_')

# 波導外形
h.create_centered_rectangle('(wg_a+wg_t*2)', '(wg_b+wg_t*2)', '-wg_t', 'wg')
h.create_centered_rectangle('(wg_a+wg_t*2)', '(wg_b+wg_t*2)', 'wg_l', 'wg_')
h.connect('wg', 'wg_')

# 喇叭外形
h.create_centered_rectangle('(wg_a+wg_t*2)', '(wg_b+wg_t*2)', 'wg_l', 'horn')
h.create_centered_rectangle('(horn_a+wg_t*2)', '(horn_b+wg_t*2)', 'horn_l+wg_l', 'horn_')
h.connect('horn', 'horn_')

# 布爾運算生成喇叭,然後設為PEC
h.unite('horn', 'wg')
h.unite('horn_in', 'wg_in')
h.subtract('horn', 'horn_in')
h.set_material('horn')

# 生成區域並賦予輻射邊界
h.create_region('ab')
h.assign_radiation_region()
h.insert_radiation_setup()

# 設置埠
h.create_centered_rectangle('wg_a', 'wg_b', 0, 'port')
h.assign_port('port')
h.insert_analysis_setup(self.freq)

# 創建報告
h.create_reports()

# 保存工程並運行
h.save_prj()
h.run()


if __name__ == '__main__':
f, E, H = 10, 30, 20
a_horn = Horn(f, E, H)
a_horn.realize_in_hfss()

以上代碼可能沒有太多需要解釋的,可以看到的是,定義好HFSS接口後,調用過程就很輕鬆愉快了。

圖形交互界面模塊

開篇提到過,Python實現圖形界面的方法有很多,除了Tkinter屬於自帶包外,其他著名的包如PyQt、wxPython等都需要額外安裝,考慮到我們的小程序功能單一,界面也不需要太花哨,採用Python自帶的Tkinter是一種較為經濟快捷的選擇。

由於第一次寫界面,代碼質量可能有點差,實現效果也不怎麼樣,好在我們要做的東西功能簡單,不會影響使用。(自我安慰。。。)

不廢話,直接上代碼。

from tkinter import Tk, Label, StringVar, Entry, Button, Frame, TOP
import main

root = Tk()
root.title('最佳喇叭計算 by kuangzl')
root.geometry('420x280')
root.resizable(width=False, height=False)

tip = Label(root, text='由波束寬度計算喇叭尺寸,\n使得該尺寸下增益最大化', height=3,
font=('Microsoft YaHei UI', 12, 'italic'))
tip.pack(side=TOP)

frm = Frame(root)
frm.pack()

Label(frm, text='中頻(GHz):').grid(row=0, column=0)
Label(frm, text='E面(deg):').grid(row=1, column=0)
Label(frm, text='H面(deg):').grid(row=2, column=0)
Label(frm, text='波導寬(mm):').grid(row=0, column=2)
Label(frm, text='波導窄(mm):').grid(row=1, column=2)
Label(frm, text='喇叭寬(mm):').grid(row=2, column=2)
Label(frm, text='喇叭窄(mm):').grid(row=3, column=2)
Label(frm, text='喇叭長(mm):').grid(row=4, column=2)


def calc():
f = float(v1.get())
E = float(v2.get())
H = float(v3.get())
horn = main.Horn(f, E, H)
horn.para()
v4.set(horn.wg_a)
v5.set(horn.wg_b)
v6.set(horn.horn_a)
v7.set(horn.horn_b)
v8.set(horn.horn_l)


def hfss():
f = float(v1.get())
E = float(v2.get())
H = float(v3.get())
horn = main.Horn(f, E, H)
horn.para()
horn.realize_in_hfss()


v1 = StringVar()
Entry(frm, textvariable=v1, width=8).grid(row=0, column=1, padx=10, pady=5)
v2 = StringVar()
Entry(frm, textvariable=v2, width=8).grid(row=1, column=1, padx=10, pady=5)
v3 = StringVar()
Entry(frm, textvariable=v3, width=8).grid(row=2, column=1, padx=10, pady=5)


v4 = StringVar()
Label(frm, textvariable=v4, width=10).grid(row=0, column=3)
v5 = StringVar()
Label(frm, textvariable=v5, width=10).grid(row=1, column=3)
v6 = StringVar()
Label(frm, textvariable=v6, width=10).grid(row=2, column=3)
v7 = StringVar()
Label(frm, textvariable=v7, width=10).grid(row=3, column=3)
v8 = StringVar()
Label(frm, textvariable=v8, width=10).grid(row=4, column=3)

Button(frm, text='calc', command=calc).grid(row=4, column=0)
Button(frm, text='hfss', command=hfss).grid(row=4, column=1)

root.mainloop()

這段代碼實現的效果是這樣的:

點擊hfss按鈕以後的效果:小結

至此,該小程序已經完成了九成以上,作為自用已經毫無問題了!但如果還想將程序分享出來,則須打包成可執行文件(如exe),這一步貌似很簡單,卻有不少的坑,我將在下一節詳細介紹。

本篇即到此為止,下一篇將會是終篇,謝謝各位觀看(*^_^*)!

轉載自:知乎@況澤靈

系列文章:
用Python實現喇叭天線設計小工具(一)
用Python實現喇叭天線設計小工具(二)
用Python實現喇叭天線設計小工具(三)

原創文章:

Excel也能調用HFSS?

模擬和矢量信號源進階使用技巧
IQ正交調製器基礎知識和測試詳解
學個Antenna:Wi-Fi雙頻金屬中框天線
學個Antenna:手機天線之寬帶匹配原理
學個Antenna:手機天線入門

學個Antenna:HFSS腳本建模入門

Wi-Fi 6射頻技術全面解析及Wi-Fi 7熱點技術介紹

無線技術專欄:無線通信信號傳輸模型

使用矢網測量PA S11、S21和飽和功率的方法

學個Antenna:Matlab天線工具箱知多少(一)

原創乾貨:使用矢網測量PA S12 S22和功率的方法

ETC 天線技術概覽(工作方式、極化方式、實現方式、技術革新點)

附加相位噪聲測試方法

4G和5G基站天線工程知識和應用場景

噪聲的意義及測量方法

非50歐系統阻抗的S參數測試

交調失真的意義及矢網實例測量方法

增益壓縮的意義及矢網實操測量方法

S參數的意義及矢網實例測量方法

學個Antenna:偶極子天線饋電及倒V天線

從電磁波產生到對稱陣子天線

張躍平教授:無線電科學與技術中的因子4

相關焦點

  • 利用Python與HFSS聯合仿真設計一個微帶天線(附詳細代碼)
    我們知道HFSS是一款電磁仿真商用軟體,用其進行天線的設計十分方便。
  • 覆蓋60-90GHz的標準增益喇叭天線
    點擊上方actMWJC關注《微波雜誌》英聯的LB系列喇叭天線具有增益定標精確、低駐波、外觀輕巧等特點。
  • 實例:用 Python 做一個掃碼工具
    實現掃碼工具二維碼作為一種信息傳遞的工具,在當今社會發揮了重要作用。有想過自己實現一個掃碼工具嗎?如果想的話就繼續看下去吧!一、案例分析我們先思考一下,實現掃碼工具需要寫什麼操作。在掃碼過程中我們需要打開攝像頭,如何由手機或者電腦識別二維碼。所以我們要實現兩個關鍵的步驟:調用攝像頭、識別二維碼。
  • Qt Designer極速開發python桌面小工具詳解
    11、運行Python代碼此時嘗試運行剛剛生成的「conversion.py」是沒用的,因為生成的文件並沒有程序入口。因此我們在同一個目錄下另外創建一個程序叫做「main.py」,並輸入如下內容。在編寫QT的界面程序時,當我們調用QApplication.exec()時,我們就啟動了QT的事件循環。在開始的時候,QT會發出一些事件來顯示和繪製窗口部件。在這之後,事件循環就開始運行,不斷地檢查是不是有事件發生並且把這些事件發送給應用程式中的QObject。當一個事件被處理時,其他事件也可能會產生並且追加到QT的事件隊列中。
  • 四根天線嚇唬誰 小米路由器3說你呢!
    但小米路由器3的外形並不低調,4根天線簡直狂拽酷炫屌炸天!但一貫高調的小米怎會把這麼酷炫的小米路由器3隱藏起來呢?下面小編帶你來一探究竟。四根天線嚇死寶寶了  不知道你看到小米路由器3的時候,心中是否有個疑問「那小米路由器2呢?」。
  • 天線類型的普及與介紹
    這臺接收機的核心部分用的是改進了的金屬屑檢波器,波波夫採用電鈴作終端顯示,電鈴的小錘可以把檢波器裡的金屬屑震松。電鈴用一個電磁繼電器帶動,當金屬屑檢波器檢測到電磁波時,繼電器接通電源,電鈴就響起來。有一次,波波夫在實驗中發現,接收機檢測電波的距離突然比往常增大了許多。「這是怎麼回事呢?」波波夫查來查去,一直找不出原因。
  • 運用python實現埠掃描
    python的第三方模塊中,使用python-nmap模塊實現高效的埠掃描。Nmap(Network Mapper)是由 Gordon Lyon 設計的,是用來探測計算機網絡上的主機和服務的一種安全掃描器。為了繪製網絡拓撲圖, Nmap 發送特製的數據包到目標主機,然後對返回數據包進行分析。Nmap 是一款枚舉和測試網絡的強大工具,它同時能夠掃描出目標的詳細信息,包括主機存活、埠開放和服務名稱等。
  • 科普丨衛星天線簡史
    人類第一顆人造地球衛星,前蘇聯的Sputnik 1及鞭狀天線美國在1958年1月31日發射了其第一顆衛星——探險者1號,其裝備了108MHz的工作頻段及4根可摺疊的鞭狀天線及108.03MHz,採用了兩個玻璃纖維縫隙天線兩種類型及極化的天線。這四根22英寸(55.9釐米)長的天線依靠衛星旋轉甩出展開,發射圓極化電磁波。
  • 史上最齊全完整天線類型介紹
    線式扇形天線可以用三根、四根或五根金屬導線。扇形天線用於超短波接收。33、雙錐形天線雙錐形天線由兩個錐頂相對的圓錐體組成,在錐頂饋電。圓錐可以用金屬面、金屬線或金屬網構成。正象籠形天線一樣,由於天線的斷面積增大,天線頻帶也隨之加寬。
  • 雷達天線系統及天線陣列
    該天線使用小的零部件代替單片結構,從而實現快速拆分和封裝,以便在山區快速安裝和重新部署。機載雷達的機械掃描跟蹤波導陣列天線為了滿足各種機載雷達嚴格的電氣和機械要求,DRDO開發了一種基於廣泛電磁建模的設計方法,該方法採用矩量法(MoM)和有限元方法技術,提供了高度的準確性。有了計算機輔助設計(CAD)工具,計算機控制的槽加工和製造方法也被開發出來。
  • 【學習筆記】中繼無人機地面端天線自動跟蹤平臺設計與實現
    ,設計了基於RSSI盲估計跟蹤的無人機地面端天線自動跟蹤平臺。受微小型無人機載荷的限制,機載通信設備必須要滿足小型化、輕型化、低功耗的要求,同時,為了兼顧中繼通信覆蓋範圍的需求,機載天線只能選用增益小、覆蓋範圍廣的全向天線,在無法進一步加大發射機功率的條件下,其EIRP(Effective Isotropic Radiated Power)值受到制約[3],只能依靠地面接收系統提高天線增益來彌補。
  • 用Click編寫Python命令行工具
    構建這些命令行界面和工具是非常強大的,因為它使得幾乎所有的東西都可以自動化。 因此,隨著時間的推移,CLI可能變得相當複雜。通常從一個非常簡單的腳本開始,運行這些python代碼來完成一件特定的事情。我們將使用這些知識,並從簡單的腳本一步一步地通過命令行參數、選項及有用的用法說明CLI。所有這些都使用了一個叫做click的框架。在本教程的最後,你會知道:而且你也會看到如何用最少量的代碼來實現所有的功能。順便說一下,本教程中的所有代碼示例都使用Python 3.6。
  • 基於Python的交換機實時監控系統的設計與實現
    從高校校園網運維工作實際出發,論文提出了一種基於Python語言+SNMP協議的網絡交換機監測系統設計思路與實現方法。
  • 用 Webhook+Python+Shell 編寫一套 Unix 類系統監控工具
    Webhook+Python+Shell 編寫一套 Unix 類系統監控工具」前言告警系統是對系統監控必須掌握的技能、不管是用 zabbix、cacti 等監控平臺還是其他的監控工具,都需要有一個實時的監控與反饋機制,能讓問題、故障實時的通知到工程師的手裡,及時得到解決,以最大化的保障業務的正常。
  • RF高手設計天線,最精明的拆解專家也找不到
    介質共振器是作為一種無線電波能量透鏡(lens),能有助於聚集RF設計工程師所需要的能量,以實現更小巧的天線設計──因為能使用更少導電組件來達成同樣效果的天線增益。利用巧妙的工程,Antenna Company所設計之天線就像是捉迷藏高手,即使是最精明的拆解專家也會找不到──該公司團隊最引以自豪的技術就是能將天線的佔位面積最小化,隱藏在系統機構設計中,例如筆記本電腦的轉軸。
  • 四個 Python 庫,實現超實用的命令行功能
    」,「命令行界面創建工具包「,「Pygments」和「模糊搜索」。在第二部分中,我將介紹如何在幾個 Python 庫的幫助下實現這些功能。 在本文結尾,讀者應該很好地了解如何使用 Prompt Toolkit,Click(命令行界面創建工具包),Pygments 和 Fuzzy Finder 來實現一個易於使用的 REPL(交互式解釋器)。我計劃用少於 20 行的 Python 代碼中實現這一點。 讓我們開始。
  • 美國陸軍的機動衛星天線,真的是個球,還是充氣的
    在戰場上,唯一能保證己方優勢的就是提前掌握對手的信息,所以各種情報搜集工具就變得十分重要。現在美國陸軍十分重視前線指揮所使用的通訊器材,因為情報搜集和傳達,將在瞬息間改變戰場局勢。另外卡塞格倫天線可等效為具有長焦距的拋物面天線,而這種長焦距可以使天線從焦點至口面各點的距離接近於常數,因而空間衰耗對饋電器輻射的影響要小,使得卡塞格倫天線的效率比標準拋物面天線要高。但因為卡塞格倫天線是一個雙反射面的天線系統,副反射面、副反射面的支杆以及饋源必然會在主反射面上帶來遮擋影響,這使得卡塞格倫天線副瓣抬升、增益降低。
  • 用Python控制Arduino
    簡而言之:上下位機通過程序實現交互,不需要人工參與,一定程度上兩者可以相互轉化。1.6.2上位機操縱軟體PythonPython是一種面向對象、解釋型電腦程式設計語言,它的設計哲學是「優雅」、「明確」、「簡單」。因為其開源免費的精神與簡單易學的特點,自從1989年問世以來,尤其是2004年以後,python的使用率呈線性增長並被TIOBE程式語言排行榜評為2010年度語言。
  • Python中的十大圖像處理工具
    OpenCV-Python是OpenCV的python API。OpenCV-Python不僅速度快(因為後臺由用C / C ++編寫的代碼組成),也易於編碼和部署(由於前端的Python包裝器)。 這使其成為執行計算密集型計算機視覺程序的絕佳選擇。
  • 雷達(微波)感應天線設計
    中國最活躍的射頻微波天線雷達微信技術群 電子獵頭:幫助電子工程師實現人生價值!