黃秀麗,周月娥
(南京理工大學(xué)紫金學(xué)院,江蘇 南京 210023)
隨著信息技術(shù)的發(fā)展,虛擬仿真在實際應(yīng)用中越來越廣泛。虛擬仿真實驗教學(xué)是信息技術(shù)在教育領(lǐng)域的重要應(yīng)用,是教育信息化的重要組成部分。特別是應(yīng)對疫情對教學(xué)產(chǎn)生的影響時,在線教學(xué)成為主要的教學(xué)形式。但是,傳統(tǒng)依賴實驗設(shè)備的實驗教學(xué)形式?jīng)]有辦法搬移到互聯(lián)網(wǎng)上進(jìn)行。實驗教學(xué)部分就要充分考慮虛擬仿真實驗項目和相關(guān)實驗教學(xué)資源,積極開展在線實驗教學(xué)的探索與實踐,保障實驗課程的內(nèi)容和質(zhì)量。
通信原理作為電子信息類專業(yè)課程,也面臨著開展虛擬仿真實驗教學(xué)的要求。針對硬件實驗設(shè)備不易搬移的不足,有借助Matlab/Simulink 虛擬仿真實驗環(huán)境對傳統(tǒng)實驗方法進(jìn)行補充和改革的方案,也有基于SystemView 構(gòu)建的實驗教學(xué)體系。但是,這些虛擬仿真平臺上的仿真結(jié)果不能直接應(yīng)用到實際工程應(yīng)用中,仿真實驗形成的代碼不具備通用性,離開了仿真平臺就無法運行。尋找一種簡潔方便,與實際工程應(yīng)用緊密結(jié)合的仿真平臺成為通信原理虛擬仿真的當(dāng)務(wù)之急。Python作為近年來發(fā)展迅速的人工智能語言,與通信原理的結(jié)合越來越緊密,同時也為通信原理虛擬仿真提供了一種新的途徑。
虛擬仿真的實施過程中,需要結(jié)合理論知識來進(jìn)行。結(jié)合線上、線下的教學(xué)平臺,將多種信息技術(shù)手段融為一體,讓學(xué)習(xí)者在工程應(yīng)用、原理知識、實踐仿真、技術(shù)前沿各方面感知通信原理。讓學(xué)習(xí)者全方位理解通信原理知識點并掌握通信原理實際工程應(yīng)用能力。通過多種維度從理論剖析、仿真實驗、實際應(yīng)用、研究性學(xué)習(xí)等方面對通信原理進(jìn)行研究。
Python 做為近年來人工智能比較流行的語言,能夠以更簡潔的語法,更強大的第三方庫強有力地支撐復(fù)雜數(shù)據(jù)分析和智能處理。隨著通信技術(shù)的發(fā)展,Python 與通信系統(tǒng)相結(jié)合成為新的研究方向。結(jié)合通信技術(shù)的發(fā)展方向以及實際工程應(yīng)用的需要,將Python 與通信原理虛擬仿真相結(jié)合,不僅可以提升學(xué)習(xí)者對實驗原理的理解,更能將虛擬仿真的結(jié)果直接對接到實際工程項目,真正做到學(xué)以致用。Python 的可視化開發(fā)工具有很多,目前應(yīng)用較為廣泛的是PyCharm。在電腦上安裝了Python 的開發(fā)環(huán)境和開發(fā)工具PyCharm 后就可以進(jìn)行通信原理的虛擬仿真。
5G 技術(shù)的發(fā)展,其中關(guān)鍵技術(shù)之一就是信號調(diào)制。目前,應(yīng)用最廣泛的調(diào)制技術(shù)是QAM 調(diào)制。接下來將以典型的16QAM 調(diào)制為例介紹Python 在通信原理虛擬仿真中的應(yīng)用情況。
M 進(jìn)制調(diào)制中,共有M 種1 和0 的比特組合,分別對應(yīng)M 種碼元波形,每個碼元波形可傳輸log2M個比特的信息。QAM 調(diào)制中不同低頻基帶信號的比特組合對應(yīng)不同高頻帶通信號的碼元波形。QAM 碼元波形通過幅度或者相位上的不同對應(yīng)不同的比特組合。
QAM 調(diào)制是結(jié)合了幅度調(diào)制和相位調(diào)制的一種調(diào)制方式。通過將QAM 調(diào)制的公式展開可以發(fā)現(xiàn)QAM 可以表示成I 路和Q 路兩路正交載波的幅度鍵控之和。QAM 調(diào)制的虛擬仿真就是針對指定的二進(jìn)制比特流信號給出對應(yīng)的QAM 調(diào)制后的碼元波形。
以16QAM 為例,1個碼元對應(yīng)4 比特b0b1b2b3。那么就對應(yīng)前2個比特b0b1,QK 對應(yīng)后2個比特b2b3。于是將IK 的4個幅度+3A、+A、-A、-3A 與比特b0b1 的4個組合11、10、01、00 相對應(yīng)。QK 的4個幅度+3A、+A、-A、-3A 與比特b2b3 的4個組合11、10、01、00 相對應(yīng)。16QAM 中的16 種比特組合分別對應(yīng)了IK 和QK 的16 種不同排列組合。IK 和QK 的值不同也對應(yīng)了不同的AK 和θK。比特組合b0b1b2b3 與IK、QK 以及AK、θK之間的對應(yīng)關(guān)系可以用星座圖表示。16QAM 星座圖虛擬仿真的Python 代碼如下:
d i g r a m = {‘1 1’:3,’1 0’:1,’0 1’:-1,’00’:-3}#設(shè)置數(shù)字和幅度的對應(yīng)關(guān)系
spots = {}#放置點
plt.axis([-5,5,-5,5])#設(shè)置坐標(biāo)的數(shù)字范圍
for i in [‘0’,’1’]:
for j in [‘0’,’1’]:
for k in [‘0’,’1’]:
for p in [‘0’,’1’]:
str = ‘’.join([i,j,k,p])#通過循環(huán)獲得16個比特組合b0b1b2b3
str1 = ‘’.join([i,j])#前2個比特組合b0b1
a = digram[str1]#獲b0b1 對應(yīng)的值
str2 = ‘’.join([k,p])
b = digram[str2]#獲取b2b3 對應(yīng)的QK 值
complexSpot = complex(a,b)#將IK、QK 保存為一個復(fù)數(shù)的實部和虛部
plt.scatter(a,b,c=’black’)# 將IK、QK 做為橫坐標(biāo)、縱坐標(biāo)繪制星座點
plt.text(a,b+0.3,str,horizontalalignment=’center’)#繪制比特組合
tempspot = {str:complexSpot}#獲得數(shù)字組合和點的對應(yīng)
spots.update(tempspot)# 比特組合與點的對應(yīng)關(guān)系存入字典集合
隨著信息技術(shù)的發(fā)展,我國傳統(tǒng)農(nóng)業(yè)正在向現(xiàn)代化的智慧農(nóng)業(yè)轉(zhuǎn)化。智慧農(nóng)業(yè)是指依托農(nóng)業(yè)大數(shù)據(jù),集物聯(lián)網(wǎng)、傳感器、云計算等多種新興技術(shù)為一體,實現(xiàn)農(nóng)業(yè)生產(chǎn)中的智能感知、監(jiān)測、預(yù)警、分析等,并提供精準(zhǔn)決策。田間害蟲圖像作為農(nóng)業(yè)大數(shù)據(jù)的重要組成部分,準(zhǔn)確對其進(jìn)行識別,并以此為依據(jù)進(jìn)行害蟲防治,是實現(xiàn)智慧農(nóng)業(yè)的重要環(huán)節(jié)。
plt.show()
運行Python 代碼后就可以得到16QAM 的星座圖。如圖1 所示??梢园l(fā)現(xiàn)16QAM 信號有3個不同的幅度,12個不同的相位。相鄰比特需符合格雷碼編碼方式。
圖1 結(jié)合Python 的16QAM 星座圖虛擬仿真
通過星座圖可以得到比特組合對應(yīng)的IK 和QK 值。每個比特組合對應(yīng)一個復(fù)數(shù),復(fù)數(shù)的實部對應(yīng)IK 的值,復(fù)數(shù)的虛部對應(yīng)QK 的值。比特組合和復(fù)數(shù)的對應(yīng)關(guān)系保存在字典對象spots 中。根據(jù)spots 中比特組合與復(fù)數(shù)的對應(yīng)關(guān)系就可以進(jìn)行16QAM 調(diào)制波形的仿真。具體實現(xiàn)代碼如下:
# 基帶信號
plt.subplot(2, 1, 1)
y1 = [0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 1, 0, 1,1, 1, 1, 1, 0, 0, 1, 1, 0, 1, 1]
plt.plot(t, y1, drawstyle=’steps-post’) #將16個比特每隔0.5 繪制到坐標(biāo)系上
plt.xlim(0, 12)
# 串并變換
l4 = int(len(y1) / 4) # 獲取比特流的長度除以4,4個比特為一組
a = np.asarray(y1) # 將基帶信號轉(zhuǎn)換為numpy 格式
y2 = a.reshape(l4, 4) # 將一維數(shù)組轉(zhuǎn)置為二維數(shù)組,每一行有4個比特
plt.subplot(2, 1, 2)
t = np.arange(0, 12., 0.01) # 橫坐標(biāo)的數(shù)據(jù)列表,每隔0.01 繪制一個點
rectwav = [] # 用來存儲縱坐標(biāo)值的列表
# i 表示第i個碼元,繪制碼元波形
for i in range(l4):
b = y2[i] # 取出第i 組比特組合b0b1b2b3
str4Bits = str(b).strip(‘[‘).strip(‘]’).replace(‘ ‘,‘’) # 轉(zhuǎn)換為字符串并且去掉[ ] 和空格
complexWave = spots[str4Bits] #得到IK 和QK 的值
xWave = complexWave.real # 取出實部IK 的值
yWave = complexWave.imag # 取出虛部QK 的值
t_tmp = t[(i * 200):((i + 1) * 200)] #每段波形長度應(yīng)該是0.5 的4 倍,也就是2
xI_tmp = xWave * np.ones(200) #IK
yQ_tmp = yWave * np.ones(200) # QK
wav_tmp = xI_tmp * np.cos(2 * np.pi * 5 * t_tmp) - yQ_tmp * np.sin(2 * np.pi * 5 * t_tmp) #IK 和QK 分別與2個正交載波相乘求和
rectwav.append(wav_tmp) # 將調(diào)制后的點加到總的波形列表中
plt.plot(t, np.array(rectwav).flatten())
plt.xlim(0, 12)
plt.ylim(-5, 5)
plt.tight_layout()
plt.show()
在16QAM 調(diào)制波形仿真中,首先將基帶信號的比特流進(jìn)行串并變換,放在1個二維數(shù)組中,二維數(shù)組的每行對應(yīng)1個比特組合b0b1b2b3。在for 循環(huán)中對每行比特組合進(jìn)行遍歷,通過spots 字典查詢比特組合對應(yīng)的IK、QK 值,將IK、QK 分別與2個正交載波相乘求和。運行程序就得到了16QAM 的波形圖,如圖2 所示。
圖2 結(jié)合Python 的16QAM 波形調(diào)制虛擬仿真
通過虛擬仿真的結(jié)果可以看到Python 十分適合應(yīng)用在通信原理虛擬仿真中。Python 代碼簡潔易懂,仿真結(jié)果清晰直觀,同時可以直接應(yīng)用于實際工程項目中,與實際通信系統(tǒng)無縫連接。
結(jié)合Python 的通信原理虛擬仿真不僅為在線實驗教學(xué)提供了更多的可能,也促進(jìn)了人工智能技術(shù)在通信原理中的應(yīng)用,符合通信技術(shù)發(fā)展的方向。Python 作為人工智能的主要語言,為通信原理虛擬仿真提供了更加便捷開放的平臺,促進(jìn)了通信原理虛擬仿真與實際工程應(yīng)用的結(jié)合。通過Python 進(jìn)行通信原理的虛擬仿真需要同時掌握通信原理理論知識和Python 編程規(guī)則,廣泛深入地實施結(jié)合Python 的通信原理虛擬仿真還需要進(jìn)一步發(fā)展。