徐 曄,李寶雙
(中國船舶重工集團公司第723研究所,揚州 225001)
?
K近鄰算法在雷達信號識別中的應(yīng)用
徐 曄,李寶雙
(中國船舶重工集團公司第723研究所,揚州 225001)
介紹了機器學(xué)習(xí)算法中的K近鄰算法,討論了該算法在雷達信號識別中的應(yīng)用,用python語言實現(xiàn)了雷達識別程序,并分析了得到的結(jié)果,闡述了對算法結(jié)果產(chǎn)生影響的幾方面內(nèi)容。
K近鄰算法;python語言;雷達信號識別
雷達信號識別是在信號分選的基礎(chǔ)上,根據(jù)得到的雷達射頻、重頻、脈寬等信息,與數(shù)據(jù)庫中的已知信息進行比對,從而得到雷達的名稱、平臺、型號等信息的過程。雷達信號識別的結(jié)果為決策機構(gòu)提供了相關(guān)敵對方雷達的工作方式、平臺類型、威脅程度等信息,是指揮判斷的重要依據(jù)。雷達識別的一般流程如圖1所示。
圖1 雷達識別的一般流程圖
雷達信號識別有多種方法,如現(xiàn)在使用的最大隸屬度法、模板匹配法等。本文使用的K近鄰算法屬于機器學(xué)習(xí)算法的一種。
雷達信號識別的目的就是根據(jù)特征對目標(biāo)雷達進行分類,機器學(xué)習(xí)中有多種方法進行分類,其中的K近鄰算法屬于學(xué)習(xí)方法中的一種,因為該類算法需要明確知道目標(biāo)變量的分類信息,所以被稱為監(jiān)督學(xué)習(xí)算法,否則被稱為無監(jiān)督學(xué)習(xí)算法。K近鄰算法的工作原理是:存在一個樣本數(shù)據(jù)集合,稱之為訓(xùn)練樣本集,樣本中的每一數(shù)據(jù)都有自己的分類標(biāo)志,即樣本中的數(shù)據(jù)都明確地對應(yīng)一個所屬的分類。當(dāng)新輸入的數(shù)據(jù)沒有明確的分類標(biāo)志時,將該數(shù)據(jù)的特征與樣本集中數(shù)據(jù)的特征進行比較,然后算法提取相似度最高的數(shù)個數(shù)據(jù)的分類標(biāo)志,以此來確定新輸入數(shù)據(jù)的類型。一般情況下取前K個最相似數(shù)據(jù)中出現(xiàn)次數(shù)最多的分類標(biāo)志,并將其作為未知信號的分類。
K近鄰算法的一般流程如下:
(1) 收集數(shù)據(jù):可以使用多種方法收集數(shù)據(jù)。
(2) 準(zhǔn)備數(shù)據(jù):找到需要的特征值,將數(shù)據(jù)進行格式化。
(3) 測試算法:計算錯誤率。
(4) 使用算法:首先需要輸入樣本數(shù)據(jù)和結(jié)構(gòu)化的輸出結(jié)果,然后運行K臨近算法判定輸入數(shù)據(jù)分別屬于哪個分類,最后對計算出的分類進行后續(xù)處理。
K近鄰算法的優(yōu)缺點及適用范圍:
優(yōu)點:精度較高,對異常值不敏感,無數(shù)據(jù)輸入假定。
缺點:時間、空間復(fù)雜度較高。
K近鄰算法可適用于數(shù)值型等類型數(shù)據(jù)。
2.1 參數(shù)和測量方法的選取
在雷達識別中使用K近鄰算法,第1步需要收集數(shù)據(jù),可使用預(yù)設(shè)置的雷達信號參數(shù),第2步是確定數(shù)據(jù)的特征值并對其進行格式化。當(dāng)前情況下,信號分選可提供的參數(shù)主要有雷達的射頻類型、射頻值、重頻類型、重頻值、脈寬值、方位、幅度這幾種。根據(jù)經(jīng)驗可知,方位值及幅度值受單次測量影響較大,無法作為識別的依據(jù)。因此,選取射頻、重頻、脈寬3個值作為雷達信號識別的特征值。計算特征值間的距離時,使用歐氏距離進行計算:
(1)
2.2 編程環(huán)境及語言的選擇
為方便編程,選用python語言對數(shù)據(jù)進行處理。python語言語法較簡單,且可以操作多種高級數(shù)據(jù)類型,這些類型可以簡單地實現(xiàn)抽象的數(shù)學(xué)概念,在python中可以使用Numpy庫和Matplotlib庫完成矩陣操作和繪圖操作。這2個庫在編程中都有應(yīng)用。
2.3 算法實現(xiàn)
2.3.1 數(shù)據(jù)采集
算法實首先需要收集數(shù)據(jù),將15部預(yù)先設(shè)好的雷達參數(shù)存放在文本文件中由程序讀出。數(shù)據(jù)存放在radar.txt 中,每行順序存放射頻值、重頻值、脈寬值、雷達名稱4項,以換行符為分隔符,每行數(shù)據(jù)代表1部雷達的1次測量數(shù)據(jù)。文件中每部雷達有5組測量數(shù)據(jù),共有75組測量數(shù)據(jù)。數(shù)據(jù)限于篇幅不全部列出,僅對每部雷達取1組數(shù)據(jù)列出,如表1所示。
表1 雷達參數(shù)表
然后需要對數(shù)據(jù)進行處理,由于頻率參數(shù)絕對值較大,直接代入計算將會導(dǎo)致該分量所占比重過大,因此需要對參數(shù)進行歸一化處理。15部雷達的數(shù)據(jù)點分布如圖2~圖4所示。圖2為射頻-重復(fù)間隔關(guān)系圖,圖3為重復(fù)間隔-脈寬關(guān)系圖,圖4為射頻-脈寬關(guān)系圖。
圖2 射頻-重復(fù)間隔關(guān)系圖
圖3 重復(fù)間隔-脈寬關(guān)系圖
圖4 射頻-脈寬關(guān)系圖
2.3.2 算法實現(xiàn)及應(yīng)用
算法流程圖如圖5所示。
圖5 射頻-脈寬關(guān)系圖
將文本文件中的數(shù)據(jù)讀入內(nèi)存,根據(jù)要求,編寫了Filetomatrix函數(shù),代碼如下:
def Filetomatrix (filename):
Fp=open (filename)
Lines=fp.readlines()
returnMat=zeros((len(Lines),3))
LabelVector=[]
Index=0
For line in Lines
Line=line.strip()
Listfromline=line.split(' ')
retunrMat[index,:]=listFromLine[0:3]
LabelVector.append(int(listFromLine[-1]))
Index+=1
return returnMat,LabelVector
首先打開文件,并得到文件的行數(shù),也就是記錄數(shù),然后創(chuàng)建返回的Numpy特征矩陣,并將其置0。Strip函數(shù)用來截取所有的回車符,并用' '字符將得到的整行數(shù)據(jù)分割成一個元素列表,最后將文件內(nèi)容解析到該矩陣中。由于最后一個元素是雷達名稱,所以選取前3個元素存儲到特征矩陣中。
讀取數(shù)據(jù)完成后,將數(shù)據(jù)集中的每條記錄與數(shù)據(jù)集分別進行計算,得到每條數(shù)據(jù)的分類結(jié)果,最后計算正確率。源代碼如下:
def idetify():①
Errnum=0.0
radardataMat,radarLabels,radarlines=Filetomatrix(‘radar.txt’)②
numberofLines=len(radarlines)③
normMat,ranges,minVals=autoNorm(radarDataMat)④
for index in range(numofLines)
calssResult=classfy(normMat[index],norMat,radarLabels,3)⑤
Print calssResult
If classResult !=radarLabels[index]:
Errnum +=1⑥
return calssResult
第①步,定義函數(shù);第②步,將數(shù)據(jù)從文件中讀入特征矩陣中;第③步,讀取記錄條數(shù);第④步,將數(shù)據(jù)歸一化;第⑤步,循環(huán)讀入每條數(shù)據(jù)進行比對,并將結(jié)果打印出來;第⑥步,計算識別的正確率。
當(dāng)K值取3 時,識別結(jié)果的錯誤率為1.3%;當(dāng)K值取為4時,識別結(jié)果的錯誤率為2.6%;當(dāng)K值取5時,識別結(jié)果的錯誤率為0。表2為K=5時的識別結(jié)果。
表2中第3列表示關(guān)聯(lián)度最高的雷達類型出現(xiàn)次數(shù),可以看到,在參數(shù)相似的情況下,識別結(jié)果會出現(xiàn)一定的波動,但綜合后仍能給出正確結(jié)果。
根據(jù)程序?qū)崿F(xiàn)可知,對識別結(jié)果產(chǎn)生影響的主要有以下幾個方面:
(1)K的取值。K值大小對識別結(jié)果有一定的影響,取得太大,會導(dǎo)致計算量過大;取得太小,可能造成異常情況的出現(xiàn),從而影響識別結(jié)果。
(2) 樣本數(shù)量。樣本數(shù)量本身也會對識別結(jié)果造成影響,樣本數(shù)量過多,容易造成重復(fù)計算,影響識別速度;數(shù)量過少,則不能完全代表某類數(shù)據(jù),造成識別失敗。
表2 K=5識別結(jié)果
(3) 特征值數(shù)量。特征值的選取是識別中最重要的一環(huán),特征值是識別的依據(jù),因此必須是獨特的,能完全描述被測量信息的真實值,并且該值不會隨外界環(huán)境而改變。在雷達信號識別中,選取的射頻、重頻、脈寬值都符合上述要求,而同是測量參數(shù)的方位、幅度等因受外界環(huán)境影響較大,不能作為特征值使用。在信號處理產(chǎn)生的信息中,信號參數(shù)類型也是一類特征值,但該特征值會受到信號處理算法正確率的影響,不能完全置信。因此,若需要在算法中將參數(shù)類型作為特征值處理時,可以通過將參數(shù)類型數(shù)據(jù)化,并修改其在算法中的比重來修正對識別結(jié)果的影響。
雷達識別是一項系統(tǒng)工程,特征參數(shù)的選取、信息收集、前端數(shù)據(jù)測量精度等都會影響到識別結(jié)果,K近鄰算法作為一種監(jiān)督學(xué)習(xí)算法有實現(xiàn)簡單、精確度高、對異常值不敏感等優(yōu)點,在雷達信號識別中可以快速,正確地完成工作,同時由于K近鄰算法需要多次運算,因此在工程實踐中需要更好的優(yōu)化以達到最佳效果。
[1] CONWAY D,WHITE J M.機器學(xué)習(xí):實用案例解析[M].陳開江,劉逸哲,孟曉楠譯.北京:機械工業(yè)出版社,2013.
[2] HETLAND M L.python基礎(chǔ)教程[M].2版.司維,曾軍崴,譚穎華譯.北京:人民郵電出版社,2010.
Application of KNN Algorithm to Radar Signal Recognition
XU Ye,LI Bao-shuang
(The 723 Institute of CSIC,Yangzhou 225001,China)
This paper introduces the K-nearest neighbor (KNN) algorithm in machine learning algorithms,discusses the application of KNN algorithm to radar signal recognition,realizes the radar recognition program with python language,and analyzes the results,expatiates several factors influencing the algorithm results.
K-nearest neighbor algorithm;python language;radar signal recognition
2016-05-23
TN971.1
A
CN32-1413(2016)04-0056-03
10.16426/j.cnki.jcdzdk.2016.04.013